MMSegmentation 1.x 深度实战指南:OpenMMLab 语义分割工具箱的架构、安装、推理与模型库全解析
MMSegmentation 1.x 深度实战指南OpenMMLab 语义分割工具箱的架构、安装、推理与模型库全解析【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation导读本文以 MMSegmentation 仓库根目录 README.md 为主体系统梳理这套基于 PyTorch 的语义分割工具箱从 OpenMMLab 生态定位、v1.x 模块化架构设计到 v1.2.x 新特性开放词汇分割 SAN、单目深度估计 VPD/Adabins 等、环境安装、模型推理与完整模型库清单并结合仓库源码如 mmseg/apis/inference.py、mmseg/models、demo/image_demo.py逐层印证。读完本文你将掌握 MMSegmentation 的安装验证流程、init_model/inference_model推理 API 与image_demo.py命令行用法并能依据模型库快速定位适合自己任务的骨干网络、分割头与数据集组合。说明上图resources/seg_demo.gif为 README 原文使用的语义分割推理演示图展示模型对街景图像逐像素类别标注的效果。一、项目定位OpenMMLab 生态中的语义分割工具箱MMSegmentation 是一个基于 PyTorch 的开源语义分割工具箱Toolbox与基准Benchmark是 OpenMMLab 项目体系的组成部分。其目标是为社区提供一个灵活且标准化的工具既能复现既有分割方法也支持开发者构建自己的新方法——README 的 Acknowledgement 一节即明确表达了这一愿景。在 OpenMMLab 家族中MMSegmentation 与 MMEngine 的 engine 一节因此安装时首先需要安装 MMEngine 与 MMCV。版本信息与分支策略README 宣布 v1.0.0 正式发布后main分支成为主分支开发分支为dev-1.x上一版本的稳定分支保留为0.x。从 mmseg/version.py 可以看到当前仓库版本号为1.2.2README 的 Whats New 部分宣布 v1.2.0 于 2023-10-12 发布。关于运行环境README 声明main分支兼容 PyTorch 1.6而 安装指南 给出的推荐环境更为明确支持 Linux、Windows 与 macOS要求Python 3.7、CUDA 10.2、PyTorch 1.8。四大核心特性README 归纳了 MMSegmentation 的四项主要特性统一基准Unified Benchmark为多种语义分割方法提供统一的评测工具箱保证方法之间可公平对比。模块化设计Modular Design将语义分割框架拆解为独立组件骨干网络、颈部、解码头、损失函数等通过组合不同模块即可快速构建自定义分割框架。多方法开箱即用Support of multiple methods out of box直接支持 PSPNet、DeepLabV3、PSANet、DeepLabV3 等经典与主流分割框架。高效率High efficiency训练速度相比其他代码库更快或相当README 原文表述未提供具体基准数字。二、v1.2.0 新特性亮点从语义分割走向多任务README 的 Whats New 部分记录了从 1.1.0 到 1.2.0 版本的主要更新这些内容也直接体现在仓库目录结构中新特性仓库对应位置说明开放词汇语义分割 SANconfigs/san/README.mdSide Adapter NetworkCVPR2023无需固定类别集合即可分割任意文本描述的物体单目深度估计 VPDconfigs/vpd/README.mdVersatile Diffusion 先验用于深度估计ICCV2023在 mmseg/models/backbones/vpd.py 中可以看到其基于扩散模型 UNet 的骨干实现单目深度估计 Adabinsprojects/Adabins/README.md以独立 Projects 形式提供开放词汇分割 CAT-Segprojects/CAT-Seg/README.mdCost Aggregation Transformer社区维护项目实时分割 PP-MobileSegprojects/pp_mobileseg/README.md面向移动端的实时语义分割算法社区维护项目值得留意的是深度估计任务的引入让 MMSegmentation 从纯语义分割扩展到了像素级稠密预测的更大范畴。从 mmseg/models/segmentors/depth_estimator.py 的源码结构可以看到仓库新增了DepthEstimator分割器基类配套的 mmseg/models/decode_heads/vpd_depth_head.py 中使用了SiLogLoss作为深度回归损失且 mmseg/evaluation/metrics/depth_metric.py 提供了深度评估指标这印证了多任务支持是 v1.2.x 的重要方向。三、源码级架构MMSeg 的七大组成模块overview.md 将 MMSegmentation 划分为七个主要部分apis、structures、datasets、models、engine、evaluation和visualization。结合仓库目录逐一看模块仓库目录职责apismmseg/apis提供高层推理 APIinit_model、inference_model、show_result_pyplot见 mmseg/apis/inference.pystructuresmmseg/structures定义分割数据结构SegDataSampledatasetsmmseg/datasets支持多种分割数据集transforms子模块包含大量数据增强变换modelsmmseg/models分割器主体包含 segmentors、data_preprocessors、backbones、necks、decode_heads、lossesenginemmseg/engine扩展 MMEngine 的运行时组件如 optimizers、hooksevaluationmmseg/evaluation提供评测指标mmseg/evaluation/metrics 下含iou_metric.py、citys_metric.py、depth_metric.pyvisualizationmmseg/visualization分割结果可视化models 模块的内部组成models是分割器最核心的部分README 与 overview 将其拆解为以下组件均可在 mmseg/models 下找到对应源码目录segmentors定义所有分割模型类。从源码结构看包括 encoder_decoder.py、cascade_encoder_decoder.py、multimodal_encoder_decoder.py、depth_estimator.py 以及支持测试时增强的 seg_tta.py。data_preprocessors对模型输入数据做预处理归一化、padding 等见 mmseg/models/data_preprocessor.py。backbones将图像转换为特征图的骨干网络如 ResNet、Swin Transformer 等。necks连接骨干与解码头的颈部组件FPN、JPU、MLANeck 等见 mmseg/models/necks。decode_heads以特征图为输入、输出分割预测的解码头仓库中提供 36 种。losses各类损失函数见 mmseg/models/losses。以编码器-解码器结构为例EncoderDecoder在推理时依次执行extract_feat骨干提特征→encode_decodeneck decode_head 预测→postprocess_result还原到原图尺寸的调用链其数据流可参考仓库资源图上图resources/encoder_decoder_dataflow.png直观展示了 EncoderDecoder 结构中骨干、颈部与解码头之间的特征流动关系。四、模型库总览骨干网络、分割方法、解码头、数据集与损失README 用一张大表完整列出了 MMSegmentation 支持的组件生态这是挑选模型组合的核心索引。以下内容完整继承自 README 的 Benchmark and model zoo 一节文件链接均指向仓库内的真实路径。支持的骨干网络Supported backbones骨干网络仓库位置ResNet (CVPR2016)mmseg/models/backbones/resnet.pyResNeXt (CVPR2017)mmseg/models/backbones/resnext.pyHRNet (CVPR2019)configs/hrnetResNeSt (ArXiv2020)configs/resnestMobileNetV2 (CVPR2018)configs/mobilenet_v2MobileNetV3 (ICCV2019)configs/mobilenet_v3Vision Transformer (ICLR2021)configs/vitSwin Transformer (ICCV2021)configs/swinTwins (NeurIPS2021)configs/twinsBEiT (ICLR2022)configs/beitConvNeXt (CVPR2022)configs/convnextMAE (CVPR2022)configs/maePoolFormer (CVPR2022)configs/poolformerSegNeXt (NeurIPS2022)configs/segnext支持的分割方法Supported methods从最新到经典依次为SAN、VPD、DDRNet、PIDNet、Mask2Former、MaskFormer、K-Net、SegFormer、Segmenter、DPT、SETR、STDC、BiSeNetV2、CGNet、PointRend、DNLNet、OCRNet、ISANet、Fast-SCNN、FastFCN、GCNet、ANN、EMANet、CCNet、DMNet、Semantic FPN、DANet、APCNet、NonLocal Net、EncNet、DeepLabV3、UPerNet、ICNet、PSANet、BiSeNetV1、DeepLabV3、PSPNet、ERFNet、UNet、FCN。这些方法均有对应的 configs 目录与 README 说明如 configs/san、configs/mask2former、configs/pspnet 等。支持的解码头Supported Head仓库 mmseg/models/decode_heads 下提供 36 种解码头实现包括 ANN_Headann_head.py、APC_Head、ASPP_Head、CC_Head、DA_Head、DDR_Head、DM_Head、DNL_Head、DPT_HEAD、EMA_Head、ENC_Head、FCN_Headfcn_head.py、FPN_Head、GC_Head、LightHam_Head、ISA_Head、Knet_Head、LRASPP_Head、mask2former_Head、maskformer_Head、NL_Head、OCR_Head、PID_Head、point_Head、PSA_Head、PSP_Headpsp_head.py、SAN_Head、segformer_Head、segmenter_mask_Head、SepASPP_Head、SepFCN_Head、SETRMLAHead_Head、SETRUP_Head、STDC_Head、Uper_Head、VPDDepth_Head。支持的数据集Supported datasetsCityscapes、PASCAL VOC、ADE20K、Pascal Context、COCO-Stuff 10k、COCO-Stuff 164k、CHASE_DB1、DRIVE、HRF、STARE、Dark Zurich、Nighttime Driving、LoveDA、Potsdam、Vaihingen、iSAID、Mapillary Vistas、LEVIR-CD、BDD100K、NYU、HSIDrive20。各数据集的准备流程见 docs/en/user_guides/2_dataset_prepare.md。支持的损失函数Supported lossmmseg/models/losses 下包含boundary_loss、cross_entropy_losscross_entropy_loss.py、dice_loss、focal_loss、huasdorff_distance_loss、kldiv_loss、lovasz_loss、ohem_cross_entropy_loss、silog_loss、tversky_loss。评测指标与模型库所有方法与数据集的评测结果汇总在 docs/en/model_zoo.mdModel Zoo。语义分割通常采用Mean IoUmIoU与Pixel Accuracy作为评测指标overview 中说明对应实现可查看 mmseg/evaluation/metrics/iou_metric.py。常见问题解答见 docs/en/notes/faq.md。五、安装指南从零搭建 MMSegmentation 环境README 将安装与数据集准备指引到 docs/en/get_started.md该文档给出了完整的安装流程。下面按官方推荐路径整理命令均来自仓库文档原文可直接复制执行。5.1 前置条件PyTorch 环境准备MMSegmentation 要求 Python 3.7、CUDA 10.2 与 PyTorch 1.8。如果你已经安装过 PyTorch可直接跳到安装 MMCV 一节。# Step 0. 安装 Miniconda官网下载即可 # Step 1. 创建并激活 conda 环境 conda create --name openmmlab python3.8 -y conda activate openmmlab # Step 2. 按 PyTorch 官方指引安装 PyTorch # GPU 平台 conda install pytorch torchvision -c pytorch # CPU 平台 conda install pytorch torchvision cpuonly -c pytorch5.2 最佳实践安装推荐Step 0使用 MIM 安装 MMEngine 与 MMCV。MIM 会自动处理 MMCV 与 PyTorch/CUDA 版本的依赖关系pip install -U openmim mim install mmengine mim install mmcv2.0.0Step 1安装 MMSegmentation两种方式按用途选择源码安装推荐用于开发/研究以可编辑模式editable mode安装本地代码修改即时生效无需重装git clone -b main https://github.com/open-mmlab/mmsegmentation.git cd mmsegmentation pip install -v -e . # -v 表示输出更多安装信息 # -e 表示以可编辑模式安装本地代码改动无需重新安装即生效pip 安装作为依赖/第三方包使用pip install mmsegmentation1.0.05.3 验证安装跑通第一个推理 demoStep 1使用 MIM 下载 PSPNet 在 Cityscapes 上的配置与权重文件mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest .下载完成后当前目录会出现两个文件配置文件pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py与权重文件pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth。Step 2运行推理验证源码安装方式python demo/image_demo.py demo/demo.png configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg执行后会在当前目录生成result.jpg图像中所有物体的分割掩码已叠加绘制。该命令对应的实现即仓库中的 demo/image_demo.py。从源码看其完整参数包括img输入图像、config配置文件、checkpoint权重文件、--out-file输出路径、--device默认cuda:0、--opacity掩码透明度默认 0.5取值 (0, 1]、--with-labels是否显示类别标签、--title图像标识。当指定--device cpu时脚本会调用revert_sync_batchnorm将 SyncBN 转换为普通 BN 以便 CPU 推理。pip 安装方式的 Python 验证代码直接粘贴到解释器from mmseg.apis import inference_model, init_model, show_result_pyplot import mmcv config_file pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py checkpoint_file pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth # 由配置文件和权重文件构建模型 model init_model(config_file, checkpoint_file, devicecuda:0) # 测试单张图像并展示结果 img demo/demo.png # 或 img mmcv.imread(img)只会加载一次 result inference_model(model, img) # 在新窗口中可视化结果 show_result_pyplot(model, img, result, showTrue) # 或将可视化结果保存为图像文件 # 可通过 opacity 调整分割掩码的透明度取值 (0, 1] show_result_pyplot(model, img, result, showTrue, out_fileresult.jpg, opacity0.5) # 测试视频并逐帧展示结果 video mmcv.VideoReader(video.mp4) for frame in video: result inference_model(model, frame) show_result_pyplot(model, frame, result, wait_time1)5.4 定制化安装场景CUDA 版本选择Ampere 架构 GPU如 GeForce 30 系列、A100必须使用 CUDA 11老 GPU 上 CUDA 11 向后兼容但 CUDA 10.2 兼容性更好且更轻量。按最佳实践安装时无需本地编译 CUDA 代码安装 CUDA 运行时库即可若需从源码编译 MMCV 或开发 CUDA 算子则需要安装与 PyTorch CUDA 版本匹配的完整 CUDA Toolkit。不使用 MIM 安装 MMCV需按 PyTorch 与 CUDA 版本手动指定 find-url。例如安装面向 PyTorch 1.10.x、CUDA 11.3 构建的 mmcv2.0.0pip install mmcv2.0.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10/index.html纯 CPU 环境MMSegmentation 可在纯 CPU 环境下构建CPU 模式下同样支持训练需 MMCV 2.0.0、测试与推理。Google ColabColab 通常已预装 PyTorch只需安装 MMCV 与 MMSegmentation# Step 1. 安装 MMCV !pip3 install openmim !mim install mmengine !mim install mmcv2.0.0 # Step 2. 源码安装 MMSegmentation !git clone https://github.com/open-mmlab/mmsegmentation.git %cd mmsegmentation !git checkout main !pip install -e . # Step 3. 验证 import mmseg print(mmseg.__version__) # 示例输出: 1.0.0Jupyter 中!用于调用外部可执行程序%cd是切换 Python 工作目录的 magic 命令。Docker仓库提供 docker/Dockerfile要求 Docker 版本 19.03# 构建 PyTorch 1.11、CUDA 11.3 镜像其他版本可自行修改 Dockerfile docker build -t mmsegmentation docker/ # 运行挂载数据目录 docker run --gpus all --shm-size8g -it -v {DATA_DIR}:/mmsegmentation/data mmsegmentation可选依赖 GDAL用于读取复杂格式与超大型遥感影像conda install GDAL5.5 安装排障若安装过程遇到问题先查阅 FAQ 页面。六、推理 API 底层解析init_model 与 inference_model 的调用链README 与 get_started 中反复出现init_model/inference_model/show_result_pyplot三个高层 API其实现位于 mmseg/apis/inference.py。理解其底层行为有助于排查问题init_model(config, checkpoint, device)先用Config.fromfile解析配置文件构建模型前会做几处关键处理清空骨干的init_cfg避免加载 checkpoint 时重复初始化、置空model.pretrained与model.train_cfg然后通过MODELS.build从注册表构建分割器最后用load_checkpoint加载权重。从 checkpoint 的meta中恢复dataset_meta类别名与调色板若 checkpoint 不含类别信息则会依据decode_head.num_classes推断数据集默认回退到 Cityscapes。inference_model(model, img)将图像送入model.test_step(data)并在torch.no_grad()下执行返回SegDataSample单张或SampleList批量。这也解释了为何推理时模型需先model.eval()。show_result_pyplot(model, img, result, ...)内部构造SegLocalVisualizer并调用add_datasample支持opacity、with_labels、out_file等可视化参数。除了 Python API仓库还提供了更高层的一体化推理封装MMSegInferencermmseg/apis/mmseg_inferencer.py与遥感图像推理器mmseg/apis/remote_sense_inferencer.py并有对应示例脚本 demo/image_demo_with_inferencer.py 与 demo/rs_image_inference.py。配置文件示例PSPNet Cityscapes推理时用到的配置文件 configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py 非常精简因为它通过_base_继承机制组合了四个基础配置_base_ [ ../_base_/models/pspnet_r50-d8.py, ../_base_/datasets/cityscapes.py, ../_base_/default_runtime.py, ../_base_/schedules/schedule_40k.py ] crop_size (512, 1024) data_preprocessor dict(sizecrop_size) model dict(data_preprocessordata_preprocessor)这正体现了 README 所说的模块化设计模型结构configs/base/models/pspnet_r50-d8.py、数据集configs/base/datasets/cityscapes.py、运行时configs/base/default_runtime.py与训练计划configs/base/schedules/schedule_40k.py各自独立按需组合。关于配置文件的完整语法可深入 docs/en/user_guides/1_config.md。七、学习路线官方教程导航README 的 Tutorial 一节按四个层次组织了全部官方教程下表链接已统一转换为仓库根目录相对路径阶段教程Get StartedMMSeg overview MMSeg Installation FAQMMSeg Basic TutorialTutorial 1: Learn about Configs Tutorial 2: Prepare datasets Tutorial 3: Inference with existing models Tutorial 4: Train and test with existing models Tutorial 5: Model deployment Useful Tools Feature Map Visualization VisualizationMMSeg Detail TutorialMMSeg Dataset MMSeg Models MMSeg Dataset Structures MMSeg Data Transforms MMSeg Dataflow MMSeg Training Engine MMSeg EvaluationMMSeg Development TutorialAdd New Datasets Add New Metrics Add New Modules Add New Data Transforms Customize Runtime Settings Training Tricks NPU (HUAWEI Ascend) 0.x → 1.x migration 0.x → 1.x package此外demo/MMSegmentation_Tutorial.ipynb 提供了可在本地预览的 Colab 风格教程 Notebook0.x 老用户可参考 migration 完成向 1.x 的迁移。八、Projects社区驱动的扩展生态projects/README.md 汇总了构建在 MMSegmentation 之上的社区实现与解决方案包括本仓库可见的 CAT-Seg、PP-MobileSeg、Adabins、gid_dataset、mapillary_dataset、medical 等。README 指出这些项目展示了基于 MMSegmentation 进行研究与产品开发的最佳实践欢迎社区持续向 OpenMMLab 生态贡献。九、引用与许可若你的研究使用了本项目README 建议按如下 BibTeX 引用misc{mmseg2020, title{{MMSegmentation}: OpenMMLab Semantic Segmentation Toolbox and Benchmark}, author{MMSegmentation Contributors}, howpublished {\url{https://github.com/open-mmlab/mmsegmentation}}, year{2020} }项目以 Apache 2.0 许可证 发布README License 一节明确说明。MMSegmentation 欢迎任何形式的贡献与反馈其核心诉求是为不断增长的研究社区提供一个灵活且标准化的工具包用于复现既有方法并开发自己的新语义分割方法。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考