
人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载MMDetection 在 COCO 等大规模数据集上预训练的检测器可以作为 Cityscapes、KITTI 等数据集的优质预训练模型大幅提升目标域上的收敛速度与最终精度。本文以 Cityscapes 数据集微调 Mask R-CNN 为例完整讲解 MMDetection 中基于配置继承_base_实现模型微调的五个核心步骤——继承基础配置、修改 Head 类别数、替换数据集、调整训练策略、加载预训练权重并结合作者仓库gh_mirrors/mm/mmdetection中的真实配置文件与源码实现进行深度佐证。读完本文你将掌握一套可复制的微调流程能够把官方 ModelZoo 中的任何预训练模型迁移到自己的数据集上。一、微调的整体思路两个必要步骤把预训练模型迁移到新数据集本质上需要做两件事按 教程2自定义数据集 中的方法对新数据集添加支持即准备数据集并编写对应的数据集配置文件_base_/datasets/下的数据集定义按照本教程讨论的方法修改模型配置即通过继承与覆盖的方式让模型结构、训练策略与预训练权重适配新数据集。下文以Cityscapes Dataset 上的微调为具体例子详细讲述用户需要在配置中修改的五个部分。Cityscapes 是面向城市街景语义理解的公开数据集实例分割任务包含 8 个类别person、rider、car、truck、bus、train、motorcycle、bicycle远少于 COCO 的 80 类因此是验证微调流程的理想示例。二、第一步继承基础配置_base_机制为了减轻编写整个配置的负担并减少出错的可能性MMDetection 支持从多个现有配置中继承配置信息。微调 Mask R-CNN 模型时新的配置信息需要使用从_base_/models/中继承的配置来构建模型的基本结构使用 Cityscapes 数据集时可以简便地从_base_/datasets/cityscapes_instance.py继承训练过程的运行设置如日志 logger 设置可以从_base_/default_runtime.py继承训练计划配置则从_base_/schedules/schedule_1x.py继承。这些基础配置文件存放于configs/_base_/目录下用户既可以选择继承也可以全部重新编写。典型的继承写法如下_base_ [ ../_base_/models/mask_rcnn_r50_fpn.py, ../_base_/datasets/cityscapes_instance.py, ../_base_/default_runtime.py, ../_base_/schedules/schedule_1x.py ]配置继承的覆盖规则_base_中列出的配置会被逐字段解析并合并新配置文件中定义的字段会覆盖被继承配置中的同名字段字典按 key 深度合并列表整体替换。因此我们只需要在子配置中增量修改少量字段就能在完整基础配置之上定制微调方案。需要说明的是从当前仓库源码结构看实际的基础模型文件名为 configs/base/models/mask-rcnn_r50_fpn.py文件名中带连字符文档中的mask_rcnn_r50_fpn.py写法在较新版本中已统一为mask-rcnn_r50_fpn.py真实微调配置 configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py 中引用的即是后者。该基础配置定义了完整的 Mask R-CNN 模型ResNet骨干depth50、frozen_stages1、init_cfg使用 torchvision 预训练权重、FPN颈部in_channels[256, 512, 1024, 2048]、out_channels256、num_outs5、RPNHead与StandardRoIHeadbbox_head 为Shared2FCBBoxHeadin_channels256、fc_out_channels1024、roi_feat_size7、num_classes80。其余被继承的基础配置要点configs/base/datasets/cityscapes_instance.py定义dataset_type CityscapesDataset、data_root data/cityscapes/训练/测试 pipeline训练采用RandomResize尺度[(2048, 800), (2048, 1024)]测试Resize到(2048, 1024)、train_dataloaderbatch_size1、RepeatDatasettimes8以及val_evaluatorCocoMetricCityScapesMetric双指标评估configs/base/default_runtime.pydefault_scope mmdet、各类 hooksCheckpointHookinterval1、LoggerHookinterval50、env_cfg、vis_backends/visualizer、log_level INFO、load_from None、resume Falseconfigs/base/schedules/schedule_1x.pyEpochBasedTrainLoopmax_epochs12、val_interval1、LinearLRMultiStepLRmilestones[8, 11]、SGD 优化器lr0.02、momentum0.9、weight_decay0.0001并带有auto_scale_lrbase_batch_size16自动学习率缩放声明。三、第二步Head 的修改num_classes新的配置还需要根据新数据集的类别数量修改 Head。只需要修改roi_head中 bbox_head 和 mask_head 的num_classes。修改后除了最后的预测 Head 之外预训练模型权重的大部分都会被重新使用即除分类/回归输出层之外的骨干、颈部、RPN 等权重均可完整迁移复用。model dict( roi_headdict( bbox_headdict( typeShared2FCBBoxHead, in_channels256, fc_out_channels1024, roi_feat_size7, num_classes8, bbox_coderdict( typeDeltaXYWHBBoxCoder, target_means[0., 0., 0., 0.], target_stds[0.1, 0.1, 0.2, 0.2]), reg_class_agnosticFalse, loss_clsdict( typeCrossEntropyLoss, use_sigmoidFalse, loss_weight1.0), loss_bboxdict(typeSmoothL1Loss, beta1.0, loss_weight1.0)), mask_headdict( typeFCNMaskHead, num_convs4, in_channels256, conv_out_channels256, num_classes8, loss_maskdict( typeCrossEntropyLoss, use_maskTrue, loss_weight1.0))))由于_base_采用字段级合并真实微调配置 configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py 中只写了差异部分语义与本例等价model dict( backbonedict(init_cfgNone), # 避免覆盖 load_from 的预训练权重初始化 roi_headdict( bbox_headdict( typeShared2FCBBoxHead, num_classes8, loss_bboxdict(typeSmoothL1Loss, beta1.0, loss_weight1.0)), mask_headdict(num_classes8)))这里backbonedict(init_cfgNone)是一个关键细节它显式关闭骨干网络的Pretrained初始化基础配置中为init_cfgdict(typePretrained, checkpointtorchvision://resnet50)避免其与下文load_from加载的 COCO 预训练权重发生冲突从而保证以 COCO 预训练检测器权重而非仅 torchvision 骨干权重作为整体初始化。从源码结构看这一约定在 MMDetection 各微调配置中普遍使用。四、第三步数据集的修改用户可能还需要准备数据集并编写数据集配置详细信息可参考 Customize Datasets。目前 MMDetection 的配置文件已经支持 VOC、WIDERFACE、COCO、LVIS、OpenImages、DeepFashion、Objects365 和 Cityscapes 等数据集基础数据集定义均位于 configs/base/datasets 目录例如voc0712.py、wider_face.py、coco_instance.py、lvis_v1_instance.py、openimages_detection.py、deepfashion.py、objects365v2_detection.py、cityscapes_instance.py。以 Cityscapes 为例需要先准备数据将数据集按照 数据集准备指南 放入data/cityscapes/并利用仓库提供的转换脚本 tools/dataset_converters/cityscapes.py 将原始 Cityscapes 标注转换为 COCO 格式的 JSON 标注文件如instancesonly_filtered_gtFine_train.json、instancesonly_filtered_gtFine_val.json。configs/base/datasets/cityscapes_instance.py 中的数据集配置包含以下关键元素数据源ann_file指向转换后的标注文件data_prefixdict(imgleftImg8bit/train/)指定图像前缀pipelineLoadImageFromFile→LoadAnnotations(with_bboxTrue, with_maskTrue)→RandomResize→RandomFlip(prob0.5)→PackDetInputs训练测试管线为Resize(scale(2048, 1024), keep_ratioTrue)等过滤filter_cfgdict(filter_empty_gtTrue, min_size32)丢弃无标注或尺寸过小的样本repeatRepeatDataset将训练集重复 8 次Cityscapes 训练集较小重复以平衡迭代步数评估器val_evaluator同时使用CocoMetricmetric[bbox, segm]输出 COCO 风格 AP和CityScapesMetric官方 Cityscapes 评估带seg_prefix与outfile_prefix。若使用自定义数据集且尚未提供现成的_base_数据集配置则需要按照 Customize Datasets 自行编写dataset_type、data_root、train_pipeline/test_pipeline、三个 dataloader 与 evaluator 配置块。五、第四步训练策略的修改微调的超参数与默认训练策略不同通常需要更小的学习率和更少的训练回合。因为预训练模型已经具备了良好的特征表达能力过大学习率容易破坏已有权重过多训练回合则易过拟合小规模数据集。# 优化器 # batch size 为 8 时的 lr 配置 optim_wrapper dict(optimizerdict(lr0.01)) # 学习率 param_scheduler [ dict( typeLinearLR, start_factor0.001, by_epochFalse, begin0, end500), dict( typeMultiStepLR, begin0, end8, by_epochTrue, milestones[7], gamma0.1) ] # 设置 max epoch train_cfg dict(max_epochs8) # 设置 log config default_hooks dict(loggerdict(interval100))逐项解读这些微调策略参数学习率基础配置schedule_1x.py中 SGD 的 lr 为 0.02batch size 16 基准微调时改为0.01batch size 8 基准符合线性缩放规则learning rate scaling rule即学习率与总 batch size 近似成正比LinearLR 预热LinearLR在训练的前 500 次迭代by_epochFalse按 iter 计从start_factor0.001线性升至 1.0起到 warmup 作用避免训练初期大学习率冲击预训练权重MultiStepLR 衰减训练共 8 个 epoch在milestones[7]处以gamma0.1将学习率衰减为原来的 1/10真实 Cityscapes 配置注释说明[7]比[6]性能更高max_epochs8配合cityscapes_instance.py中的RepeatDataset(times8)实际迭代量相当于 8×864 个原始 epoch与 Mask R-CNN 论文中约 24k 迭代的原始 schedule 相当日志间隔default_hooks dict(loggerdict(interval100))覆盖基础运行时中的 interval50每 100 次迭代输出一次日志。注意与optim_wrapper、param_scheduler、train_cfg直接覆盖不同default_hooks与_base_/default_runtime.py中的同名字段是字段级合并此处只覆盖logger子字段其余 hooks 保持基础配置不变。六、第五步使用预训练模型load_from如果要使用预训练模型可以在配置中通过load_from指定权重文件。建议在训练开始之前预先下载好模型权重避免训练过程中因下载而浪费时间。load_from https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth # noqa在模型微调中选择预训练权重的基本原则权重对应的模型结构要与当前配置结构一致或高度兼容类别数不一致没有关系分类层会按新 num_classes 重建并被随机初始化但骨干、颈部、RPN 等结构的通道数必须匹配。当前仓库中的真实 Cityscapes 配置 configs/cityscapes/mask-rcnn_r50_fpn_1x_coco.py 使用的是 COCO 1x 的mask_rcnn_r50_fpn_1x_coco权重load_from https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth # noqa关于权重加载的补充说明load_from在 configs/base/default_runtime.py 中默认值为None微调配置中重新赋值即可生效权重加载时形状不匹配的参数如因 num_classes 改变而尺寸变化的分类/回归层会被自动跳过这正是只需修改 num_classes 即可复用预训练权重的原因若将load_from指向本地文件路径如./checkpoints/mask_rcnn_r50_fpn_1x_coco.pth可避免在线下载类别数差异导致的 Head 随机初始化是正常的微调的前几个 epoch 这部分参数会快速收敛。七、完整的微调配置文件参考将上述五个部分的修改汇总即可得到一份完整的微调配置。仓库中现成的 Cityscapes 微调配置 configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py 全文如下与实际文档示例相比它是字段级合并的最小差异写法同样覆盖了五个要点_base_ [ ../_base_/models/mask-rcnn_r50_fpn.py, ../_base_/datasets/cityscapes_instance.py, ../_base_/default_runtime.py, ../_base_/schedules/schedule_1x.py ] model dict( backbonedict(init_cfgNone), roi_headdict( bbox_headdict( typeShared2FCBBoxHead, num_classes8, loss_bboxdict(typeSmoothL1Loss, beta1.0, loss_weight1.0)), mask_headdict(num_classes8))) # optimizer # lr is set for a batch size of 8 optim_wrapper dict(optimizerdict(lr0.01)) # learning rate param_scheduler [ dict( typeLinearLR, start_factor0.001, by_epochFalse, begin0, end500), dict( typeMultiStepLR, begin0, end8, by_epochTrue, # [7] yields higher performance than [6] milestones[7], gamma0.1) ] # actual epoch 8 * 8 64 train_cfg dict(max_epochs8) # For better, more stable performance initialize from COCO load_from https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth # noqa # NOTE: auto_scale_lr is for automatically scaling LR, # USER SHOULD NOT CHANGE ITS VALUES. # base_batch_size (8 GPUs) x (1 samples per GPU) # TODO: support auto scaling lr # auto_scale_lr dict(base_batch_size8)按照 configs/cityscapes/README.md 的说明Cityscapes 上的基线模型均使用 8 张 GPU、batch size 8每卡 1 张图训练学习率遵循线性缩放规则统一在cityscapes_train上训练、在cityscapes_val上测试所谓 1x training schedule 即 64 个 epoch与 Mask R-CNN 论文中原始约 24k 迭代的 schedule 对应COCO 预训练权重用于初始化。在双评估器下bbox与segm是标准 COCO 风格的 APcityscapes为官方评估结果通常略高于 COCO 指标。八、启动微调训练与测试配置就绪后即可通过仓库提供的 tools/train.py 启动微调训练# 单卡训练 python tools/train.py configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py # 多卡训练8 卡 bash tools/dist_train.sh configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py 8 # Slurm 集群训练 bash tools/slurm_train.sh partition job_name configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py 8训练完成后使用 tools/test.py 在验证集上评估微调效果python tools/test.py configs/cityscapes/mask-rcnn_r50_fpn_1x_cityscapes.py work_dirs/mask-rcnn_r50_fpn_1x_cityscapes/epoch_8.pth更多训练参数如--amp混合精度、--resume断点续训、--work-dir输出目录等可参考 训练与测试指南。Cityscapes 微调配置的评估会同时输出 COCO 风格的 box/mask AP 与官方 Cityscapes 指标便于从多个角度对比微调前后的性能提升。九、微调实践要点与常见问题类别数修改不遗漏实例分割模型如 Mask R-CNN需要同时修改bbox_head.num_classes与mask_head.num_classes仅做检测如 Faster R-CNN则只需修改bbox_head.num_classes。可将 configs/base/models/faster-rcnn_r50_fpn.py 与对应检测数据集配置组合参照同样流程微调检测器。init_cfgNone的意图微调时在子配置中为backbone设置init_cfgNone避免与load_from的 COCO 预训练权重双重初始化相互干扰这是 MMDetection 微调配置的标准约定。学习率与 epoch 的取舍新数据集与 COCO 分布差异越大、数据量越少学习率应越小可尝试 0.0050.01、训练回合越短如 824 epoch若新数据集很大且与 COCO 分布接近也可适当放宽。重复数据集与 epoch 的关系Cityscapes 训练集通过RepeatDataset(times8)扩充配置中max_epochs8指的是重复后的训练循环 epoch因此实际遍历原始数据 8×864 遍。调整 repeat 次数时应同步核算实际迭代量。权重不匹配的告警加载预训练权重时日志中的 size mismatch 告警主要来自 num_classes 变化的 Head 层属预期现象无需处理。backbone 冻结策略基础配置中frozen_stages1冻结 stem 与 stage1、norm_evalTrue微调时一般保持默认即可若新数据集与 COCO 差异极大可考虑减少frozen_stages以允许更多底层特征更新。综上MMDetection 的微调流程高度依赖其配置继承体系以_base_组装模型、数据集、运行时与训练计划四类基础配置再以字段级覆盖实现五步定制——改 Head、换数据、调策略、挂权重。本文以 Cityscapes 为例的完整流程可直接推广到 VOC、KITTI、自定义数据集等任意场景只需替换_base_中的数据集定义与对应的num_classes即可快速完成预训练模型的迁移与二次开发。赞分享人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载相关推荐MMDetection 模型微调完全指南基于 COCO 预训练权重在新数据集上微调以 Cityscapes 为例MMDetection 模型微调完全指南基于 COCO 预训练权重在新数据集上微调以 Cityscapes 为例 在 MMDetection 中使用在大人工智能计算机视觉深度学习模型评测VoiceStudio 模型训练完全指南从 Emilia 预训练到自定义数据微调VoiceStudio 模型训练完全指南从 Emilia 预训练到自定义数据微调 导读 VoiceStudio开源全本地语音平台不仅提供推理、克隆与配音能人工智能语音音频本地部署MCP 服务桌面应用SSD-Keras权重采样终极指南从预训练模型到自定义数据集的无缝迁移SSD Keras权重采样终极指南从预训练模型到自定义数据集的无缝迁移 引言预训练模型迁移的痛点与解决方案 你是否曾因预训练模型的类别数量与实际需求不符而放创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考