mmdetection训练voc格式的自己的数据集

使用mmdetection训练自己的VOC数据集

首先,是按照官方文档组织VOC的数据集结构;

1.目录结构

mmdetection
├── mmdet
├── tools
├── configs
├── data #手动创建data、VOCdevkit、VOC2007、Annotations、JPEGImages、ImageSets、Main这些文件夹
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   │   ├── Annotations #把test.txt、trainval.txt对应的xml文件放在这
│   │   │   ├── JPEGImages #把test.txt、trainval.txt对应的图片放在这
│   │   │   ├── ImageSets
│   │   │   │   ├── Main
│   │   │   │   │   ├── test.txt 
│   │   │   │   │   ├── trainval.txt


2.修改类别

修改mmdetection/mmdet/core/evaluation下的class_names.py中的voc_classes,将 其改为要训练的数据集的类别名称。如果不改的话,最后测试的结果的名称还会是’aeroplane’, ‘bicycle’, ‘bird’, ‘boat’,…这些。修改的位置如图:

3.修改voc.py文件

修改mmdetection/mmdet/datasets/voc.py 下的类别,如果只有一个类,要加上一个逗号,否则将会报错,修改位置如图:

4.修改配置文件

这些类似faster_rcnn_r50_fpn_1x_voc.py的文件,也就是你要训练的网络,不过mmdetecion已经把模型搭好,直接调用就好。默认情况下,这些配置文件的使用的是coco格式,只有mmdetection/pascal_voc文件夹下的模型是使用voc格式,不过数量很少,只有三个。当前最新版本的配置文件在mmdetection/configs的目录如下:

 

 

除了my_configs这个文件是我自己新建的,其他的都是官方给的,打开pascal_voc文件夹,发现voc格式的配置文件仅仅只有几个;

 

 是的,你没看错,官方给的voc格式的配置文件就这么几个,其他文件夹下打开一看,配置文件基本都是基于coco格式的;

 

 

打开faster_rcnn_r50_fpn_1x_voc.py和faster_rcnn_r50_fpn_1x_coco.py文件,做个对比,看看具体有什么不一样的地方,方便后面用模型的coco格式文件改成voc格式的,对比图如下:

 

 

说实话,最开始打开这两个文件的我也是一脸懵的,后来揣测没写的部分,应该是按照默认设置了,这里有个较粗暴的方法,数据可以先不准备,直接将相关环境准备好后,运行训练的命令:python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --work-dir work_dirs  

 

运行完命令后,会生成一个包含所有配置信息的配置文件在mmdetection/work_dirs文件夹下面,名称与你训练的命令指定的配置文件名称一样。

 

这里我生成了两个具有完整配置信息的配置文件,分别是faster_rcnn_r50_fpn_1x_voc.py和faster_rcnn_r50_fpn_1x_coco.py文件(这两个文件我也放到后面,有兴趣的可以自己下载看看),为了方便将coco的配置文件改为用voc格式的数据取训练,我仔细对比了两个文件的不同之处,其实主要是数据那块的配置信息不太一样,主要对比如下:

 

 

 

对了,如果要拿coco的配置文件改成voc格式的配置文件,有一个地方要特别注意一下,在配置文件的最后面有一行coco和voc不一样

evaluation = dict(interval=1, metric='bbox')       //coco格式

evaluation = dict(interval=1, metric='mAP')       //voc格式

 

数据部分的配置信息以及evaluation部分修改完毕,基本就可以用这个文件去加载voc格式的数据了。

 

4.1 修改faster_rcnn_r50_fpn_1x_voc.py里的num_classes变量

首先,全局搜索num_classes,将其值改为: 类别数(注意:这里我搜到的博客都说要改为类别数+1,但是在新版本的mmdetection中,如果这样改的话,会报错的)。把搜索到的num_classes全改掉。如图:

4.2 修改faster_rcnn_r50_fpn_1x_voc.py里的数据加载部分的信息

接着修改faster_rcnn_r50_fpn_1x_voc.py中的数据加载部分的信息,全局搜索dataset_type就能找到在哪,基本就是修改数据的位置之类的信息,注意:我画横线的部分,如果你训练自己的数据,没有列出VOC2012的数据,就把这两部分删除。修改后如图:

 

 

 


 

5.训练

运行命令开始训练:python tools/train.py configs/my_configs/faster_rcnn_r50_fpn_1x_voc.py

ps: 后面参数是你的配置文件的路径

多GPU分布式训练:CUDA_VISIBLE_DEVICES=0,5 ./tools/dist_train.sh configs/my_config/faster_rcnn_r50_fpn_1x_voc.py 2

 

研究了一下,不知道怎么附文件,如果有感兴趣的,可以私聊我~~~~~~


posted @ 2020-09-10 18:36  KaiiLee  阅读(5294)  评论(0编辑  收藏  举报