(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好像有編碼問題,換行符不對,重建一個就好。