【MMDetection】——训练个人数据集

本文介绍了使用mmdetection框架训练目标检测模型的过程,包括数据集格式要求、配置文件修改、训练命令、模型评价测试、混淆矩阵计算和PR曲线绘制等关键步骤。重点强调了数据集转换、类别设置、训练参数调整和模型性能评估等方面的内容。

1、数据集格式及存放

mmdet支持COCO格式和VOC格式,能用COCO格式,还是建议COCO的。网上有YOLO转COCO,VOC转COCO,可以自己转换。

在mmdetection代码的根目录下,创建 data/coco 文件夹,按照coco的格式排放好数据集。annotations下面是标签文件,train2017val2017test2017是图片。
在这里插入图片描述
在这里插入图片描述

2、修改两处

第一处: mmdet/core/evalution/class_names.py 代码下的 def coco_classes() 的 return 内容改为自己数据集的类别;

第二处:mmdet/datasets/coco.py 代码下的 class CocoDataset(CustomDataset) 的 CLASSES 改为自己数据集的类别;

注意:修改两处后,一定要在根目录下,输入命令:
python setup.py install build
重新编译代码,要不然类别会没有载入,还是原coco类别,训练异常。

3、用训练命令生成配置文件

python tools/train.py configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py --work-dir work_dirs

其中,work_dirs是自己在根目录新建的工作目录,训练文件存储在这里。

注意,此时运行命令之后,并不是直接训练就可以不管了!我们还有参数设置没改!这里输入训练命令,只是需要它生成一个配置文件,便于我们改参数!在这里插入图片描述

打开配置文件 cascade_rcnn_r50_fpn_1x_coco.py :
(1)修改 num_classes ,将其改为自己数据类别(直接全局搜索,有3处,都要改);

(2)修改 data_root 路径和训练集、验证集、测试集的图片和标签路径,如下图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(3)修改训练图片大小和学习率

修改下处代码,可以更改图片大小

img_scale = (1333, 800), 

batch_size, mmdet默认的方式是由 GPU 数量与 samples_per_gpu 参数决定:
samples_per_gpu: 每个gpu读取的图像数量(意思不就是batch_size=2),该参数和训练时的gpu数量决定了训练时的batch_size。(为什么这么说呢?因为mmdet是8个GPU训练的,那么总的batch就是 8 *samples_per_gpu=16,即训练时是batch_size为16) 。
但我们通常是只有一个gpu, 该参数设置为 2, 意思就是我们训练的 batch_size为2;

workers_per_gpu: 读取数据时每个gpu分配的线程数 ,一般设置为 2即可;(我感觉既然用单个GPU,设置到8也无妨吧?我还没试)

在这里插入图片描述

学习率设置:
mmdet 默认的学习率是基于8个gpu,而且默认是1个GPU处理2个图像(就上面说的samples_per_gpu为2),可以这样理解:
8个GPU,每个GPU处理2张图片,那么真实训练总的一个batch就包括16张图片,学习率为0.02;
4个GPU,每个GPU处理2张图片,那么真实训练总的一个batch就包括8张图片,学习率为0.01;
1个GPU,每个GPU处理2张图片,那么真实训练总的一个batch就包括2张图片,学习率为0.0025;
1个GPU,每个GPU处理1张图片,那么真实训练总的一个batch就包括1张图片,学习率为0.00125;
在这里插入图片描述
(4)使用预训练模型
提前从github上下载预训练模型,新建一个checkpoints文件夹下,放到里面。(模型下载链接:https://github.com/open-mmlab/mmdetection/blob/master/docs/en/model_zoo.md
然后修改以下代码:

# 原本是 load_from = None ,修改为
load_from = 'checkpoints/fcascade_rcnn_r50_fpn_1x_coco_20200316-3dc56deb.pth’

(5)训练轮数,保存模型间隔,日志保存参数
在这里插入图片描述

4、正式训练开始

!!!看清楚路径!使用的是更改过的配置文件训练!!!

python tools/train.py work_dirs/cascade_rcnn_r50_fpn_1x_coco.py

5、报错记录

在第三步生成配置文件时,遇到以下报错:

AssertionError: The num_classes (10) in Shared2FCBBoxHead of
MMDataParallel does not matches the length of CLASSES 80) in
CocoDataset

即使在修改 coco.py 和 class_names.py 后运行 python setup.py install仍然无法解决;

解决方法:
根据报错信息,找到自己虚拟环境的/mmdet/datasets/coco.pymmdet/core/evaluation/class_names.py,再次修改
CocoDataset()coco_classes()l两处(跟第二步一样,其实打开,就能看到虚拟环境下的并没有修改成功)

参考链接:AssertionError: The num_classes (3) in Shared2FCBBoxHead of
MMDataParallel does not
matches

6、模型评价测试(VOC指标mAP、COCO指标AP)

(1)生成中间件

python tools/test.py work_dirs/cascade_rcnn_r50_fpn_1x_coco.py work_dirs/epoch_20.pth  --out results.pkl
  • work_dirs/cascade_rcnn_r50_fpn_1x_coco.py 模型配置文件(跟训练时的一样)
  • work_dirs/epoch_20.pth: 训练好的模型(我是训练了20epoch)
  • --out 指定 results.pkl 输出目录,可以自己指定输出目录

(2)使用COCO标准评估指标

python tools/analysis_tools/eval_metric.py  work_dirs/cascade_rcnn_r50_fpn_1x_coco
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值