开源计算机视觉算法体系OpenMMLab的核心使用方法,OpenMMLab是商汤联合港中文等机构推出的CV开源体系,核心是配置文件驱动,包含MMDetection(目标检测)、MMClassification(图像分类)、MMSegmentation(语义分割)等数十个专用算法库,所有子库都依赖统一的基础核心库MMEngine,使用逻辑高度统一。
下面从环境搭建(通用)、核心使用示例(以最常用的MMDetection目标检测为例)、自定义基础修改、常用子库快速上手四个维度讲解,步骤简洁可直接复刻,新手也能快速入门。
一、前置准备
- 操作系统:Linux(推荐,服务器首选)、Windows10/11、macOS(M1/M2均可)
- 基础环境:Python 3.8~3.11(推荐3.9)、PyTorch 1.13~2.2(必须保证CUDA和PyTorch版本兼容,GPU用户必装CUDA,CPU用户可跳过)
- 硬件:GPU(NVIDIA,显存≥8G,推荐16G+,训练必备)、CPU(仅推理/小数据集测试)
二、通用环境搭建(所有OpenMMLab子库都需要)
核心依赖:MMEngine(基础框架,提供训练/测试/日志等核心功能)、MMCV(计算机视觉通用工具库,OpenMMLab的核心依赖,分mmcv-lite(轻量版,仅推理)和mmcv(完整版,训练/推理),必须装完整版)。
步骤1:安装PyTorch(优先GPU版本)
推荐通过PyTorch官方地址获取对应命令,示例(CUDA 11.8,PyTorch 2.0.1,最稳定组合):
# GPU版本(CUDA 11.8)pip3installtorch==2.0.1torchvision==0.15.2torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118# CPU版本(仅测试/推理,不推荐训练)pip3installtorch==2.0.1torchvision==0.15.2torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cpu验证PyTorch安装成功:运行Python,输入以下代码无报错即成功:
importtorchprint(torch.cuda.is_available())# GPU用户输出True,CPU用户输出False步骤2:安装MMEngine(所有子库的基础)
直接通过pip安装最新稳定版:
pipinstallmmengine步骤3:安装MMCV(核心视觉工具库,关键:匹配PyTorch和CUDA版本)
MMCV提供了预编译包(推荐,无需编译,速度快),通过以下命令自动匹配版本安装完整版:
# 自动匹配PyTorch和CUDA,安装最新稳定版MMCVpipinstall"mmcv>=2.0.0"-f https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/index.html替换说明:如果你的CUDA是12.1、PyTorch是2.2.0,将上述命令中的cu118改为cu121,torch2.0.0改为torch2.2.0即可,预编译包地址可查所有支持的版本。
验证MMCV安装成功:Python中输入import mmcv无报错即成功。
三、核心使用示例(以MMDetection为例,目标检测最常用)
MMDetection是OpenMMLab最经典的子库,支持YOLO、Faster R-CNN、RetinaNet等几乎所有主流目标检测算法,使用逻辑可直接迁移到其他子库(分类/分割)。
步骤1:安装MMDetection
两种方式,新手推荐pip安装(快速),开发/改源码推荐源码安装:
# 方式1:pip安装最新稳定版(推荐新手)pipinstallmmdet# 方式2:源码安装(需改源码/贡献代码,克隆仓库后安装)gitclone https://github.com/open-mmlab/mmdetection.gitcdmmdetection pipinstall-e.# 开发模式安装,修改源码无需重新安装验证安装成功:运行以下命令,无报错即成功:
mim run mmdet check_install(mim是OpenMMLab的专用工具,安装MMEngine后自动附带,用于快速运行/安装OpenMMLab库)
步骤2:核心操作(推理/测试/训练,配置文件驱动)
OpenMMLab的核心是配置文件(.py),所有算法参数、数据集路径、训练策略都在配置文件中,无需修改核心源码,仅需调整配置文件即可,这是其最核心的设计优势。
操作1:快速推理(用预训练模型做目标检测,新手首选)
无需训练,直接用官方预训练模型对图片/视频做检测,分命令行方式(简单)和Python脚本方式(灵活,可集成到自己的项目)。
方式1:命令行推理(一行代码)
# 用Faster R-CNN预训练模型检测单张图片,输出结果保存为output.jpgmim run mmdet demo/image_demo.py\demo/demo.jpg\# 测试图片路径(MMDetection仓库自带)configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py\# 算法配置文件https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster-rcnn_r50_fpn_1x_coco/faster-rcnn_r50_fpn_1x_coco_20200130-047c8118.pth\# 预训练权重地址--out-dir outputs\# 结果保存目录--device cuda:0# 运行设备(GPU用cuda:0,CPU用cpu)结果:在outputs文件夹中生成output.jpg,图片上会标注检测到的目标(如人、车、猫)和置信度。
方式2:Python脚本推理(灵活集成)
适合将OpenMMLab的模型集成到自己的项目中,核心步骤:加载配置→加载模型→预处理图片→推理→后处理:
frommmdet.apisimportinit_detector,inference_detectorimportmmcv# 1. 配置文件和预训练权重路径config_file='configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py'checkpoint_file='faster-rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'# 先下载到本地device='cuda:0'# CPU用'cpu'# 2. 初始化模型(自动加载配置和权重,完成模型构建)model=init_detector(config_file,checkpoint_file,device=device)# 3. 推理单张图片img='demo/demo.jpg'result=inference_detector(model,img)# 4. 可视化结果并保存model.show_result(img,result,out_file='outputs/script_output.jpg',score_thr=0.5)# score_thr是置信度阈值,过滤低置信度目标预训练权重下载:命令行推理时会自动下载,脚本方式可手动从MMDetection模型库下载。
操作2:测试模型精度(在数据集上评估AP/mAP等指标)
用预训练模型或自己训练的模型,在COCO/自定义数据集上评估检测精度,核心命令:
# 测试Faster R-CNN模型在COCO验证集的精度,保存测试结果mim run mmdettest\configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py\# 配置文件faster-rcnn_r50_fpn_1x_coco_20200130-047c8118.pth\# 模型权重--device cuda:0\--eval bbox# 评估指标(目标检测用bbox,实例分割用bbox segm)输出:会打印出COCO标准的AP指标(如AP@0.5、AP@0.5:0.95等),即模型的检测精度。
操作3:训练自定义模型(基于COCO/自定义数据集)
训练的核心是修改配置文件(指定数据集路径、训练策略、模型参数),这里以在COCO数据集上微调Faster R-CNN为例,新手可先基于官方数据集训练,再迁移到自定义数据集。
步骤1:准备数据集(COCO)
官方COCO数据集包含训练集/验证集/测试集,可通过MMDetection文档下载,解压后目录结构如下:
coco/ ├── annotations/ # 标注文件(instances_train2017.json、instances_val2017.json等) ├── train2017/ # 训练图片 ├── val2017/ # 验证图片 └── test2017/ # 测试图片步骤2:修改配置文件(关键)
复制官方配置文件,避免修改原文件:
cpconfigs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py my_config.py修改my_config.py中的数据集路径和训练参数(核心修改项):
# 1. 修改数据集根路径和标注文件路径data_root='/path/to/your/coco/'# 你的COCO数据集根目录train_ann_file='annotations/instances_train2017.json'train_img_prefix='train2017/'val_ann_file='annotations/instances_val2017.json'val_img_prefix='val2017/'# 2. 可选:修改训练参数train_cfg=dict(# 训练策略type='EpochBasedTrainLoop',# 按轮次训练max_epochs=12,# 总训练轮次(官方1x是12轮)val_interval=1)# 每1轮验证一次optim_wrapper=dict(# 优化器type='OptimWrapper',optimizer=dict(type='SGD',lr=0.02,momentum=0.9,weight_decay=0.0001),clip_grad=None)# 3. 可选:修改批次大小(根据GPU显存调整,8G显存设为2,16G设为4)data=dict(samples_per_gpu=2,# 每个GPU的批次大小workers_per_gpu=2)# 每个GPU的数据加载线程数步骤3:开始训练(命令行/脚本)
命令行方式(推荐):
# 单GPU训练mim run mmdet train\my_config.py\# 自定义配置文件--device cuda:0\--work-dir work_dirs/faster_rcnn# 训练日志/模型权重保存目录多GPU训练(服务器推荐,速度更快):
# 2个GPU训练bashtools/dist_train.sh my_config.py2--work-dir work_dirs/faster_rcnn训练过程:会自动打印训练日志(损失、学习率、验证精度),并在work_dirs中保存:
latest.pth:最新训练权重epoch_x.pth:第x轮的训练权重log.json/train.log:训练日志vis_data:可视化结果(可选)
四、自定义基础修改(满足个性化需求)
OpenMMLab的设计理念是**“模块化、可配置、易扩展”,无需修改核心源码,仅需通过配置文件继承/修改或自定义小模块**即可实现需求,新手常用的自定义修改有:
- 更换预训练模型:在配置文件中修改
pretrained参数,如用ResNet101替换ResNet50,仅需修改骨干网络配置:model=dict(backbone=dict(type='ResNet',depth=101,# 50→101pretrained='torchvision://resnet101',# 加载TorchVision预训练权重norm_cfg=dict(type='BN',requires_grad=True))) - 调整学习率/批次大小:根据GPU数量和显存调整,遵循线性缩放原则(如2个GPU,批次大小从2→4,学习率从0.02→0.04)。
- 自定义数据集:将COCO数据集替换为自己的数据集(如VOC/自定义标注),需将标注文件转换为COCO格式(推荐),或自定义数据集加载器,参考MMDetection自定义数据集文档。
- 添加新的算法模块:如自定义骨干网络/检测头,参考OpenMMLab拓展指南(进阶)。
五、其他常用子库快速上手(逻辑与MMDetection一致)
OpenMMLab的所有子库都遵循**“MMEngine+MMCV+专用库”**的依赖体系,安装和使用逻辑与MMDetection完全一致,仅需替换专用库和配置文件即可,以下是最常用的子库:
| 子库名称 | 用途 | 安装命令 | 核心模型库地址 |
|---|---|---|---|
| MMClassification | 图像分类/特征提取 | pip install mmcls | MMCls模型库 |
| MMSegmentation | 语义分割/全景分割 | pip install mmseg | MMSeg模型库 |
| MMYOLO | 轻量YOLO系列(v3/v5/v7/v8) | pip install mmyolo | MMYOLO模型库 |
| MMPose | 人体姿态估计 | pip install mmpose | MMPose模型库 |
使用示例(MMClassification图像分类):
# 用ResNet50预训练模型分类单张图片mim run mmcls demo/image_demo.py\demo/demo.JPEG\configs/resnet/resnet50_8xb32_in1k.py\https://download.openmmlab.com/mmclassification/v0/resnet/resnet50_8xb32_in1k_20210831-ea4938fc.pth\--out-dir outputs六、OpenMMLab专用工具mim(重点)
mim是OpenMMLab官方的命令行工具,安装MMEngine后自动附带,能大幅简化安装/运行/训练/测试操作,核心命令:
# 1. 安装OpenMMLab子库miminstallmmdet mmcls mmseg# 一键安装多个子库# 2. 运行子库的demo/训练/测试mim run mmdet demo/image_demo.py[参数]# 推理mim run mmdet train[参数]# 训练mim run mmdettest[参数]# 测试# 3. 下载预训练权重mim download mmdet faster-rcnn_r50_fpn_1x_coco --dest ./checkpoints# 4. 查看子库版本/信息mim info mmdet七、避坑要点(新手必看)
- 版本兼容:MMCV、MMEngine、PyTorch、CUDA必须版本匹配,这是最常见的报错原因,优先用预编译包安装MMCV,避免手动编译。
- GPU显存:训练时如果报“CUDA out of memory”,降低
samples_per_gpu(批次大小),或使用fp16混合精度训练(在配置文件中添加fp16 = dict(loss_scale='dynamic'))。 - 配置文件继承:OpenMMLab的配置文件支持多层继承(如
_base_ = ['./faster_rcnn_r50_fpn.py', './coco_dataset.py']),修改时需注意继承关系,避免参数覆盖。 - 数据集格式:优先将自定义数据集转换为COCO格式(JSON标注),因为OpenMMLab的所有子库都对COCO格式做了最优支持,转换工具可参考img2dataset或手动编写脚本。
- Windows系统注意:Windows下多GPU训练可能存在兼容问题,优先用单GPU训练,且路径分隔符用
/或\\。
八、学习资源(官方+优质)
- 官方文档(最权威):
- OpenMMLab主站:https://openmmlab.com/
- MMEngine文档:https://mmengine.readthedocs.io/zh_CN/latest/
- MMDetection文档:https://mmdetection.readthedocs.io/zh_CN/latest/
- 官方教程:OpenMMLab提供了大量入门教程和实战案例,见OpenMMLab学院
- GitHub仓库:所有子库的源码和示例都在GitHub,地址:https://github.com/open-mmlab
- 社区支持:知乎/CSDN有大量OpenMMLab实战教程,官方QQ群/微信群可获取实时技术支持。
总结
OpenMMLab的核心使用逻辑可概括为3个统一,掌握后能快速迁移到所有子库:
- 依赖统一:所有子库都依赖MMEngine+MMCV,只需一次搭建通用环境;
- 使用统一:所有子库都遵循配置文件驱动,推理/训练/测试的命令行/脚本逻辑完全一致;
- 拓展统一:所有子库都基于Registry注册器实现模块化拓展,自定义模块的方法完全相同。
新手入门建议:先搭环境→用预训练模型做推理→基于官方数据集做简单训练→修改配置文件迁移到自定义数据集,逐步从“使用”过渡到“拓展”。