
人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载本文以 MMDetection 仓库中 projects/ConvNeXt-V2 子项目为核心讲解如何将 ConvNeXt V2 全卷积掩码自编码器FCMAE预训练骨干接入 Mask R-CNN完成 COCO 检测与实例分割任务的微调训练。读完本文你将掌握 ConvNeXt V2 与 ConvNeXt V1 的架构差异、LSJ 大尺度抖动数据增强与分层学习率衰减的配置方法以及如何在 MMDetection 中以 AMP 混合精度复现 52.9 box AP / 46.4 mask AP 的官方结果。ConvNeXt-V2 项目概览从论文到 MMDetection 落地ConvNeXt V2 出自论文《ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders》。该工作的核心观点是现代 ConvNet以 ConvNeXt 为代表虽然在监督学习下表现优异但简单地将掩码自编码器MAE自监督范式套用到 ConvNeXt 上并不能取得理想效果。为此论文提出两大创新并协同设计全卷积掩码自编码器Fully Convolutional Masked Autoencoder, FCMAE一套不依赖 Transformer 位置编码的自监督预训练框架专门适配纯卷积骨干全局响应归一化层Global Response Normalization, GRN可插入 ConvNeXt 架构的新层用于增强通道间的特征竞争inter-channel feature competition显著改善全卷积 MAE 预训练后模型的微调表现。两者的协同设计产出了新的模型家族 ConvNeXt V2在 ImageNet 分类、COCO 检测、ADE20K 分割等基准上显著提升了纯卷积网络的性能。官方公开了从 3.7M 参数的 Atto 模型ImageNet top-1 76.7%到 650M 参数的 Huge 模型仅用公开数据即达 88.9% top-1的完整预训练权重谱系。在 MMDetection 中projects/ConvNeXt-V2 子项目正是这条技术链路在目标检测方向的落地把 FCMAE 预训练的 ConvNeXt V2 Base 骨干接入 Mask R-CNN使用 LSJLarge-Scale Jittering增强与 3x 训练计划在 COCO 实例分割任务上得到 box AP 52.9、mask AP 46.4 的结果。项目结构非常精简只包含一个配置文件与本文档projects/ConvNeXt-V2/ ├── README.md └── configs/ └── mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco.py使用前提安装 MMPretrainConvNeXt 骨干本身不在 MMDetection 仓库内实现而是由 OpenMMLab 的 MMPretrain 提供MMPretrain 内置了丰富的骨干网络可供下游任务复用。因此运行本配置前必须先安装pip install mmpretrain安装后配置文件中通过custom_imports显式导入mmpretrain.models模块以触发 MMPretrain 内部的注册器register_module从而让 MMDetection 在解析typemmpretrain.ConvNeXt时能找到对应实现custom_imports dict( imports[mmpretrain.models], allow_failed_importsFalse)同样的导入模式也出现在 MMDetection 官方 configs/convnext 系列配置中例如 mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py 采用了完全一致的写法。官方实验结果与模型下载projects/ConvNeXt-V2/README.md 给出了唯一的官方结果表MethodBackbonePretrainLr schdAugmentationMem (GB)box APmask APConfigDownloadMask R-CNNConvNeXt-V2-BFCMAE3xLSJ22.552.946.4configmodel | log需要特别留意的是 README 中的两条Note该检测结果是 ConvNeXt-V2 的预发布版本pre-release官方微调设置当时尚未正式发布因此该配置属于社区先行实现使用 ConvNeXt 骨干必须先安装 MMPretrain见上文。配置文件中的两处 TODO 注释也印证了其预发布性质drop_path_rate的随机深度取值{0.1, 0.2, 0.3, 0.4}尚待验证RPN 的 NMS 类型、layer_wise学习率衰减的取值也标注了待扫参空间复现时若结果与官方表有出入可优先从这些超参入手排查。配置文件逐段精读完整的官方配置位于 projects/ConvNeXt-V2/configs/mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco.py下面分段剖析其设计意图。基础配置继承_base_ [ mmdet::_base_/models/mask-rcnn_r50_fpn.py, mmdet::_base_/datasets/coco_instance.py, mmdet::_base_/schedules/schedule_1x.py, mmdet::_base_/default_runtime.py ]四份基础配置分别提供Mask R-CNN 完整模型结构mask-rcnn_r50_fpn.py、COCO 实例分割数据集定义、1x 训练调度与默认运行环境。后续所有覆写都建立在这四份基线上。骨干网络以 GRN 为关键开关checkpoint_file https://download.openmmlab.com/mmclassification/v0/convnext-v2/convnext-v2-base_3rdparty-fcmae_in1k_20230104-8a798eaf.pth # noqa image_size (1024, 1024) model dict( backbonedict( _delete_True, typemmpretrain.ConvNeXt, archbase, out_indices[0, 1, 2, 3], drop_path_rate0.4, layer_scale_init_value0., # disable layer scale when using GRN gap_before_final_normFalse, use_grnTrue, # V2 uses GRN init_cfgdict( typePretrained, checkpointcheckpoint_file, prefixbackbone.)), neckdict(in_channels[128, 256, 512, 1024]), ...关键参数逐一说明_delete_True必须显式删除基础配置中的 ResNet50 骨干否则会与mmpretrain.ConvNeXt产生字段冲突typemmpretrain.ConvNeXt骨干实现来自 MMPretrain而非 mmdet 自身archbase选择 Base 规格的 ConvNeXt V2通道数为 128/256/512/1024与 V1 Base 的 128/256/512/1024 一致out_indices[0, 1, 2, 3]输出 4 个阶段的特征图分别送入 FPN 的 4 个输入层drop_path_rate0.4随机深度Stochastic Depth丢弃率该值在配置中标注了 TODO属于未完全验证的超参layer_scale_init_value0.这是 V2 的关键差异——使用 GRN 时禁用 Layer Scale 初始化。对比 V1 配置 mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py 中layer_scale_init_value1.0可见 V2 用 GRN 取代了 Layer Scale 的角色use_grnTrueV2 独有的 GRN 开关是 ConvNeXt V2 相比 V1 的架构级新增模块V1 配置中没有该字段用于增强通道间特征竞争gap_before_final_normFalse不在最后一个阶段之前做全局平均池化保证输出的是空间特征图而非向量适配检测/分割这类密集预测任务init_cfg加载 FCMAE 在 ImageNet-1K 上预训练的权重prefixbackbone.用于剥离预训练权重中与检测任务无关的前缀保证状态字典键名对齐。由于骨干通道数从 ResNet50 的 256/512/1024/2048 变为 128/256/512/1024FPN 的输入通道必须同步覆写neckdict(in_channels[128, 256, 512, 1024]),推理设置RCNN 分支使用 Soft-NMStest_cfgdict( rpndict(nmsdict(typenms)), # TODO: does RPN use soft_nms? rcnndict(nmsdict(typesoft_nms)))这里覆写了基础配置 mask-rcnn_r50_fpn.py 中的测试设置RPN 阶段沿用普通 NMS而 RCNN 阶段改用Soft-NMS以保留更多重叠目标nms_pre1000、max_per_img100、score_thr0.05、mask_thr_binary0.5等其余测试参数均继承自基础配置。LSJ 数据增强流水线LSJLarge-Scale Jittering源自 DETR/Sparse R-CNN 的大尺度抖动策略是本配置的数据增强核心train_pipeline [ dict(typeLoadImageFromFile, backend_args_base_.backend_args), dict(typeLoadAnnotations, with_bboxTrue, with_maskTrue), dict( typeRandomResize, scaleimage_size, ratio_range(0.1, 2.0), keep_ratioTrue), dict( typeRandomCrop, crop_typeabsolute_range, crop_sizeimage_size, recompute_bboxTrue, allow_negative_cropTrue), dict(typeFilterAnnotations, min_gt_bbox_wh(1e-2, 1e-2)), dict(typeRandomFlip, prob0.5), dict(typePackDetInputs) ]各环节的作用RandomResize以 (1024, 1024) 为基准尺度缩放在0.1x ~ 2.0x的宽大范围内随机进行保持宽高比这是 LSJ 名称中 large-scale jittering 的来源——极端缩小与极端放大交替出现极大扩充了尺度多样性RandomCrop使用crop_typeabsolute_range、crop_size(1024, 1024)做绝对尺寸随机裁剪recompute_bboxTrue表示裁剪后重新计算标注框坐标allow_negative_cropTrue允许裁剪出不含任何目标的区域FilterAnnotations过滤掉裁剪后过小的标注min_gt_bbox_wh(1e-2, 1e-2)RandomFlip0.5 概率水平翻转PackDetInputs将图像与标注打包为检测器输入格式。LSJ 训练计划的参考实现还可以在 configs/common/lsj-200e_coco-instance.py 等公共配置中看到同类写法。训练调度与学习率train_dataloader dict( batch_size4, # total_batch_size 32 8 GPUS x 4 images num_workers8, datasetdict(pipelinetrain_pipeline)) max_epochs 36 train_cfg dict(max_epochsmax_epochs) param_scheduler [ dict( typeLinearLR, start_factor0.001, by_epochFalse, begin0, end1000), dict( typeMultiStepLR, begin0, endmax_epochs, by_epochTrue, milestones[27, 33], gamma0.1) ]单卡 batch size 为 4注释明确说明总 batch size 32 由8 卡 × 4 张构成复现官方指标时需保持该全局 batch 规模训练 36 epoch即 3x 计划前 1000 次迭代以LinearLR起始系数 0.001做 warmup之后在第 27、33 epoch 处分别将学习率衰减 10 倍MultiStepLRgamma0.1。优化器AMP 混合精度 分层学习率衰减optim_wrapper dict( typeAmpOptimWrapper, constructorLearningRateDecayOptimizerConstructor, paramwise_cfg{ decay_rate: 0.95, decay_type: layer_wise, # TODO: sweep layer-wise lr decay? num_layers: 12 }, optimizerdict( _delete_True, typeAdamW, lr0.0001, betas(0.9, 0.999), weight_decay0.05, )) default_hooks dict(checkpointdict(max_keep_ckpts1))该优化器配置同时启用了两套关键机制其一AMP 混合精度。AmpOptimWrapper以自动混合精度Automatic Mixed Precision训练显著降低显存占用——这也解释了结果表中 22.5 GB 显存的关键来源。其二ConvNeXt 专用的分层学习率衰减。constructorLearningRateDecayOptimizerConstructor指向 mmdet 内置构造器 mmdet/engine/optimizers/layer_decay_optimizer_constructor.py其实现要点如下num_layers会被内部2扩展为总层数Base 骨干 12 个 block即 14 层decay_rate0.95控制层间衰减幅度参数按层号layer_id分组第layer_id组的学习率为decay_rate ** (num_layers - layer_id - 1)乘以基础学习率即越深的层学习率越高该函数中lr_scale的计算见 layer_decay_optimizer_constructor.py层号分配由get_layer_id_for_convnextlayer_wise 模式或get_stage_id_for_convnextstage_wise 模式决定两者均针对backbone.stages、backbone.downsample_layers等 ConvNeXt 特有参数名做解析见 layer_decay_optimizer_constructor.py因此该构造器目前仅为 ConvNeXt 类骨干设计换成其他骨干会直接抛出NotImplementedError权重衰减按参数形状分流维度为 1 的参数、.bias、pos_embed、cls_token不施加 weight decay其余参数统一使用weight_decay0.05见 layer_decay_optimizer_constructor.pydefault_hooks中max_keep_ckpts1只保留最近一份 checkpoint节省磁盘。训练与测试命令行实操在安装好 mmdet、mmengine、mmpretrain 及各自依赖的前提下可基于仓库标准工具脚本启动训练。8 卡分布式训练bash tools/dist_train.sh projects/ConvNeXt-V2/configs/mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco.py 8单卡训练python tools/train.py projects/ConvNeXt-V2/configs/mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco.py加载官方权重做推理评测python tools/test.py projects/ConvNeXt-V2/configs/mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco.py \ https://download.openmmlab.com/mmdetection/v3.0/convnextv2/mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco/mask-rcnn_convnext-v2-b_fpn_lsj-3x-fcmae_coco_20230113_110947-757ee2dd.pth注意tools/dist_train.sh、tools/train.py、tools/test.py均为仓库根目录下 tools 的标准入口。由于该配置需要 8 卡 × batch 4 才能对齐官方 32 的全局 batch显存不足时需同步调整 batch size 与学习率否则指标会有偏差。ConvNeXt V2 与 V1 配置对比升级点一目了然将本配置与官方 V1 代表配置 mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py 对照可清晰看出两代骨干在检测集成上的差异配置项ConvNeXt V1 (tiny)ConvNeXt V2 (base)骨干类型mmpretrain.ConvNeXtmmpretrain.ConvNeXtGRN 开关无该字段V1 无 GRNuse_grnTrueLayer Scale 初始化layer_scale_init_value1.0layer_scale_init_value0.使用 GRN 时禁用FPN 输入通道[96, 192, 384, 768][128, 256, 512, 1024]分层 LR 衰减层数num_layers6num_layers12预训练权重ImageNet-1K 监督noemaFCMAE 自监督ImageNet-1K数据增强MS crop多尺度 随机裁剪LSJ0.1x~2.0x 大尺度抖动RCNN NMS默认 NMSSoft-NMS从源码结构看V1 与 V2 复用同一个mmpretrain.ConvNeXt类差异完全由use_grn、layer_scale_init_value等参数驱动而预训练范式的区别监督 vs FCMAE 自监督则体现在checkpoint_file指向的不同权重。这种同构骨干 参数开关 不同预训练的设计使得在 MMDetection 中切换两代骨干只需修改少量配置行。引用与总结若在科研或工程中使用了该实现请按论文规范引用article{Woo2023ConvNeXtV2, title{ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders}, author{Sanghyun Woo, Shoubhik Debnath, Ronghang Hu, Xinlei Chen, Zhuang Liu, In So Kweon and Saining Xie}, year{2023}, journal{arXiv preprint arXiv:2301.00808}, }总结而言projects/ConvNeXt-V2 子项目以极低的接入成本在 MMDetection 中复现了 ConvNeXt V2 的检测能力FCMAE 自监督预训练权重由 MMPretrain 提供use_grnTrue与layer_scale_init_value0.两个开关完成了从 V1 到 V2 的架构升级LSJ 增强、3x 计划、分层学习率衰减与 AMP 混合精度则共同支撑起 52.9 box AP / 46.4 mask AP 的官方结果。需要注意的是该结果仍属预发布版本配置中残留的 drop_path_rate、RPN NMS 类型、layer-wise 衰减系数等 TODO 项在自定义复现时值得进一步验证与调优。更丰富的 ConvNeXt 检测配置含 V1 的 tiny/small 变体、cascade Mask R-CNN 变体可在 configs/convnext 中继续探索。赞分享人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载相关推荐MMDetection 3.x 中的 ConvNeXt 骨干网络实战Mask R-CNN 与 Cascade Mask R-CNN 配置详解MMDetection 3.x 中的 ConvNeXt 骨干网络实战Mask R CNN 与 Cascade Mask R CNN 配置详解 ConvNeXt人工智能计算机视觉深度学习模型评测Transformers 中的 ConvNeXt V2从 FCMAE 自监督预训练到 GRN 架构的纯卷积模型详解Transformers 中的 ConvNeXt V2从 FCMAE 自监督预训练到 GRN 架构的纯卷积模型详解 ConvNeXt V2 是 Faceboo人工智能深度学习机器学习预训练微调NLP计算机视觉语音多模态MMDetection 基于 DeepFashion-In-shop 数据集的服装解析Mask R-CNN 配置与训练实战指南MMDetection 基于 DeepFashion In shop 数据集的服装解析Mask R CNN 配置与训练实战指南 本文以 MMDetection人工智能计算机视觉深度学习模型评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。