MM-Detection Logs —— 自定义数据集下的模型训练(Linux)

MM-Detection Logs(2022.04.03)

  • 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训练周期配置文件
  • 3. 模型训练
  • 4. 日志可视化

1. 自定义数据集

我这里推荐使用VOC数据集格式。如下:
MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第1张图片

步骤:

  • mmdetection项目文件下,新建“data”文件夹,并在data路径下新建“VOC2012”文件夹,用于存放图片、标签、训练集与测试集的文件名索引文件。
    (!如果不想修改过多没必要的代码,“VOC2012”的名字最好不要修改,因为项目中识别数据集的功能代码会根据“VOC”和“2012”关键词进行匹配训练及测试细节,下面的“Annotations”和“JPEGImages”同理)
  • 新建“PEGImages”文件夹,将所有图片(.jpg文件)放入到“PEGImages”文件夹中。
  • 新建“Annotations”文件夹,将所有图片的标签(.xml文件)放入到“Annotations”文件夹中。
  • 新建“Main”文件夹,将所有训练集与测试集的文件名索引(.txt文件)放入到“Main”文件夹中。
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第2张图片

2. 设置模型参数与配置

这里只介绍最基础的训练配置修改,即关于数据集和训练周期的配置的修改。有关微调的其他配置修改后续文章介绍。

2. 1. 以Faster R-CNN为例,首先先打开Faster R-CNN配置文件索引文件。

  • 文件路径:mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第3张图片

可以看到需要4个配置文件。第1-5行注释掉的是原代码,我按需修改后变成第7-11行部分。
接下来分别修改4个配置文件的内容。

2. 2. 修改Faster R-CNN模型配置文件

  • 文件路径:mmdetection/configs/_base_/models/faster_rcnn_r50_fpn.py
  • init_cfg”参数:设置预训练权重
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第4张图片
    使用预训练模型:
# 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”参数:设置类别数量
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第5张图片
    文件中所有“num_class”参数都要进行对应修改。默认为80,修改成我的数据集中类别数量,即9。

2. 3. 修改Faster R-CNN数据集加载路径配置文件

  • 文件路径:mmdetection/configs/_base_/datasets/voc0712.py
  • data_root”参数、“img_scale”参数
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第6张图片
    img_scale”参数决定了你的模型输入图片的大小范围,默认最小600x600,最大1000x1000。
  • batch-size、train、test以及val的路径
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第7张图片
    samples_per_gpu:每个GPU的batch-size,这里我只用了1个GPU,所以这里的4就等同于训练中的每个batch为4张图。

2. 4. 修改Faster R-CNN数据集参数配置文件

  • 将“CLASSES”替换成自己数据集的类别名称,并且最好标注色板“PALETTE”的颜色数量与类别数量一致。文件路径:mmdetection/mmdet/datasets/voc.py
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第8张图片
  • 将“return”返回的内容改成自己数据集的类别名称。文件路径:mmdetection/mmdet/core/evaluation/class_names.py
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第9张图片
    这个时候按道理来说,对于类别的相关修改就可以了。但是我在用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

2. 5. 修改Faster R-CNN训练周期配置文件

  • interval”参数:等同于batch。文件路径:mmdetection/configs/_base_/configs/_base_/default_runtime.py
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第10张图片
    checkpoint_config中“interval”指的是断点检测的间隔,即间隔多少次epoch保存一次权重。log_config中“interval”指的是终端日志更新的间隔,即间隔多少次batch显示一次日志记录。
  • max_epochs”参数:训练周期设置。
    文件路径:mmdetection/configs/_base_/configs/_base_/schedules/schedule_1x.py
    MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第11张图片
    以上就是所有要修改的关于数据集和训练周期的配置。

3. 模型训练

  • 在“mmdetection”项目终端输入执行命令
python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py  

MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第12张图片
出现以上日志,就证明训练在进行中了。

4. 日志可视化

不做修改的话,日志会自动保存到“mmdetection/work_dirs”。
MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第13张图片

  • 在“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   

MM-Detection Logs —— 自定义数据集下的模型训练(Linux)_第14张图片
plot_curve:键入日志路径
--keys:键入需要可视化的指标,如果想显示多个在同一张图中,关键词间用空格间隔开,如:–keys mAP acc
--out:键入可视化文件保存路径

你可能感兴趣的:(目标检测,目标检测,深度学习,计算机视觉,python,linux)