• 基于MMDetection训练VOC格式数据集


    一 环境说明

           基于前述安装MMDetection,数据集为VOC格式,主要版本如下:

    1. Python:3.7.8
    2. CUDA:11.3
    3. cuDNN:8.4.0
    4. torch:1.12.0
    5. torchvision:0.13.0
    6. mmcv-full:1.6.0
    7. MMDetection:2.25.3

    二 数据集准备

         使用VOC格式进行模型训练,利用labelimg对图像进行标注,生成xml文件,准备好图片和标注文件,并对数据集进行划分,文件目录如下图所示。

    1. mmdetection
    2. ├── mmdet
    3. ├── tools
    4. ├── configs
    5. ├── dataset
    6. │ ├── ACID # 自己给数据集取名字
    7. │ │ ├── VOC2007
    8. │ │ │ ├── Annotations # xml文件
    9. │ │ │ ├── JPEGImages # 图片文件
    10. │ │ │ ├── ImageSets
    11. │ │ │ │ ├── Main
    12. │ │ │ │ │ ├── test.txt
    13. │ │ │ │ │ ├── trainval.txt

    三 修改默认labels

            1、在 .\mmdetection-v2.25.3\mmdet\core\evaluation\class_names.py中,修改函数

    voc_classes下面的默认类别,修改为自己标注的类别。
    1. def voc_classes():
    2. # return [
    3. # 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat',
    4. # 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person',
    5. # 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'
    6. # ]
    7. # SODA的数据标签,一共 15 个
    8. # 把配电箱 ebox,写成了 electric box,一直报错,所以要先检查labels
    9. # return [
    10. # 'person', 'vest', 'helmet', 'board', 'wood',
    11. # 'rebar', 'brick', 'scaffold', 'handcart', 'cutter',
    12. # 'ebox', 'hopper', 'hook', 'fence', 'slogan'
    13. # ]
    14. # ACID数据集标签,一共3个
    15. return [
    16. 'excavator', 'dump_truck', 'concrete_mixer_truck'
    17. ]

        2、在  .\mmdetection-v2.25.3\mmdet\datasets\voc.py中,修改默认的VOC CLASSES为自己标注的类别,如下图所示。

    1. class VOCDataset(XMLDataset):
    2. # CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car',
    3. # 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
    4. # 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train',
    5. # 'tvmonitor')
    6. # 修改为 SODA的类别
    7. # CLASSES = ('person', 'vest', 'helmet', 'board', 'wood',
    8. # 'rebar', 'brick', 'scaffold', 'handcart', 'cutter',
    9. # 'ebox', 'hopper', 'hook', 'fence', 'slogan')
    10. # ACID的类别,3个 'excavator', 'dump_truck', 'concrete_mixer_truck'
    11. CLASSES = ('excavator', 'dump_truck', 'concrete_mixer_truck')

    四 选择模型

          在 .\mmdetection-v2.25.3\configs文件夹下,有很多模型,到底选择哪一个,到底那个支持VOC格式进行直接训练呢?

          目前,支持VOC直接训练的模型在 .\mmdetection-v2.25.3\configs\pascal_voc文件夹下,模型的数量不多,主要模型如下图所示。

          默认都是COCO格式的,COCO格式的模型也是可以手动改为VOC格式的,那个后面再说。

          【 刚开始以为随便一个模型都可以用来训练数据,结果报莫名其妙的错误 】

     五 生成模型全部配置文件

            当选择好模型后,需要对进行模型的参数进行配置,一种比较好的方法是生成单独的全部的配置文件,具体操作方法如下:

    python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py --work-dir VOC_SSD300

            生成的配置文件在定义的工作目录下,下一步对配置文件进行配置即可。

     六 配置文件修改

          重点修改标注的类别数,数据的路径,结果保存路径,大部分都不需要修改了。

    1. num_classes=3 # 类别数
    2. dataset_type = 'VOCDataset'
    3. data_root = 'dataset/A/'
    4. ann_file='dataset/A/VOC2007/ImageSets/Main/test.txt'
    5. img_prefix='dataset/A/VOC2007/',
    6. work_dir = 'VOC_SSD300' # 工作目录
    7. load_from = None # 预训练模型

     七 预训练模型下载

           训练时通常加载预训练模型,一种方法是直接取model zoo下载,另一种是使用命令直接下载,指定配置文件名称和下载路径即可。

    mim download mmdet --config yolov3_mobilenetv2_mstrain-416_300e_coco --dest checkpoints

    八 训练模型

         模型训练的脚本就比较简单了,指定你配置文件的路径和结果保存路径即可,如下:

    python tools/train.py my_config\ssd300_voc0712.py --work-dir VOC_SSD300

    LAST 可能会遇到的问题

            1、class_names.py和voc.py中的类别都改了,但训练的时候还是报错:

    AssertionError: The `num_classes` (15) in SSDHead of MMDataParallel does not matches the length of `CLASSES` 20) in RepeatDatasetn

    你定义的类别数和默认的VOC的20个类别不一致,但是你已经改了文件,就是不起作业,解决方法见下图,将修改好的2个文件替换到安装包里的。

            2、待补充

  • 相关阅读:
    HTML静态网页成品作业(HTML+CSS)——非遗昆曲介绍设计制作(1个页面)
    软件为什么单独标注支持IPV6?IPV6和IPV4有什么区别?
    Java网络编程
    虎符限币种提现 用户曲线出金即亏损
    linux安全加固
    了解3dmax坐标系
    odoo javascript参考(八)
    IBM:《2024年消费者调研:无处不在的人工智能彻底变革零售业》
    13_C++_面向对象_1
    结构型模式-享元模式
  • 原文地址:https://blog.csdn.net/weixin_41713230/article/details/127893608