MMdetection3.1.0 从零开始训练自己的数据

807 阅读2分钟

环境: 按照官网推荐安装 mmdetection.readthedocs.io/zh_CN/stabl…

mmcv>=2.0.0

mmdetection==3.1.0

1. 收集自己需要的数据集

mmdetection适配很多数据集,我们以比较通用的coco数据集进行训练。拿到coco数据集并且与之适配的coco掩码标签。或者直接coco官网下载合适的数据集。 cocodataset.org/

将下载的数据集放入根目录下。

2. 设定自己想要测试的项目

mmdet\datasets\coco.py

按照格式修改classes里面的表述为自己想要检测的目标标签,同时修改pelette下到相同的个数。

class CocoDataset(BaseDetDataset):
    """Dataset for COCO."""

    METAINFO = {
        'classes':
        ('车','面包车','公交车','卡车','人','自行车'),
        # palette is a list of color tuples, which is used for visualization.
        'palette':
        [(220, 20, 60), (119, 11, 32), (0, 0, 142), (0, 0, 230), (106, 0, 228),
         (0, 60, 100)]
    }

mmdet\evaluation\functional\class_names.py

return中的名称按照上面相同的格式顺序进行修改。

def coco_classes() -> list:
    """Class names of COCO."""
    return [
        '车','面包车','公交车','卡车','人','自行车'
    ]

在根目录下进行重新编译文件:

cd mmdetection
pip install -v -e .

3.选定训练文件

之后运行的脚本即是该文件

configs\faster_rcnn\faster-rcnn_r50_fpn_1x_coco.py

_base_ = [
    '../_base_/models/faster-rcnn_r50_fpn.py',#选择的训练模型
    '../_base_/datasets/coco_detection.py',#训练数据的配置文件【重点】
    '../_base_/schedules/schedule_1x.py',#训练过程参数配置(学习率等)
    '../_base_/default_runtime.py'#训练时间
]

4. 修改配置文件

这个文件决定了数据载入方式与处理方式

configs_base_\datasets\coco_detection.py

4.1设定数据集目录

更改data_root为自己的训练的目录

dataset_type = 'CocoDataset'
data_root = 'data/coco/'#自己的数据集保存位置

4.2修改测试集json和验证集json地址

此处要保证json文件都在数据集目录下面。

train_dataloader = dict(
    batch_size=2,
    num_workers=2,
    persistent_workers=True,  # 避免每次迭代后 dataloader 重新创建子进程
    sampler=dict(type='DefaultSampler', shuffle=True),  # 默认的 sampler,同时支持分布式训练和非分布式训练
    batch_sampler=dict(type='AspectRatioBatchSampler'),  # 默认的 batch_sampler,用于保证 batch 中的图片具有相似的长宽比,从而可以更好地利用显存
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        ann_file='annotations/instances_train2017.json',#【修改此处】
        data_prefix=dict(img='train2017/'),#【修改此处】
        filter_cfg=dict(filter_empty_gt=True, min_size=32),
        pipeline=train_pipeline))
val_dataloader = dict(
    batch_size=1,
    num_workers=2,
    persistent_workers=True,
    drop_last=False,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        ann_file='annotations/instances_val2017.json',#【修改此处】
        data_prefix=dict(img='val2017/'),#【修改此处】
        test_mode=True,
        pipeline=test_pipeline))
test_dataloader = val_dataloader  # 测试 dataloader 的配置与验证 dataloader 的配置相同,这里省略

4.3修改测试方法

val_evaluator = dict(
    type='CocoMetric',
    ann_file=data_root + 'annotations/instances_val2017.json',#【修改此处】
    metric='bbox',#画框
    format_only=False,
    backend_args=backend_args)
test_evaluator = val_evaluator

5.运行脚本,生成测试模型

在根目录下输入

python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x.py 

即可开始训练自己的模型,默认为12个训练周期,并且在训练的过程中,会生成mAP供测试评估,训练好自己的模型就可以拿来使用和评估了。