使用mmdetection训练模型--记faster-rcnn不同backbone性能比较

使用mmdetection训练模型--记faster-rcnn不同backbone性能比较,第1张

使用mmdetection训练模型--记faster-rcnn不同backbone性能比较

使用mmdetection训练模型
一、 安装
采用的是直接安装,并未使用在conda中建虚拟环境。主要安装的有mmcv和mmdet,其中mmcv的安装与下载的mmdetction版本有关,参考https://mmdetection.readthedocs.io/zh_CN/v2.18.1/get_started.html#id官网安装依赖教程中的mmdetection版本和mmcv版本的对应关系安装。
例如下载的mmdetection的版本是2.18.1,安装mmcv指定版本(pip install mmcv-full ==1.3.17),注意一定要指定版本,自动安装的容易容易版本不符合。具体的相对应版本要求如下:

MMDetection 版本MMCV 版本mastermmcv-full>=1.3.17, <1.4.02.18.1mmcv-full>=1.3.17, <1.4.02.18.0mmcv-full>=1.3.14, <1.4.02.17.0mmcv-full>=1.3.14, <1.4.02.16.0mmcv-full>=1.3.8, <1.4.02.15.1mmcv-full>=1.3.8, <1.4.02.15.0mmcv-full>=1.3.8, <1.4.02.14.0mmcv-full>=1.3.8, <1.4.02.13.0mmcv-full>=1.3.3, <1.4.02.12.0mmcv-full>=1.3.3, <1.4.02.11.0mmcv-full>=1.2.4, <1.4.02.10.0mmcv-full>=1.2.4, <1.4.02.9.0mmcv-full>=1.2.4, <1.4.02.8.0mmcv-full>=1.2.4, <1.4.02.7.0mmcv-full>=1.1.5, <1.4.02.6.0mmcv-full>=1.1.5, <1.4.02.5.0mmcv-full>=1.1.5, <1.4.02.4.0mmcv-full>=1.1.1, <1.4.02.3.0mmcv-full==1.0.52.3.0rc0mmcv-full>=1.0.22.2.1mmcv==0.6.22.2.0mmcv==0.6.22.1.0mmcv>=0.5.9, <=0.6.12.0.0mmcv>=0.5.1, <=0.5.8

对mmdet的安装:
cd mmdetection
pip install -r requirements/build.txt
pip install -v -e . # or “python setup.py develop”
安装完运行python tool/train.py –h 出现help界面,则说明配置成功,若出现mmcv._ext找不到该模块,则是mmcv版本不匹配导致,一定要卸载旧的mmcv,重新指定新的版本。
二、 训练
1. 数据集的制作
Mmdetection支持的数据集格式有coco数据集,VOC数据集等常见的数据集格式,以VOC2007数据集格式为例,说明数据集的制作过程。
VOC2007数据集存放在如下机构中:
所有的数据标签存放在:./voc_data/VOCdevkit/VOC2007/Annotations
所有的图片数据存放在:./voc_data/VOCdevkit/VOC2007/JPEGImage
./voc_data
└── VOCdevkit
└── VOC2007
├── Annotations # 标注的VOC格式的xml标签文件
├── JPEGImages # 数据集图片
├── ImageSet
│ └── Main
│ ├── test.txt # 划分的测试集
│ ├── train.txt # 划分的训练集
│ ├── trainval.txt
│ └── val.txt # 划分的验证集
├── cal_txt_data_num.py # 用于统计text.txt、train.txt等数据集的个数
└── make_txt.py # 数据集划分脚本

  1. 数据集的划分,使用:make_txt.py脚本
    脚本内容:

执行完该脚本后,会在./voc_data/VOCdevkit/VOC2007/ImageSets/Main目录下,生成四个txt文件:train.txt,trainval.txt,test.txt,val.txt
每个txt文件中存储的都是图片的名字(不含图片名字的后缀.jpg),例如:trian.txt中的内容如下:

当然你也可以把数据放到其他目录,然后使用软连接的形式连接到./mmdetection/data目录下():
ln -s /HDD/VOCdevkit ./data # 就是把实体目录VOCdevkit做一个链接放到 ./data目录下

2、统计划分数据集数据的个数,使用:cal_txt_data_num.py脚本

计算txt中有多少个数据,即有多上行
至此,数据集的准备工作已经全部完成。
在configs/base/datasets/voc0712.py中设置自己定义的数据集所在的目录信息及根据实际使用的GPU数量设置合理的samples_per_gpu和workers_per_gpu数量。

修改mmdetection/mmdet/core/evaluation/class_names.py下的class_names.py中的voc_classes,将 其改为要训练的数据集的类别名称。

修改mmdetection/mmdet/datasets/voc.py下的voc.py中的CLASSES,将 其改为要训练的数据集的类别名称。

2. 训练模型的配置
以configsregnetfaster_rcnn_regnetx-3.2GF_fpn_mstrain_3x_coco.py为例,说明训练的过程。训练所需的配置有

  1. 对模型部分的配置:backbone,neck,head,optimizer,loss等;
  2. 对数据集pipline的预处理配置;
  3. 对数据集所在路径配置;
  4. 对训练策略信息的配置;
    faster_rcnn_regnetx-3.2GF_fpn_mstrain_3x_coco.py中原始设置的backbone为regnet,neck为fpn,继承了_base_中…/common/mstrain_3x_coco.py的数据集配置和…/base/models/faster_rcnn_r50_fpn.py中算法的head和loss配置(mmdetection的继承机制是对模型配置中缺少的组件在_base_所设置的路径中继承)。

而我们训练所准备的数据集是voc数据集,因此重写继承组件,继承voc数据集所在目录’…/base/datasets/voc0712.py’,继承’…/base/models/faster_rcnn_r50_fpn.py’中关于head和loss的设置,在faster_rcnn_r50_fpn.py根据实际的数据集class个数修改num_classes同时继承’…/base/schedules/schedule_1x.py’用于配置训练策略信息,在’…/base/schedules/schedule_1x.py’中根据需求和所设置的batchsize设置max_epochs和lr。继承’…/base/default_runtime.py’用于生成log设置。

模型训练发起脚本
python tools/train.py ./configs/regnet/faster_rcnn_regnetx-3.2GF_fpn_mstrain_3x_coco.py
可添加的参数:
–work-dir:指定训练保存模型和日志的路径
–resume-from:从预训练模型chenkpoint中恢复训练
–no-validate:训练期间不评估checkpoint
–gpus:指定训练使用GPU的数量(仅适用非分布式训练)
–gpu-ids: 指定使用哪一块GPU(仅适用非分布式训练)
–seed:随机种子
–deterministic:是否为CUDNN后端设置确定性选项
–options: arguments in dict
–launcher: {none,pytorch,slurm,mpi} job launcher
–local_rank: LOCAL_RANK
–autoscale-lr: automatically scale lr with the number of gpus
如果不加,会在当前目录下生成workdir,在workdir中存放模型训练过程生成的日志和生成的权重。

3. 模型检测
可添加的参数

Python tools/test.py ./configs/regnet/faster_rcnn_regnetx-3.2GF_fpn_mstrain_3x_coco.py ./work_dirs/faster_rcnn_regnetx-3.2GF_fpn_mstrain_3x_coco/latest.pth --out ./test_regnet/result.pkl --show-dir ./test_regnet
会在test_regnet目录下生成检测结果result.pkl 和检测后生成bbox的图像。

三、 相同配置参数,不同backbone的模型检测效果对比
对faster_rcnn,使用相同的训练环境和训练参数,不同backbone的模型检测效果对比,其中regnetx3.2gf和regnetx_1.6gf的区别是:
regnet_1600M_config = {‘WA’: 34.01, ‘W0’: 80, ‘WM’: 2.25, ‘DEPTH’: 18, ‘GROUP_W’: 24, ‘BOT_MUL’: 1}
regnet_3200M_config = {‘WA’: 26.31, ‘W0’: 88, ‘WM’: 2.25, ‘DEPTH’: 25, ‘GROUP_W’: 48, ‘BOT_MUL’: 1}
图3.1 resnet50

图3.2 regnetx_3.2gf

图3.3 regnet_1.6gf

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5670784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存