- 1. 自定义数据集
- 2. 设置模型参数与配置
- 2. 1. 以Faster R-CNN为例,首先先打开Faster R-CNN配置文件索引文件。
- 2. 2. 修改Faster R-CNN模型配置文件
- 2. 3. 修改Faster R-CNN数据集加载路径配置文件
- 2. 4. 修改Faster R-CNN数据集参数配置文件
- 2. 5. 修改Faster R-CNN训练周期配置文件
- 2. 1. 以Faster R-CNN为例,首先先打开Faster R-CNN配置文件索引文件。
- 3. 模型训练
- 4. 日志可视化
我这里推荐使用VOC数据集格式。
如下:
步骤:
- mmdetection项目文件下,新建“data”文件夹,并在data路径下新建“VOC2012”文件夹,用于存放图片、标签、训练集与测试集的文件名索引文件。
(!如果不想修改过多没必要的代码,“VOC2012”的名字最好不要修改,因为项目中识别数据集的功能代码会根据“VOC”和“2012”关键词进行匹配训练及测试细节,下面的“Annotations”和“JPEGImages”同理) - 新建“PEGImages”文件夹,将所有图片(.jpg文件)放入到“PEGImages”文件夹中。
- 新建“Annotations”文件夹,将所有图片的标签(.xml文件)放入到“Annotations”文件夹中。
- 新建“Main”文件夹,将所有训练集与测试集的文件名索引(.txt文件)放入到“Main”文件夹中。
这里只介绍最基础的训练配置修改,即关于数据集和训练周期的配置的修改。
有关微调的其他配置修改后续文章介绍。
- 文件路径:
mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py
可以看到需要4个配置文件。
第1-5行注释掉的是原代码,我按需修改后变成第7-11行部分。
接下来分别修改4个配置文件的内容。
- 文件路径:
mmdetection/configs/_base_/models/faster_rcnn_r50_fpn.py
- “
init_cfg
”参数:设置预训练权重
使用预训练模型:
# model settings
model = dict(
type='FasterRCNN',
backbone=dict( # backbone: RES-NET
... ...
# torchvision默认预训练模型,这里默认下载放到mmdetection/checkpoints
# init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'),
# 预训练模型也可以用官方应用coco训练好的
# https://github.com/open-mmlab/mmclassification/blob/dev/docs/en/model_zoo.md 可下载checkpoint和查看更多,这里下载对应的预训练设置
init_cfg=dict(
type='Pretrained',
checkpoint='mmdetection/checkpoints/'xxxxx.pth',
prefix='backbone',
),
neck=dict(
... ...
或者(不使用预训练模型时,注释掉load_from=xxx。
)
model = dict(
type='FasterRCNN',
# 设置为 None,表示不加载预训练权重,
# 可选:后续可以设置 `load_from` 参数用来加载 COCO 预训练权重
backbone=dict(init_cfg=None),
pretrained=None,
neck=dict(
... ...
# 可选:采用 COCO 预训练过的 Cascade Mask R-CNN R50 模型权重作为初始化权重,可以得到更加稳定的性能
load_from = 'http://download.openmmlab.com/mmdetection/v2.0/cascade_rcnn/cascade_mask_rcnn_r50_fpn_1x_coco/cascade_mask_rcnn_r50_fpn_1x_coco_20200203-9d4dcb24.pth'
- “
num_class
”参数:设置类别数量
文件中所有“num_class
”参数都要进行对应修改。默认为80,修改成我的数据集中类别数量,即9。
- 文件路径:
mmdetection/configs/_base_/datasets/voc0712.py
- “
data_root
”参数、“img_scale
”参数
“img_scale
”参数决定了你的模型输入图片的大小范围,默认最小600x600,最大1000x1000。 - batch-size、train、test以及val的路径
samples_per_gpu
:每个GPU的batch-size,这里我只用了1个GPU,所以这里的4就等同于训练中的每个batch为4张图。
- 将“
CLASSES
”替换成自己数据集的类别名称,并且最好标注色板“PALETTE
”的颜色数量与类别数量一致。文件路径:
mmdetection/mmdet/datasets/voc.py
- 将“
return
”返回的内容改成自己数据集的类别名称。文件路径:
mmdetection/mmdet/core/evaluation/class_names.py
这个时候按道理来说,对于类别的相关修改就可以了。但是我在用mmdetection的时候,碰到一个bug。
修改完类别相关的信息以后,模型并不能顺利的更新这部分参数配置。
所以如果你也遇到关于CLASSES不匹配的情况,直接去环境里修改源文件。
在conda环境里把下面两个文件里的类别修改了,就可以了。
修改逻辑同上, *** 作如下。
- 假设我的conda环境名为open-mmlab,因此去下面的目录下,分别修改两个文件:
- 文件①路径:
anaconda3\envs\open-mmlab\lib\python3.7\site-packages\mmdet\datasets\voc.py
- 文件②路径:
anaconda3\envs\open-mmlab\lib\python3.7\site-packages\mmdet\core\evaluation\class_names.py
- “
interval
”参数:等同于batch。文件路径:
mmdetection/configs/_base_/configs/_base_/default_runtime.py
checkpoint_config中“interval
”指的是断点检测的间隔,即间隔多少次epoch保存一次权重。log_config中“
interval
”指的是终端日志更新的间隔,即间隔多少次batch显示一次日志记录。 - “
max_epochs
”参数:训练周期设置。
文件路径:mmdetection/configs/_base_/configs/_base_/schedules/schedule_1x.py
以上就是所有要修改的关于数据集和训练周期的配置。
- 在“mmdetection”项目终端输入执行命令
python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py
出现以上日志,就证明训练在进行中了。
不做修改的话,日志会自动保存到“mmdetection/work_dirs
”。
- 在“mmdetection”项目终端输入执行命令
python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_coco/20220403_140438.log.json --keys mAP --out work_dirs/faster_rcnn_r50_fpn_1x_coco/metric_map.pdf
plot_curve
:键入日志路径
--keys
:键入需要可视化的指标,如果想显示多个在同一张图中,关键词间用空格间隔开,如:–keys mAP acc
--out
:键入可视化文件保存路径
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)