mmdetection实战:从零构建自定义目标检测模型的全链路指南
如果你刚接触mmdetection,想用它训练自己的数据集,大概率会经历一段“痛苦”的调试期。网上的教程看似简单,但自己动手时,各种环境报错、配置问题、数据格式不匹配会接踵而至,让人寸步难行。这太正常了,我最初用mmdetection做工业缺陷检测时,光是让模型跑起来就花了整整一周,踩遍了能想到的所有坑。
这篇文章不会给你一个“万能模板”,因为每个人的数据、环境和需求都不同。相反,我会带你走一遍完整的思维流程和实操路径,从环境搭建、数据准备、配置解读、训练调试到模型测试,重点剖析那些官方文档不会细说,但实际开发中几乎必然遇到的“暗礁”。我们的目标是:让你不仅能跑通流程,更能理解每一步背后的逻辑,从而具备独立解决新问题的能力。无论你是要检测遥感图像中的船舶、医疗影像中的病灶,还是生产线上的零件,这套方法都能为你提供一个坚实可靠的起点。
1. 环境构筑:避开依赖冲突的深水区
很多人第一步就卡在了环境安装上。PyTorch、CUDA、mmcv、mmdetection版本之间存在着严格的兼容性矩阵,一步选错,后面全是坑。我的经验是:不要追求最新版本,而应追求最稳定的组合。
首先,确定你的硬件基础。打开终端,使用 nvidia-smi 查看CUDA版本。假设你看到的是 CUDA Version: 11.7,那么你的PyTorch版本就应该围绕CUDA 11.7来选择。
一个经过大量项目验证的稳定组合如下:
# 创建并激活虚拟环境(强推,避免污染系统环境)
conda create -n mmdet python=3.8 -y
conda activate mmdet
# 安装PyTorch(务必去官网核对与CUDA版本的对应命令)
# 以CUDA 11.7为例
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
接下来是mmcv和mmdetection。这里是最容易出问题的地方。mmcv有两个版本:mmcv(完整版)和mmcv-lite(精简版)。对于训练和测试,我们需要完整版。但直接 pip install mmcv 很可能安装的是不兼容的版本。
正确做法是,根据你的PyTorch和CUDA版本,去MMCV官方文档查找对应的安装命令。例如,对于上述环境,命令可能是:
pip install -U openmim
mim install mmcv==2.0.0
注意:
openmim是OpenMMLab推荐的包管理工具,它能自动处理很多依赖关系,比直接用pip更可靠。
最后安装mmdetection。建议从GitHub克隆最新稳定版本,而非直接pip安装,这样方便查看源码和调试。
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# “-e” 表示以可编辑模式安装,这样你修改项目内的代码会立即生效,对调试至关重要。
安装完成后,用一个简单的脚本验证核心功能是否正常:
import torch, mmdet, mmcv
print(f"PyTorch 版本: {torch.__version__}")
print(f"CUDA 是否可用: {torch.cuda.is_available()}")
print(f"mmdetection 版本: {mmdet.__version__}")
print(f"mmcv 版本: {mmcv.__version__}")
如果一切正常,恭喜你,最难的一关已经过了。如果报错,请务必根据错误信息,回溯检查上述每一步的版本号是否严格匹配。
2. 数据准备:构建模型能“读懂”的燃料
模型训练的本质是“数据驱动”。你的数据格式决定了配置的复杂程度。mmdetection原生支持COCO、PASCAL VOC等格式。对于自定义数据集,我强烈推荐转换为COCO格式,因为它结构清晰、支持丰富的信息标注(如分割掩码、关键点),且mmdetection对其支持最为完善。
假设你的原始数据是一堆图片和对应的标注文件(可能是YOLO的txt格式,或LabelImg生成的XML格式)。你需要编写一个转换脚本。以下是一个将类似VOC XML格式转换为COCO JSON的核心思路,你可以根据自己的标注工具输出进行调整:


2万+

被折叠的 条评论
为什么被折叠?



