MMDetection(简称 mmdet)是 OpenMMLab 开发的开源目标检测框架,基于 PyTorch 构建

MMDetection(简称 mmdet)是 OpenMMLab 开发的开源目标检测框架,基于 PyTorch 构建
MMDetection简称 mmdet是 OpenMMLab 开发的开源目标检测框架基于 PyTorch 构建以模块化、高性能和易扩展著称。它支持多种主流目标检测算法如 Faster R-CNN、Mask R-CNN、YOLOX、DETR、Sparse R-CNN、RTMDet 等并提供统一的训练/推理/评估接口。其核心优势包括✅ 模块化设计模型组件backbone、neck、head、loss、data pipeline高度解耦便于复用与定制✅ 全面的算法覆盖涵盖两阶段、单阶段、anchor-free、transformer-based、实时轻量级等各类方法✅ 高性能训练与推理支持混合精度训练AMP、分布式训练、ONNX/TensorRT 模型导出✅ 丰富的预训练模型与基准结果在 COCO、Pascal VOC、Cityscapes 等数据集上提供大量 SOTA 模型权重与配置文件✅ 完善的文档与社区支持提供详细教程、API 文档、Colab 示例及活跃的 GitHub 社区。典型使用流程安装pip install openmim mim install mmdet准备数据按 COCO 或自定义格式组织选择/修改配置文件.py格式支持继承与覆盖训练python tools/train.py configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py推理/测试python tools/test.py ... --out results.pkl可视化/分析python tools/analysis_tools/analyze_logs.py等工具辅助# 示例加载预训练 Faster R-CNN 并推理frommmdet.apisimportinit_detector,inference_detector config_fileconfigs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.pycheckpoint_filecheckpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pthmodelinit_detector(config_file,checkpoint_file,devicecuda:0)resultinference_detector(model,demo.jpg)在 MMDetection 中自定义新 backbone如 EfficientNetV2需遵循其模块化设计规范主要分为以下 5 个步骤✅1. 实现 Backbone 类继承torch.nn.Module实现forward()和init_weights()方法并确保输出多尺度特征通常为list[Tensor]对应不同 stage 的输出符合 mmdet 的 neck 输入要求如 FPN 需要 C2/C3/C4/C5。示例骨架简化版 EfficientNetV2-S# mmdet/models/backbones/efficientnet_v2.pyimporttorch.nnasnnfrommmcv.cnnimportbuild_norm_layerfrommmcv.runnerimportBaseModulefromtorchvision.models.efficientnetimportefficientnet_v2_sclassEfficientNetV2(BaseModule):def__init__(self,pretrainedNone,init_cfgNone,out_indices(1,2,3,4),# 对应 stem 4 stagesnorm_cfgdict(typeBN,requires_gradTrue)):super().__init__(init_cfg)self.modelefficientnet_v2_s(pretrainedFalse)# 替换原始 classifier head 为 Identity保留 backboneself.model.classifiernn.Identity()self.out_indicesout_indices self.norm_cfgnorm_cfgdefforward(self,x):# 提取各 stage 特征需根据 torchvision 源码结构调整features[]xself.model.features[0](x)# stemif0inself.out_indices:features.append(x)fori,stageinenumerate(self.model.features[1:],1):xstage(x)ifiinself.out_indices:features.append(x)returntuple(features)definit_weights(self):ifself.init_cfgisnotNone:super().init_weights()else:# 加载 torchvision 预训练权重可选ifself.modelisnotNoneandhasattr(self.model,features):pass# 可调用 load_state_dict 或使用 mmcv 的 load_checkpoint✅2. 注册模块在mmdet/models/backbones/__init__.py中添加导入和注册from.efficientnet_v2importEfficientNetV2 __all__[EfficientNetV2]并在mmdet/models/__init__.py确保 backbone 模块被导入。✅3. 添加预训练权重加载逻辑可选但推荐若使用 torchvision 官方权重可在init_weights()中调用load_state_dict()更规范做法将权重转为 mmdet 兼容格式去除 classifier、重命名 key保存为.pth并通过init_cfgdict(typePretrained, checkpointpath/to/efficientnet_v2_s.pth)在 config 中指定。✅4. 编写配置文件config在 config 中引用新 backbone例如configs/my_configs/efficientnetv2_faster_rcnn.py_base_../faster_rcnn/faster-rcnn_r50_fpn_1x_coco.pymodeldict(backbonedict(typeEfficientNetV2,pretrainedNone,# 或设为 None由 init_cfg 控制out_indices(1,2,3,4),init_cfgdict(typePretrained,checkpointhttps://download.pytorch.org/models/efficientnet_v2_s-dd5fe13b.pth)),neckdict(typeFPN,in_channels[24,48,64,128],# 根据 EfficientNetV2-S 各 stage 输出通道调整out_channels256,num_outs5))⚠️ 注意in_channels必须与 backbone 实际输出通道严格匹配EfficientNetV2-S 各 stage 输出24, 48, 64, 128。✅5. 验证与训练运行python tools/misc/print_config.py configs/my_configs/efficientnetv2_faster_rcnn.py检查配置是否解析成功使用python tools/train.py configs/my_configs/efficientnetv2_faster_rcnn.py启动训练可通过python tools/browse_dataset.py可视化数据流确认 backbone 输出 shape 正确。 补充建议利用mmcv的get_root_logger()记录调试信息推荐参考 mmdet 官方已支持的ResNet,VisionTransformer等 backbone 实现如需支持自动 shape 推断可重写self._out_features属性或配合ChannelMapper适配 neck。