NanoDet目标检测之"微调训练"

《NanoDet目标检测之"搭建预测篇"》 中,我们搭建了NanoDet的环境,并用默认权重做了简单的预测,本节我们继续用自己的数据做微调。

1 准备数据

NanoDet支持yolo或者coco格式的标注,自行准备即可,我这里以yolo为例,目录结构如下:

TODO

xxx

2 配置

我们需要融合下两个配置文件,复制:

cp nanodet-plus-m_320.yml nanodet-plus-m_320_face.yml

修改1,保存位置:

save_dir: workspace/nanodet-plus-m_320_face

修改12,你的标注类别数:

head:
  name: NanoDetPlusHead
  num_classes: 1
aux_head:
  name: SimpleConvHead
  num_classes: 1

修改3,类别标签:

class_names: ['face']

修改4,数据,注意这里是从xxx_yolo.yml节选拷贝的:

data:
  train:
    name: YoloDataset
    img_path: yolo_data/train
    ann_path: yolo_data/train
    class_names: *class_names
    input_size: [320,320] #[w,h]
    keep_ratio: False
    pipeline: 
      perspective: 0.0
      scale: [0.6, 1.4] 
      stretch: [[0.8, 1.2], [0.8, 1.2]]
      rotation: 0
      shear: 0
      translate: 0.2
      flip: 0.5
      brightness: 0.2                                                                                
      contrast: [0.6, 1.4]                                                                           
      saturation: [0.5, 1.2]                                                                         
      normalize: [[103.53, 116.28, 123.675], [57.375, 57.12, 58.395]]                                
  val:
    name: YoloDataset
    img_path: yolo_data/val
    ann_path: yolo_data/val
    class_names: *class_names                                                                        
    input_size: [320,320] #[w,h]                                                                     
    keep_ratio: False
    pipeline:
      normalize: [[103.53, 116.28, 123.675], [57.375, 57.12, 58.395]]

修改batch、总迭代、效果检查点(按需修改):

device:
  gpu_ids: [0] # Set like [0, 1, 2, 3] if you have multi-GPUs
  workers_per_gpu: 8
  batchsize_per_gpu: 96
  precision: 32 # set to 16 to use AMP training
...
  total_epochs: 100
...
  val_intervals: 10

修改,强制使用CPU(可选)

device:
  gpu_ids: -1 # Set like [0, 1, 2, 3] if you have multi-GPUs
  workers_per_gpu: 4
  batchsize_per_gpu: 16
  precision: 32 # set to 16 to use AMP training

3 训练

python tools/train.py ./config/nanodet-plus-m_320_face.yml

最终模型会保存在“workspace/nanodet-plus-m_320_face”中的model_best下

4 模型转化为onnx

python ./tools/export_onnx.py --cfg_path ./config/nanodet-plus-m_320_face.yml --model_path ./nanodet-plus-m_320_face/nanodet_model_best.pth

会生成一个nanodet.onnx

5 模型转化为ncnn

在线工具转化(貌似挂了)

或者用官方编译好的onnx2ncnn工具(下载Ubuntu的)

./onnx2ncnn nanodet.onnx nanodet.param nanodet.bin

6 验证ncnn

进入nanodet/demo/ncnn,修改以下点:

主要是形状、类别

编译demo

export ncnn_DIR=/path/ncnn-20240820-ubuntu-2404/lib/cmake/ncnn
cmake .
make

运行

./nanodet_demo 2 ~/code/server/face-still/1.mp4

benchmark

./nanodet_demo 3 0

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *