[关闭]
@wanghuijiao 2021-07-13T18:53:43.000000Z 字数 15880 阅读 918

球形机器人-数据采集、标注与模型训练

技术文档


1. 数据采集、标注与注意事项

1.0 代码包结构

  1. object_detection ------
  2. |-- Yolov4
  3. |-- Yolov5
  4. |-- NHY_Yolo_dataset
  5. insightface ------

1.1 数据采集、数据筛选、注意事项(by 袁祖瑞)

1.1.1 数据采集

摄像头调试

基于笔记本电脑的采集

基于机器人本体的采集

1.1.2 数据筛选

视频抽帧与分工

1.2 数据标注与处理

1.2.1 Labelme安装与使用(by 袁祖瑞)

1.2.2 目标检测标注(by 王慧娇)

标注规范&质检

训练集格式说明

自制数据集格式转换

1.2.3 人脸识别标注(by 王慧娇)

标注规范&质检

训练集格式说明

  1. faces_emore/
  2. train.idx
  3. train.rec
  4. property
  5. lfw.bin
  6. cfp_fp.bin
  7. agedb_30.bin

其中,前三个是训练集,后三个.bin是验证集。因此需要将上节第 2)步标注得到的数据集图片转成训练时需要的格式。

自制数据集格式转换

1.2.4 标注结果汇总(by 王慧娇)

目标检测

人脸识别

1.3 模型训练

1.3.1 目标检测Yolov4(by 王慧娇)

环境配置

  1. git clone https://github.com/AlexeyAB/darknet
  2. cd darknet
  3. mkdir build_release
  4. cd build_release
  5. cmake ..
  6. cmake --build . --target install --parallel 8

配置文件准备

  1. classes = 2
  2. train = data/train.txt
  3. valid = data/test.txt
  4. names = data/obj.names
  5. backup = backup/
  1. face
  2. hostage
  3. terrorist
  4. window

网络结构修改

网络训练命令

1.3.2 目标检测Yolov5(by 袁祖瑞)

环境配置

数据&配置文件准备

  1. train: data/nhydata0624-0625/train.txt # 118287 images
  2. val: data/nhydata0624-0625/test.txt # 5000 images
  3. # number of classes
  4. nc: 5
  5. # class names
  6. names: ['face','hostage','terrorist','window','gun']

网络结构修改

训练命令

  1. python train.py \
  2. --data data/nhydata416.yaml \
  3. --cfg models/nhydata416_yolov5s.yaml \
  4. --img 416 \
  5. --weight yolov5s.pt \
  6. --batch-size 32 \
  7. --epoch 400
  8. # --data数据集.yaml文件的路径;
  9. # --cfg是网络参数设置文件的路径;
  10. # --img输入图像的分辨率;
  11. # --weight是预训练模型所在路径;
  12. # --batch-size是一次训练所用图片数量;
  13. # --epoch是训练轮次。

权重转为wts格式

目前训练均在服务器端进行,得到的权重文件格式为.pt格式,而在球形机器人端部署前需要将.pt格式转为wts格式,方便下一步进行模型部署时使用。模型转换脚本为/object_detection/Yolov5/gen_wts.py

1.3.3 人脸识别Arcface(by 王慧娇)

环境配置

  1. pip install mxnet-cu100 # mxnet-cu102

训练命令&配置文件说明

  1. cd /insightface/recognition/ArcFace
  2. CUDA_VISIBLE_DEVICES='4,5,6,7' python -u train.py \
  3. --dataset selfie \
  4. --network y1 \
  5. --loss arcface \
  6. --ckpt 2 \
  7. --verbose 50 \
  8. --lr 0.001 \
  9. --lr-steps 50,100,200 \
  10. --wd 0.0001 \
  11. --num_epoch 100 \
  12. --models-root ./models/y1_noPre_0629_ex0_noAlign_ex0
  13. # --dataset 对应配置文件内dataset字典所列信息,可选‘emore’、‘retina’、‘selfie’,‘selfie’是自定义数据集
  14. # --network Arcface提供了不同的Backbone结构可供选择,'y1'是mobilefacenet,其他可选:resnet100 -'r100'、'r100fc' 、resnet50-'r50'、 'd169'、 'd201'、 'y2'、 'm1'、 'm05'、 'mnas'、 'mnas05'、 'mnas025'、 'vargfacenet'等
  15. # --loss 损失函数,可选'arcface'、'nsoftmax'、'cosface'、'triplet'、'atriplet'
  16. # --ckpt 权重文件保存,模式'2'表示每次验证后都保存模型,模式'1'只保存验证精度最高的模型,'0'永不保存
  17. # --verbose 每50batch在验证集上验证一次模型性能
  18. # --lr 学习率
  19. # --lr-steps 学习率衰减batch数
  20. # --wd 权重衰减
  21. # --num_epoch 共训练多少epoch停止训练
  22. # --models-root 模型保存路径

权重文件位置

权重转为wts格式

与Yolov5模型转换相似,需要将人脸识别arcface-mobilefacenet模型权重文件从.params格式转为wts格式,方便下一步进行模型部署时使用。模型转换脚本为/insightface/retinaface_arcface/deploy_slim/gen_wts.py

1.4 模型验证

1.4.1 目标检测Yolov4(by 王慧娇)

训练结果

模型测试

  1. python darknet_save_video.py \
  2. --input test1.mp4 \
  3. --out_filename test1.avi \
  4. --weights /object_detection/Yolov4/darknet/backup/yolov4-tiny-nhy-416x416_best.weights \
  5. --ext_output \
  6. --dont_show \
  7. --config_file /object_detection/Yolov4/darknet/cfg/yolov4-tiny-nhy-416x416.cfg \
  8. --data_file /object_detection/Yolov4/darknet/data/nhydata.data`
  9. # --input 表示输入视频或者图片所在路径;
  10. # --out_filename 表示输出文件名;
  11. # --weights表示权重文件;
  12. # --config_file表示模型设置文件;
  13. # --data表示数据文件。

1.4.2 目标检测Yolov5 (by 袁祖瑞)

训练结果

模型测试

  1. python detect.py \
  2. --source /object_detection/Yolov5/darknet/test.mp4 \
  3. --save-txt \
  4. --weights ./runs/train/nhy0624-0625/weights/best.pt \
  5. --name nhy0624-0625 \
  6. --conf 0.25 \
  7. --img-size 416
  8. # --source表示输入视频或者图片所在路径;
  9. # --save-txt 表示保存检测结果到txt文件;
  10. # --weights表示权重文件;
  11. # --name表示测试结果保存路径;
  12. # --conf 0.25表示检测结果阈值;
  13. # --img-size表示输入图片大小。

1.4.3 人脸识别Arcface(by 王慧娇)

训练结果

会在终端输出如图1.35所示的信息提示,Train-acc是指在与训练级同分布的验证集上精度,Train-lossvalue是损失值,随训练的进行,Train-acc会逐步上升,Train-lossvalue会逐步下降,在两者开始变得上下震荡,不再单调下降(或上升)时停止模型训练。目前提供的在南湖院采集的数据上预训练模型在验证集上精度可达99.8%。
在这里插入图片描述
图1.35 人脸识别模型训练输出信息

模型验证

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注