• Swin-Transformer代码工程进行物体检测


    (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好像有编码问题,换行符不对,重建一个就好。

      



  • 相关阅读:
    数组过滤
    数组过滤
    以文件流的形式下载文件
    antD 时间年的写法
    如何判断一个js对象是否是Array,
    webSocket 使用
    react map循环的dom,点击让当前数组里的isShow显示false
    react react-draft-wysiwyg使用
    jQuery placeholder插件 让IE也能够支持placeholder属性
    JavaScript 逼真图片倒计时实现代码 js时间图片倒计时
  • 原文地址:https://www.cnblogs.com/huadongw/p/15129588.html
Copyright © 2020-2023  润新知