在ubuntu下安装mmdetection只要按照官方教程就好了,基本没有问题。
训练自己的数据集的时候需要注意以下几点:
不同于1.x版本,2.x版本所给出的模型大多为嵌套调用的方式,而1.x多为给定好模型。故选取好模型之后,只要按照其py文件里说明,按照步骤不一级一级的往下找就好了,而且由于这种嵌套方式,voc格式的完全只需要修改其中代表dataset部分的路劲即可,可移植性更强了,当你确定好某个模型只有,依旧可以模范1.x的方式,将需要的几个部分写在一个文件里面,更加便于自己的使用。
进入正题:
当确定好模型后,比如此时用faster_rcnn_x101_64x4d_fpn_1x_coco.py
该文件在 mmdetection/configs/faster_rcnn/ 下,打开会看到:
所以可以看到,其模型还是套娃的方式,其主体部分来源于 faster_rcnn_r50_fpn_1x_coco.py ,这样逐步往下:
其实大部分模型运行相关,也都是在__base__下这三部分,模型、数据集、调度器
这里datasets我改成了voc0712,本来应该是coco_detection的。相比于1.x版本需要在一个py文件下修改,2.x版本的直接替换调用就自由很多。此时对应你的数据集格式进行类似于下图的修改(只是修改文件路径就好了,上面的预处理增强等先不需要管)
修改为datasets就要看下model了,这里面也就是对头部的分类器数目修改,为你的分类数目,不需要像1.x版本一样引入+1的背景数,比如我这里是个27分类问题,改为27就好。标题提到的训练时,验证集报错的原因就是因为这个,因为求mAP的时候,你填写的28,但是实际类别列表里面并不存在28的类别,故一旦有被误检测为第28类时,求取mAp时就会报 list index out of range
的错误。(苦恼我三天的问题。。。。。)
需要根据自己的gpu情况进行调整训练的batch大小,主要就是修改上述samples_per_gpu。
修改好model之后就轮到schedule了,这个里面你需要修改下学习率就好,关于学习率官方文档有很好的说明,也就是训练的batch量与学习率成正比,按照这个比例 lr=0.01 for 4 GPUs * 2 img/gpu 修改。total_epochs为训练的轮数。
default_runtime无需修改。
上述是和模型相关的,还有些准备工作需要修改:
此处需要修改你的CLASSES,例如你用的voc格式,如下,你需要修改将此处修改为你的分类名称
还有这里的class_name.py里面的你对应的数据格式的分类名,会在验证的时候被查询:
至此基本修改结束了,
然后就可以愉悦的进行训练了,训练过程按照官方说明就好。注意args的格式要求,多GPU时,args关于GPU_nums直接填写数字就好。
这是在 验证阶段出现的 list index out of range的情况,解决方案见上面。