(1)数据转换
由于之前一直用YoloV5做物体检测,为了使用使用yolo格式的数据,首先需要把其转化成需要的格式,这里我们转化成coco格式:
参考:https://github.com/Taeyoung96/Yolo-to-COCO-format-converter
准备需要转的Yolov5数据,如train数据,images是所有图像数据,labels放置的标注文件,txt文件中每行是物体的类别和位置框坐标信息:
train images/1.jpg labels/1.txt
其中标注文本文件1.txt格式
0 0.70947265625 0.44525000000000003 0.2470703125 0.1355 0 0.606689453125 0.406 0.04638671875 0.061 0 0.770751953125 0.44425000000000003 0.09912109375 0.0785 0 0.77783203125 0.45825 0.11328125 0.1065
第一步:生成图像数据路径,如
python path_replacer.py -i train/images -p train.txt
其中train.txt为train中图像的路径文件,即
/home/robot_data/train/images/3_3992_111-1121.jpg /home/robot_data/train/images/17_8486_119-1103.jpg
第二步:根据生成的路径文件生成coco格式的数据,这里需要改一下main的里类别,代码里12-18行。最后运行方式:
python main.py -p train.txt --output train.json
train.json为coco的格式标注文件。
类似的处理val和test数据。生成的coco格式的标注文件和图像数据用于Swin-Transformer工程代码进行训练。
(2)Swin-Transformer工程进行模型训练和测试
Swin-Transformer代码地址:https://github.com/SwinTransformer/Swin-Transformer-Object-Detection,先按照说明安装。下面以Faster-RCNN进行说明,Swin-Transformer方法应该可类似处理。
第一步,准备数据,放置在
data目录下
data coco train2017/1.jpg val2017/2.jpg test2017/3.jpg annotations instances_train2017.json instances_val2017.json instances_test2017.json
以上数据集可以自定义,然后修改数据配置文件即可,这里为了方便直接用coco的文件名
第二步,
修改数据预处理文件里的类别定义,第22行,如定义为CLASSES = ('robot1', 'robot2', 'robot3', 'robot4', 'robot5'):
mmdet/datasets/coco.py
第三步,修改数据配置文件:
configs/_base_/datasets/coco_detection.py
主要是修改数据集路径
第四步,修改模型配置文件,修改类别个数nclasses,与第二步中CLASSES个数相同,第46行:
configs/_base_/models/faster_rcnn_r50_fpn.py
第五步,模型训练,这里采用多GPU训练,这里以2个GPUs为例,可以在 tools/dist_train.sh中进行GPU设置如export CUDA_VISIBLE_DEVICES=5,6,然后执行:
bash tools/dist_train.sh configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py 2
出现下面log文件表示训练成功:
2021-08-11 03:48:24,197 - mmdet - INFO - Epoch [1][2400/2489] lr: 2.000e-02, eta: 5:09:08, time: 0.666, data_time: 0.013, memory: 5166, loss_rpn_cls: 0.0028, loss_rpn_bbox: 0.0038, loss_cls: 0.0230, acc: 99.1230, loss_bbox: 0.0464, loss: 0.0761 2021-08-11 03:48:57,368 - mmdet - INFO - Epoch [1][2450/2489] lr: 2.000e-02, eta: 5:08:28, time: 0.663, data_time: 0.013, memory: 5166, loss_rpn_cls: 0.0011, loss_rpn_bbox: 0.0037, loss_cls: 0.0239, acc: 99.1152, loss_bbox: 0.0490, loss: 0.0776
第六步,模型测试,这里采用多GPU训练,这里以2个GPUs为例,可以在 tools/dist_test.sh中进行GPU设置如export CUDA_VISIBLE_DEVICES=5,6,然后执行:
bash tools/test.sh configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py work_dirs/faster_rcnn_r50_fpn_1x_coco/latest.pth 1 --eval bbox
原代码里dist_test.sh好像有编码问题,换行符不对,重建一个就好。