1.选择基准配置文件

为了方便写配置文件,我们需要找一个配置文件作为基准,在mmdetection/configs找到自己想跑的模型,然后选一个基准的配置文件,命名规则是

{algorithm name}_{model component names [component1]_[component2]_[...]}_{training settings}_{training dataset information}_{testing dataset information}.py

{algorithm name}:算法的名称。 它可以是检测器名称,例如 faster-rcnn、mask-rcnn等。也可以是半监督或知识蒸馏算法,例如 soft-teacher、lad等等

{component names}:算法中使用的组件名称,如 backbone、neck 等。例如 r50-caffe_fpn_gn-head
 表示在算法中使用 caffe 版本的 ResNet50、FPN 和 使用了 Group Norm 的检测头。 

{training settings}: 训练设置的信息,例如 batch 大小、数据增强、损失、参数调度方式和训练最大轮次/迭代。 例如:4xb4-mixup-giou-coslr-100e 表示使用 8 个 gpu ,每个 gpu 4 张图、mixup 数据增强、GIoU loss、余弦退火学习率,并训练 100 个 epoch。

{gpu x batch_per_gpu}: GPU 数和每个 GPU 的样本数。bN 表示每个 GPU 上的 batch 大小为 N。例如 4x4b 是 4 个 GPU 每个 GPU 4 张图的缩写。如果没有注明,默认为 8 卡每卡 2 张图。

{schedule}: 训练方案,选项是 1x、 2x、 20e 等。1x 和 2x 分别代表 12 epoch 和 24 epoch,20e 在级联模型中使用,表示 20 epoch。对于 1x/2x,初始学习率在第 8/16 和第 11/22 epoch 衰减 10 倍;对于 20e ,初始学习率在第 16 和第 19 epoch 衰减 10 倍。

{training dataset information}: 训练数据集,例如 cocococo-panopticcityscapesvoc-0712wider-face

{testing dataset information} (可选): 测试数据集,用于训练和测试在不同数据集上的模型配置。 如果没有注明,则表示训练和测试的数据集类型相同。

2.写自己的配置文件

# 新配置继承了基本配置,并做了必要的修改(可以是绝对路径或者相对路径,我觉得绝对路径不会出错)
# _base_ = '../mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco.py'
_base_ = '/mmdetection/configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_ms-1x_coco.py'
# 我们还需要更改 head 中的 num_classes 以匹配数据集中的类别数,比如我这里是3个类别
model = dict(
    backbone=dict(
        init_cfg=None  # 取消所有预训练初始化
    ),
    roi_head=dict(
        bbox_head=dict(num_classes=3), mask_head=None,)
        # mask_head=dict(num_classes=3))
)

# 修改数据集相关配置(默认是类别1,类别2,类别3,如果有类别0需要用coco_cat_ids指明)
data_root = '/tmp/MMDection/mmdetection/final_loss_enhance'
metainfo = {
    'classes': ('water', 'cola', 'fenda'),
    'coco_cat_ids': [0, 1, 2],  # <— 关键
    'palette': [
        (0, 0, 0),        # void,黑色
        (0, 255, 255),    # water_void,红色
        (255, 0, 0),      # loss,青色
    ]
}
# 这里需要修改ann_file和data_prefix的文件路径,
train_dataloader = dict(
    batch_size=4,
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
#选择训练集的annotations里面的json文件
        ann_file='/tmp/MMDection/mmdetection/mydata/train/annotations/result.json',
#选择训练集图片所在的文件夹
        data_prefix=dict(img='/tmp/MMDection/mmdetection/mydata/train/images')))
val_dataloader = dict(
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        ann_file='/tmp/MMDection/mmdetection/final_loss_enhance/val/annotations/result.json',
        data_prefix=dict(img='/tmp/MMDection/mmdetection/final_loss_enhance/val/images')))
test_dataloader = val_dataloader

# 修改评价指标相关配置
val_evaluator = dict(ann_file=data_root + '/val/annotations/result.json')
test_evaluator = val_evaluator

3.修改epoch,checkpoint等参数

在/mmdetection/configs/_base_里有三个py文件:default_runtime.py里面可以修改检查点保存等默认参数

/mmdetection/configs/_base_/schedules/schedule_1x.py(或者20e等,具体看你用了哪个基准模型)可以改最大轮次,优化器等,改好之后就可以运行训练了, --work-dir可以指定保存的文件夹

python tools/train.py /tmp/MMDection/mmdetection/configs/ANEW/fasterrcnn_r50_fpn.py --work-dir /your/file/path

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐