mmdetection
----mmdet
----tools
----configs
----data
--------VOCdevkit
------------VOC2007
--------------- Annotations
---------------- JPEGImages
---------------- ImageSets
------------------------ Main
---------------------------- test.txt
---------------------------- trainval.txt
---------------------------- val.txt
---------------------------- test.txt
先在mmdetection目录下依次创建data、VOCdevkit、VOC2007文件夹,嵌套关系如上,再在VOC2007文件夹下按VOC格式存放自己的数据集(Annotation存放检测框信息、JPEGImages存放要检测的图片,这两个文件夹的名字一定不能修改),ImageSets是放txt文件,可以修改名字,但是初次使用建议规范格式
如果图片是jpg则改成jpg,是png格式就改成png
(这一步并非必要,可以先跳过,完成所有步骤训练若报错:AttributeError: ‘NoneType‘ object has no attribute ‘text‘,再回来加上这一步)
报错原因:标注文件 .xml的
2种解决方法:
1、可以查找.xml标注文件,把没有difficlut标签的补上。
2、由于我的标签数据非常多,所有都添加上difficult的话非常耗时。如果数据没有特别难分的类别,可以忽略这个标签,在代码里把difficlut置为1,具体操作如下:打开mmdet/datasets/xml_style.py,将difficult=int(obj.find(‘difficult’).text)改为如下代码:
if obj.find('difficult'):
difficult = int(obj.find('difficult').text)
else:
difficult = 0
参考链接:https://blog.csdn.net/u014479551/article/details/107377992/
这里以faster_rcnn 网络为例介绍如何使用mmdetection训练自己的VOC数据集
faster_rcnn 基本配置文件位置:mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py ,打开如下图所示:
会发现这里只是引入了_base_文件夹中的几个文件,这里简单介绍下:
其实我们在mmdetection的configs文件夹中会看到许多类似的模型配置文件。之所以这样写,是为了简化代码的耦合性,简单来说就是,很多相同的配置我直接写入一个py文件每次import就可以了呀。初次学习不需要去完全弄懂,先跑通一个代码。等你多跑了几个模型,大概就明白为什么这样写了。
1、首先,修改模型配置文件,根据上图中fast_rcnn_r50_fpn_1x.py中的路径(如下图)找到该文件位置,将所有的 num_classes 变量改为自己分类的类别数(有的博客用的mmdetection由于版本问题是类别数+1(表示背景),这里用的版本是2.x,num_classes就是类别数,比如我是四分类,那么这里就将所有的num_classes变量改为4)
…/base/models/faster_rcnn_r50_fpn.py
2、修改数据集配置文件,主要是填入你的数据集的路径,该文件在
可以关注一下这句代码,不用修改,可以理解步骤一中为什么数据要放在 data/VOCdevkit/下,之所以命名为VOC2007也是为了后续修改方便
修改data下的train、val、test中的ann_file的路径(txt文件的路径)和img_prefix的路径(图片的路径)
如图可见,路径中并未提及Annotations和JPEGImages这两个文件夹,img_prefix只指明了数据集的根目录’VOC2007’,说明在其他代码中会自动在img_prefix提供的路径后面自动添加Annotations和JPEGImages来搜索相应的检测框信息和图片,这也就是为什么步骤一中不能修改Annotations、JPEGImages名字的原因。ImageSets无所谓,这只是存放txt文件的文件夹,如果改成别的名字或路径,只要修改上面两图中的橙色框内的ann_file所指路径即可。
这里因为我是train和test数据集分开存放,所以路径和标准路径稍微有点不同,但是无论是train还是test都有各自的Annotations和JPEGImages这两个文件夹,这一点一定不能变。
这个类名的修改是用于模型测试的时候,如果不加修改,相当于训练的时候用的是正确的类,但是测试的时候显示的还是默认的类名。
重要:修改完 class_names.py 和 voc.py 之后一定要重新编译代码(运行python setup.py install),再进行之后的训练,否则验证输出仍然为VOC的类别,且训练过程中指标异常。建议以后修改完mmdetec这个文件夹中的任何文件,都运行一下上面这个命令,养成习惯。
参考链接:https://www.it610.com/article/1294190526756626432.htm
python tools/train.py ${CONFIG_FILE}
{CONFIG_FILE}就是你要跑的网络的配置文件,下面举两个例子
python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py
python tools/train.py configs/pascal_voc/ssd512_voc.py
mmdetection会将训练过程中生成的log文件和模型文件默认放在mmdetection/work-dir目录下,若要指定目录,可以使用work-dir参数,只需在训练命令后面加入 --work-dir ${YOUR_WORK_DIR}
例如:
python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py --work-dir my_workspace/
其他的参数、指令可以多看看github上面mmdetection的官方文档。
本文为原创文章,如需转载,请注明出处
如果有帮助到你的话,点个赞再走呀~