nanodet训练voc数据集

首先是修改配置文件,config/nanodet_custom_xml_dataset.yml

主要是修改以下几项
 

class_names: &class_names ['aeroplane','bicycle','bird','boat','bottle','bus','car','cat','chair','cow','diningtable',
'dog','horse','motorbike','person','pottedplant','sheep','sofa','train','tvmonitor']

num_classes: 20

img_path: /media/sf_D_DRIVE/tmp/data/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/JPEGImages
ann_path: /media/sf_D_DRIVE/tmp/data/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/Annotations

参考全部文件

#Config File example
save_dir: workspace/nanodet_m
model:
  weight_averager:
    name: ExpMovingAverager
    decay: 0.9998
  arch:
    name: NanoDetPlus
    detach_epoch: 10
    backbone:
      name: ShuffleNetV2
      model_size: 1.0x
      out_stages: [2,3,4]
      activation: LeakyReLU
    fpn:
      name: GhostPAN
      in_channels: [116, 232, 464]
      out_channels: 96
      kernel_size: 5
      num_extra_level: 1
      use_depthwise: True
      activation: LeakyReLU
    head:
      name: NanoDetPlusHead
      num_classes: 20
      input_channel: 96
      feat_channels: 96
      stacked_convs: 2
      kernel_size: 5
      strides: [8, 16, 32, 64]
      activation: LeakyReLU
      reg_max: 7
      norm_cfg:
        type: BN
      loss:
        loss_qfl:
          name: QualityFocalLoss
          use_sigmoid: True
          beta: 2.0
          loss_weight: 1.0
        loss_dfl:
          name: DistributionFocalLoss
          loss_weight: 0.25
        loss_bbox:
          name: GIoULoss
          loss_weight: 2.0
    # Auxiliary head, only use in training time.
    aux_head:
      name: SimpleConvHead
      num_classes: 20
      input_channel: 192
      feat_channels: 192
      stacked_convs: 4
      strides: [8, 16, 32, 64]
      activation: LeakyReLU
      reg_max: 7

class_names: &class_names ['aeroplane','bicycle','bird','boat','bottle','bus','car','cat','chair','cow','diningtable',
'dog','horse','motorbike','person','pottedplant','sheep','sofa','train','tvmonitor']
data:
  train:
    name: XMLDataset
    class_names: *class_names
    img_path: /media/sf_D_DRIVE/tmp/data/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/JPEGImages 
    ann_path: /media/sf_D_DRIVE/tmp/data/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/Annotations
    input_size: [320,320] #[w,h]
    keep_ratio: True
    pipeline:
      perspective: 0.0
      scale: [0.6, 1.4]
      stretch: [[1, 1], [1, 1]]
      rotation: 0
      shear: 0
      translate: 0.2
      flip: 0.5
      brightness: 0.2
      contrast: [0.8, 1.2]
      saturation: [0.8, 1.2]
      normalize: [[103.53, 116.28, 123.675], [57.375, 57.12, 58.395]]
  val:
    name: XMLDataset
    class_names: *class_names
    img_path: /media/sf_D_DRIVE/tmp/data/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/JPEGImages #Please fill in val image path
    ann_path: /media/sf_D_DRIVE/tmp/data/VOCtrainval_11-May-2012/VOCdevkit/VOC2012/Annotations #Please fill in val xml path
    input_size: [320,320] #[w,h]
    keep_ratio: True
    pipeline:
      normalize: [[103.53, 116.28, 123.675], [57.375, 57.12, 58.395]]
device:
  gpu_ids: [0] # Set like [0, 1, 2, 3] if you have multi-GPUs
  workers_per_gpu: 8
  batchsize_per_gpu: 96
schedule:
#  resume:
#  load_model: YOUR_MODEL_PATH
  optimizer:
    name: AdamW
    lr: 0.001
    weight_decay: 0.05
  warmup:
    name: linear
    steps: 500
    ratio: 0.0001
  total_epochs: 300
  lr_schedule:
    name: CosineAnnealingLR
    T_max: 300
    eta_min: 0.00005
  val_intervals: 10
grad_clip: 35
evaluator:
  name: CocoDetectionEvaluator
  save_key: mAP

log:
  interval: 10

开始训练

export PYTHONPATH=.
python tools/train.py config/nanodet_custom_xml_dataset.yml

voc的数据集的标签文件,Annotations/2011_003353.xml的ymin是一个float类型,运行时代码会报错,

ValueError: invalid literal for int() with base 10:

我就没改代码,直接把45.7改为了45

同样的还有2011_006777.xml

当然上面的配置是比较暴力,把所有数据都作为训练数据和验证数据,这肯定是不合理的

那我们可以把一部分数据移动到另一个文件夹即可,如

mv *9.xml ../test/Annotations

然后把验证数据的 ann_path 设定为新建的文件夹即可

<think>好的,用户现在问的是关于NanoDet的情况。我需要先回顾之前的对话历史,看看用户之前问了什么。之前的对话中,用户询问了FastestDet是否支持自定义训练,我详细介绍了它的训练步骤、配置要求、注意事项等。现在用户的问题转向了NanoDet,可能是在比较这两个轻量级目标检测模型,或者想了解更多的轻量级选项。 首先,我需要确认用户对NanoDet的了解程度。他们可能已经知道FastestDet,现在想了解另一个类似的模型。用户可能是开发者或者研究者,正在寻找适合自己项目的目标检测模型,特别是那些需要在资源受限的环境下运行的模型,比如移动设备或嵌入式系统。 接下来,我需要介绍NanoDet的基本信息,包括它的特点、优势,以及与FastestDet的区别。用户可能关心NanoDet是否支持自定义训练,就像FastestDet那样,所以需要明确回答这一点。同时,用户可能也想知道NanoDet的性能、速度、准确度,以及在实际应用中的使用场景。 需要详细说明NanoDet的技术亮点,比如它的轻量化设计、模型结构(如ShuffleNet作为Backbone)、损失函数(如GFL损失),以及训练和部署的便利性。这些都是开发者选择模型时的重要考量因素。 另外,用户可能会关心如何开始使用NanoDet,包括环境配置、数据准备、训练步骤、模型导出等。需要提供清晰的步骤,可能还要包括示例命令和配置文件修改的建议,这样用户可以直接应用。 还要考虑用户可能遇到的常见问题,比如训练中的显存不足、精度不高等,提供解决方案。同时,比较NanoDet和FastestDet的异同,帮助用户根据具体需求做出选择。 最后,总结NanoDet的适用场景,比如移动端应用、边缘计算设备,以及需要快速部署和高效推理的情况。确保用户能够明确NanoDet的优势和潜在的应用方向。</think>以下是关于 **NanoDet** 的详细介绍: --- ### **1. NanoDet 是什么?** NanoDet 是一款超轻量级、高性能的 **单阶段目标检测模型**,专为移动端和边缘计算设备设计。其核心特点包括: - **极小的模型体积**:<1MB(INT8量化后),推理速度极快(CPU上可达10~30 FPS)。 - **高精度与低延迟平衡**:在COCO数据集上实现约20~25 mAP,同时保持毫秒级推理速度。 - **模块化设计**:支持灵活替换Backbone(如ShuffleNet、GhostNet)、Neck和Head结构。 --- ### **2. 技术亮点** #### **(1) 轻量化设计** - **Backbone优化**:默认使用轻量级网络(如ShuffleNetV2),减少计算量。 - **动态标签分配**:采用 **GFL(Generalized Focal Loss)**,减少复杂后处理,提升训练稳定性。 - **无锚框(Anchor-Free)**:省去传统Faster R-CNN等模型中的锚框设计,降低内存占用。 #### **(2) 高效训练** - **分布式训练支持**:支持多GPU并行训练,加速收敛。 - **数据增强灵活**:集成Mosaic、MixUp、CutOut等策略,提升小样本泛化能力。 #### **(3) 部署友好** - 支持导出为 **ONNX、TensorRT、MNN、NCNN** 等格式,适配移动端和嵌入式设备。 - 提供C++和Python推理示例,开箱即用。 --- ### **3. 是否支持自定义训练?** **完全支持**!NanoDet 提供完整的训练工具链,用户可通过以下步骤训练自己的数据集: 1. **数据集准备** - 格式:支持 **VOC(XML)** 或 **COCO(JSON)** 标注格式。 - 修改类别文件:在配置文件中定义 `class_names`(如 `["cat", "dog"]`)。 2. **配置文件调整** 修改 `config/nanodet_custom.yml`,指定数据路径、类别数、输入分辨率等: ```yaml dataset: name: "CustomDataset" img_path: "data/train/images" ann_path: "data/train/annotations.json" # COCO格式 input_size: 320 # 可调整为416或自定义尺寸 class_names: ["class1", "class2"] ``` 3. **启动训练** ```bash python tools/train.py config/nanodet_custom.yml ``` - **关键参数**: - `--batch_size`:根据显存调整(GPU推荐32~64)。 - `--resume`:从检查点恢复训练。 --- ### **4. 与 FastestDet 的对比** | 特性 | NanoDet | FastestDet | |---------------------|----------------------------------|---------------------------------| | **模型体积** | <1MB(量化后) | ~2MB | | **检测头设计** | 动态标签分配(GFL) | 传统锚框优化 | | **部署灵活性** | 支持更多推理引擎(NCNN、MNN等) | 侧重ONNX和TensorRT | | **适用场景** | 超低资源设备(如手机、树莓派) | 中低端GPU或CPU环境 | --- ### **5. 实际应用示例** #### **口罩检测训练命令** ```bash # 使用COCO预训练权重,输入尺寸320x320,训练50个epoch python tools/train.py \ config/nanodet_mask.yml \ --batch_size 32 \ --device 0 # 使用GPU 0 ``` #### **导出为ONNX格式** ```bash python tools/export.py \ --cfg config/nanodet_custom.yml \ --model_path weights/nanodet_custom.pth \ --output_name nanodet_custom.onnx ``` --- ### **6. 常见问题** #### **(1) 训练显存不足** - 降低 `batch_size` 或输入分辨率(如从416改为320)。 - 关闭数据增强(如Mosaic)。 #### **(2) 小目标检测效果差** - 增大输入分辨率(如640x640)。 - 增加特征金字塔(FPN)的层数。 #### **(3) 部署到安卓设备** - 使用NCNN推理库,结合OpenMP多线程加速: ```cpp ncnn::Net nanodet; nanodet.load_param("nanodet.param"); nanodet.load_model("nanodet.bin"); ``` --- ### **7. 总结** - **优势**:NanoDet 是资源受限场景下的理想选择,尤其适合需要 **低功耗、实时检测** 的应用(如无人机、IoT设备)。 - **局限性**:对密集小目标或复杂场景的检测精度可能弱于YOLO系列。 - **开源地址**:[GitHub - RangiLyu/nanodet](https://github.com/RangiLyu/nanodet) 如果需要具体场景的调优建议,可以进一步说明需求! 🚀
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值