MMDetection版本 3.0.0
1、上传COCO数据集
数据集放在mmdetection-3.0.0/data/coco下
mmdetection-3.0.0/data/coco下的文件组织如下图,annotations存放json文件,test2017、train2017、train2017下分别存放图片,png或jpg格式都可以
mmdetection-3.0.0/data/coco/annotations下的文件组织如下图
注:以上的文件命名都可以根据自己的喜好重新命名,不过会需要修改配置文件,接下来会详细介绍
2、修改配置文件
(1)打开mmdetection/configs,选择自己想要的模型总配置文件,比如我这里选择的./config/retinanet/retinanet_r50_fpn_1x_coco.py
右上方红框里的四个文件说明了这个模型具体要使用的配置文件在哪里,这四个文件也就是我们需要修改的,一定要根据自己的四个文件来哈
可以看到右边小红框内有一个lr字段,这个我们稍后再说,可能更易于大家理解
(2)修改第一个模型配置文件,例如./configs/models/retinanet_r50_fpn.py
快捷键Ctrl+F搜索num_classes,将num_classes的值改为自己检测的类别数量
(3)修改第二个数据集配置文件,例如./configs/models/retinanet_r50_fpn.py
如果在第一步上传数据集时是按标准命名格式来的,那就可以跳过这一小步,如果按自己的喜好修改了命名,那就需要修改数据集配置文件了,有如下几个地方要修改:
可以看到要修改的地方还是比较杂的,每个人的配置文件也可能因为MMDetection版本不同而不同,不一定和我上面的截图一样。因此如果只要训练一个数据集的话,更推荐直接按官方标准格式来命名。如果要训练多个数据集的话,害怕命名混乱,建议可以只改coco这个目录名称,比如根据数据集名称改为coco_KITTI等,里面annotations、test2017、train2017、val2017的命名还是按官方的来,这样就只需要修改"data_root"。
(4)修改第三个训练计划配置文件,例如./configs/schedules/schedule_1x.py
schedule_1x.py中的1x表示训练12个epoch就停止,同样的,schedule_2x.py表示24个epoch,而schedule_20e.py表示20个epoch
如果对训练的epoch数有自己的需求,可以根据接下来的两小步①②来修改epoch
第三小步③是对batch_size和学习率lr的修改
①修改epoch:将max_epoch和end修改为自己想要的epoch总数,推荐改为原来的epoch数的倍数,比如原来是12个,改成36、48之类的(如果想改成24可以直接用schedule_2x.py)
②修改milestones:milestones是学习率下降的地方,[8,11]表示学习率在第8、11个epoch下降,随着总epoch数的改变,milestone也需要改变。学习了网上一些博主的做法,采用等比改变,也就是如果epoch总数为122=24,那么milestones也乘2,即[16,22],以此类推
③修改batch_size和学习率lr:batch_size即一次训练所抓取的数据样本数量,batch_size越大,训练速度越慢,内存需求大,但模型可能训练得更好。如果出现训练时内存不足,可以降低batch_size,同时lr也要修改,lr和batch_size的关系如下:
·base_batch_size=num_gpussmaples_per_gpu
·lr=0.02(base_batch_size/16)
还记得我们在2.1的模型总配置文件中有个lr字段吗,并不是全部模型总配置文件都有这个字段,但如果有,这个lr也要相应修改。
个人一般batch_size都设置为1,再高经常就会内存不足。
3、训练模型
修改完配置文件后,需要进入mmdetection目录,先更新,命令如下:
cd mmdetection-3.0.0
python setup.pu install
开始训练,根据自己选择的配置模型总文件修改命令:
python ./tools/train.py ./configs/retinanet/retinanet_r50_fpn_1x_coco.py
4、训练结果
(1)屏幕显示
对于每一个epoch,最终都会用val数据集进行验证,输出Average Precision和Average Recall
(2)结果保存
训练结果保存在work_dirs目录下,如下图所示,对每一种模型总配置文件都建了一个文件夹(也只会建一个!因此如果用同一种文件先后训练了不同的数据集,记得先把原来的训练结果打包起来,以免混了)
其中的具体文件如下图所示,
①日志
其中的.log文件具体记录了训练过程,也就是训练时屏幕显示的内容,不过似乎没有完全记录屏幕显示的内容,好像只记录了average precision,没有记录average recall,(也有可能是我没找到,还请了解的朋友指点!)所以如果对于结果要求比较全的,还是自己复制屏幕或者截图。
②训练保存的模型
在训练中断时或者训练完一定数的epoch想在继续训练时,需要使用,具体可详见我的另外两篇博客
http://【mmdetection修改epoch?或者训练完,怎么增加epoch继续训练? - CSDN App】http://t.csdnimg.cn/rFLuy
http://【mmdetection训练中断,怎么接上次训练结果继续训练,或从之前某个epoch的模型直接开始训练? - CSDN App】http://t.csdnimg.cn/L6hJA
③ 最新的模型
④第一次训练后生成的全面的配置文件
我们在2.1中选择的模型总配置文件中,写明了需要用到的四个具体的配置文件,而在初次训练开始后,程序就会将这四个文件整合在一块,形成全面的配置文件,之后训练中断再继续训练或者训练结束增加epoch再训练时就是直接用这个文件
好啦,以上就是mmdetection训练模型的基本操作,如有错误的地方,还劳烦各位朋友包涵指正,期待一起进步!