简介
mmsegmentation(简称 mmseg)是 OpenMMLab 开源的计算机视觉库,专注于语义分割任务。它基于 PyTorch 实现,支持多种经典和前沿的语义分割模型(如 FCN、PSPNet、DeepLabV3+、UNet 等),并提供模块化设计,便于快速实验和部署。以下是 mmseg 的详细指南:
1. 安装 mmsegmentation
-
环境要求
Python 3.7+
PyTorch 1.8+
CUDA(可选,用于 GPU 加速) -
通过 pip 安装(推荐)
# 安装基础依赖
pip install torch torchvision
# 安装 mmsegmentation(自动安装 MMEngine 和 MMCV)
pip install mmsegmentation
- 通过源码安装(最新版本)
# 克隆仓库
git clone https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
# 安装依赖(推荐使用 conda)
conda create -n mmseg python=3.8
conda activate mmseg
pip install -r requirements/build.txt
pip install -v -e . # 开发模式安装
2. 核心功能与示例
(1) 快速推理(Inference)
使用预训练模型对图像进行语义分割:
from mmseg.apis import init_segmentor, inference_segmentor, show_result_pyplot
from mmseg.datasets.pipelines import Compose
import mmcv
# 配置文件路径(示例:PSPNet 在 Cityscapes 上的配置)
config_file = 'configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py'
# 预训练模型权重路径
checkpoint_file = 'https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'
# 初始化模型
model = init_segmentor(config_file, checkpoint_file, device='cuda:0')
# 读取图像
img = 'demo/demo.png' # 替换为你的图像路径
result = inference_segmentor(model, img)
# 可视化结果
show_result_pyplot(model, img, result, grayscale=False)
(2) 训练自定义模型
准备数据集
支持标准数据集格式(如 COCO、Pascal VOC、Cityscapes)。
需将数据集转换为 mmseg 要求的格式(通过脚本或手动整理)。
修改配置文件
以 configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py 为例:
# 修改数据集路径
data_root = '/path/to/your/dataset'
train_dataloader = dict(
dataset=dict(
data_root=data_root,
ann_file=data_root + '/train.txt', # 训练集标注文件
img_dir=data_root + '/images/', # 图像目录
...
)
)
# 修改训练轮次(epochs)
train_cfg = dict(max_epochs=100)
启动训练
# 单 GPU 训练
python tools/train.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py
# 多 GPU 训练(使用 slurm 或 torch.distributed)
bash tools/dist_train.sh configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py 8
(3) 评估模型
python tools/test.py \
configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \
checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \
--eval mIoU
3. 关键组件解析
(1) 模型架构
- Backbone:提取特征的骨干网络(如 ResNet、MobileNet)。
- Neck:特征融合模块(如 FPN、ASPP)。
- Head:预测分割结果的头部(如 FCNHead、PSPHead)。
(2) 数据流水线(Pipeline)
在配置文件中定义数据预处理流程:
train_pipeline = [
dict(type='LoadImageFromFile'), # 加载图像
dict(type='LoadAnnotations'), # 加载标注
dict(type='Resize', img_scale=(512, 1024), ratio_range=(0.5, 2.0)), # 随机缩放
dict(type='RandomCrop', crop_size=(512, 1024), cat_max_ratio=0.75), # 随机裁剪
dict(type='RandomFlip', prob=0.5), # 随机翻转
dict(type='PackSegInputs') # 打包为模型输入
]
(3) 损失函数
支持多种损失函数(如交叉熵、Dice Loss、Focal Loss):
model = dict(
decode_head=dict(
type='FCNHead',
loss_decode=dict(type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)
)
)
4. 高级功能
(1) 自定义数据集
准备标注文件:
格式为 .txt 或 .json,每行包含 图像路径 标注路径。
示例:
data/images/0001.jpg data/annotations/0001.png
data/images/0002.jpg data/annotations/0002.png
修改配置文件:
dataset_type = 'CustomDataset'
data_root = 'data/'
train_dataloader = dict(
dataset=dict(
type=dataset_type,
data_root=data_root,
ann_file='train.txt',
img_dir='images/',
seg_map_dir='annotations/'
)
)
(2) 导出 ONNX 模型
python tools/pytorch2onnx.py \
configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \
checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \
--output-file pspnet.onnx \
--shape 512 1024
(3) 使用 TensorRT 加速
将 ONNX 模型转换为 TensorRT 引擎:
trtexec --onnx=pspnet.onnx --saveEngine=pspnet.engine --fp16
在推理代码中加载引擎文件。
5. 总结
优势:
- 模块化设计、支持多种模型、丰富的预训练权重。
- 适用场景:语义分割任务(如自动驾驶场景理解、医学图像分割)。
- 扩展性:可轻松替换 Backbone、Head 或损失函数。
官方资源:
- GitHub: https://github.com/open-mmlab/mmsegmentation
- 文档: https://mmsegmentation.readthedocs.io
- 模型库: https://mmsegmentation.readthedocs.io/en/latest/model_zoo.html