MMDetection 模型部署全指南:基于 MMDeploy 的 ONNX 转换、模型规范与多端推理实战
人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载导读本文基于 MMDetection 官方用户指南中的模型部署章节系统讲解如何借助 OpenMMLab 生态的 MMDeploy 工具链将 MMDetection 训练好的检测模型以 Faster R-CNN 为例转换为 ONNX 等后端推理模型并完成后端推理与 SDK 推理的全流程。读完本文你将掌握部署配置文件的命名与选择规则、转换后模型目录的结构规范、Python 侧后端推理与 SDK 推理两种方式的完整代码范式并了解仓库内自带的 TorchServe 部署工具链作为补充方案。部署前置环境MMDetection 与 MMDeploy 的安装模型部署建立在完整可用的训练与推理环境之上因此第一步是安装 MMDetection。根据仓库的安装文档推荐使用 MIM 安装 MMEngine 与 MMCV 基础依赖pip install -U openmim mim install mmengine mim install mmcv2.0.0随后安装 MMDetection 本身。若需要开发调试建议从源码安装可编辑模式这样对代码的任何本地修改都会生效而无需重新安装git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection pip install -v -e .也可以将 mmdet 作为第三方包直接安装mim install mmdet。安装完 MMDetection 后还需要安装部署工具链 MMDeploy。MMDeploy 是 OpenMMLab 的部署仓库负责包括 MMPretrain、MMDetection 等在内的各算法库的部署工作。特别需要注意如果安装的是 MMDeploy 的预编译包那么也需要通过git clone下载 MMDeploy 源码因为它包含了部署时要用到的各后端配置文件本文后续的模型转换环节会直接引用这些配置文件。前提假设以下所有操作默认 mmdetection 与 mmdeploy 两个代码库位于同级目录且当前工作目录为 mmdetection 根目录。模型转换从 PyTorch 到 ONNX转换核心流程转换的本质是把 PyTorch 模型的计算图导出为后端可执行的中间表示如 ONNX同时把数据预处理、后处理等信息抽取出来供 MMDeploy SDK 推理使用。以 Faster R-CNN 模型为例该配置文件本身极其精简仅由四份基础配置拼接而成_base_ [ ../_base_/models/faster-rcnn_r50_fpn.py, ../_base_/datasets/coco_detection.py, ../_base_/schedules/schedule_1x.py, ../_base_/default_runtime.py ]模型结构细节ResNet-50 骨干 FPN 颈部 RPN 与 RoI Head均继承自 faster-rcnn_r50_fpn.py。准备好模型配置文件与对应的 checkpoint 后即可用如下 Python 代码完成转换from mmdeploy.apis import torch2onnx from mmdeploy.backend.sdk.export_info import export2SDK img demo/demo.jpg work_dir mmdeploy_models/mmdet/onnx save_file end2end.onnx deploy_cfg ../mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py model_cfg configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py model_checkpoint faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth device cpu # 1. convert model to onnx torch2onnx(img, work_dir, save_file, deploy_cfg, model_cfg, model_checkpoint, device) # 2. extract pipeline info for inference by MMDeploy SDK export2SDK(deploy_cfg, model_cfg, work_dir, pthmodel_checkpoint, devicedevice)其中各参数含义如下参数说明img用于导出的示例图像其 shape 决定或验证模型的输入 shape结合 deploy_cfg 中 shape 设置work_dir转换产物输出目录即后续的 SDK model 目录save_file推理引擎文件名ONNX 场景下为end2end.onnxdeploy_cfgMMDeploy 部署配置文件决定后端、精度与 shape 策略model_cfgMMDetection 模型配置文件model_checkpoint训练产出的权重文件路径device转换执行设备cpu或cuda第一步torch2onnx完成模型到 ONNX 的图导出第二步export2SDK负责抽取图像预处理、结果后处理如 NMS 阈值等的 pipeline 信息并写入work_dir供 SDK 推理阶段还原出与训练/测试一致的完整推理管线。部署配置文件的命名规范与选择要领转换的关键之一是使用正确的部署配置文件。MMDeploy 中内置了各后端的部署配置文件存放于 mmdeploy 仓库的configs/mmdet目录下文件命名遵循如下模式{task}/{task}_{backend}-{precision}_{static | dynamic}_{shape}.py各字段的含义与选择要点{task}任务类型MMDetection 的任务有两类——物体检测detection与实例分割instance-seg。RetinaNet、Faster R-CNN、DETR等属于检测任务Mask R-CNN、SOLO等属于实例分割任务。务必使用detection/detection_*.py转换检测模型、使用instance-seg/instance-seg_*.py转换实例分割模型混用会导致图结构与模型输出不匹配。{backend}推理后端onnxruntime、tensorrt、pplnn、ncnn、openvino、coreml 等。后端决定了最终导出文件的格式.onnx、.engine、.ncnn等以及可用的算子集合。{precision}推理精度如 fp16、int8不填表示 fp32。{static | dynamic}shape 策略动态 shape 允许推理时输入任意尺寸图像静态 shape 则要求输入与导出时一致通常带来更高的执行效率。{shape}输入 shape模型输入的 shape 或 shape 范围如320x320-1344x1344。例如要把 Faster R-CNN 转换为 TensorRT-FP16 模型改用detection_tensorrt-fp16_dynamic-320x320-1344x1344.py即可。注意转换 TensorRT 模型时--device必须设置为cuda因为 TensorRT 的图优化与推理均依赖 GPU 环境。模型规范理解 mmdeploy SDK model 的目录结构在使用转换后的模型进行推理之前有必要了解转换产物的组织结构。所有产物存放在--work-dir指定的路径下上例中mmdeploy_models/mmdet/onnx目录的结构为mmdeploy_models/mmdet/onnx ├── deploy.json ├── detail.json ├── end2end.onnx └── pipeline.json各文件的角色end2end.onnx推理引擎文件可直接用 ONNX Runtime 加载并执行前向计算。deploy.json / detail.json / pipeline.jsonMMDeploy SDK 推理所需的 meta 信息记录了模型输入/输出张量的名称与 shape、图像预处理的归一化参数、类别数量、后处理NMS配置等。整个文件夹被统一定义为mmdeploy SDK model。也就是说一个 SDK model 既包含推理引擎也包含推理 meta 信息——前者负责张量计算后者负责让上层应用知道如何喂数据、如何读结果。后续推理时只需要把这个目录路径传给 SDK 即可无需再单独指定 deploy_cfg 与 model_cfg。模型推理后端模型推理直接驱动推理引擎后端模型推理指的是绕过 SDK直接加载end2end.onnx这样的推理引擎文件执行前向。以 ONNX Runtime 后端为例完整推理代码如下from mmdeploy.apis.utils import build_task_processor from mmdeploy.utils import get_input_shape, load_config import torch deploy_cfg ../mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py model_cfg configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py device cpu backend_model [mmdeploy_models/mmdet/onnx/end2end.onnx] image demo/demo.jpg # read deploy_cfg and model_cfg deploy_cfg, model_cfg load_config(deploy_cfg, model_cfg) # build task and backend model task_processor build_task_processor(model_cfg, deploy_cfg, device) model task_processor.build_backend_model(backend_model) # process input image input_shape get_input_shape(deploy_cfg) model_inputs, _ task_processor.create_input(image, input_shape) # do model inference with torch.no_grad(): result model.test_step(model_inputs) # visualize results task_processor.visualize( imageimage, modelmodel, resultresult[0], window_namevisualize, output_fileoutput_detection.png)这段代码的关键步骤是load_config加载部署配置与模型配置build_task_processor根据两者构建出与具体任务检测/分割匹配的任务处理器task_processor.create_input按get_input_shape得到的输入 shape 对图像完成缩放、归一化等预处理产出模型输入张量model.test_step执行推理最后visualize把检测框绘制到原图上保存为output_detection.png。整个流程复用了 MMDetection 的测试管线逻辑因此后端模型的输入输出语义与 PyTorch 原模型保持一致。SDK 模型推理跨语言的生产级推理接口如果希望把模型交付给上层应用使用如服务端、桌面端程序更推荐使用 MMDeploy SDK 推理。SDK 推理直接以整个 mmdeploy SDK model 目录为输入Python 接口的示例代码如下from mmdeploy_python import Detector import cv2 img cv2.imread(demo/demo.jpg) # create a detector detector Detector(model_pathmmdeploy_models/mmdet/onnx, device_namecpu, device_id0) # perform inference bboxes, labels, masks detector(img) # visualize inference result indices [i for i in range(len(bboxes))] for index, bbox, label_id in zip(indices, bboxes, labels): [left, top, right, bottom], score bbox[0:4].astype(int), bbox[4] if score 0.3: continue cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0)) cv2.imwrite(output_detection.png, img)示例中Detector的model_path直接指向 SDK model 目录device_name指定 cpu 或 cudadevice_id指定设备序号推理返回三部分结果bboxes检测框坐标与置信度、labels类别 id、masks实例分割掩码纯检测模型下为空。可视化时通过置信度阈值如 0.3过滤低分框再绘制。除了 Python APIMMDeploy SDK 还提供了 C、C、C#、Java 等多语言接口可以满足不同技术栈的集成需求——这一能力得益于 SDK model 中 json meta 信息与推理引擎的分离设计。模型支持列表MMDeploy 对 MMDetection 各模型的部署支持情况哪些任务、哪些后端、哪些算子被支持以官方文档为准可查阅 MMDeploy 针对 MMDetection 的部署支持文档其中包含逐模型的模型-任务划分、支持的后端矩阵与已量化的精度档位。总体而言检测类模型Faster R-CNN、RetinaNet、DETR 等与实例分割类模型Mask R-CNN、SOLO 等是两条主要的支持线配置选择时应严格对齐本文配置文件命名规范一节中的任务字段。补充方案仓库内置的 TorchServe 部署工具链除 MMDeploy 之外MMDetection 仓库自身还提供了基于 TorchServe 的模型服务化工具位于 tools/deployment 目录包含三个脚本mmdet2torchserve.py将 MMDetection 模型配置文件 checkpoint打包为 TorchServe 的.mar归档文件mmdet_handler.py自定义的 TorchServe handler负责请求预处理、模型推理与结果后处理test_torchserver.py向已启动的 TorchServe 服务发送推理请求的客户端脚本。转换命令如下python tools/deployment/mmdet2torchserve.py \ ${CONFIG_FILE} ${CHECKPOINT_FILE} \ --output-folder ${OUTPUT_FOLDER} \ --model-name ${MODEL_NAME} \ --model-version ${MODEL_VERSION} \ --force从源码看mmdet2torchserve会把模型配置 dump 为config.py放入归档并将 mmdet_handler.py 注册为该模型的服务 handler见 mmdet2torchserve.py。handler 在initialize阶段通过init_detector加载配置与权重底层实现在 mmdet/apis/inference.pyinference阶段调用inference_detector完成检测postprocess阶段按阈值默认 0.5过滤结果并输出类别名、边界框与置信度。这为不需要跨框架转换、直接复用 PyTorch 推理图的场景提供了一条更轻量的服务化路径。此外仓库自带的 demo/image_demo.py 基于DetInferencer提供了开箱即用的推理可视化能力可用于部署前的模型正确性验证例如python demo/image_demo.py demo/demo.jpg \ configs/rtmdet/rtmdet_s_8xb32-300e_coco.py \ --weights rtmdet_s_8xb32-300e_coco_20220905_161602-387a891e.pth总结本文完整梳理了 MMDetection 模型部署的主链路安装 MMDetection 与 MMDeploy → 依据{task}/{task}_{backend}-{precision}_{static|dynamic}_{shape}.py命名规范选择部署配置 → 通过torch2onnx与export2SDK完成模型转换并产出包含引擎与 meta 信息的 mmdeploy SDK model → 分别以后端推理与 SDK 推理两种方式执行预测与可视化。无论你是要把模型接入 ONNX Runtime/TensorRT 等推理引擎还是要通过 SDK 的多语言接口交付给生产应用都可以直接复用文中的代码范式同时仓库内置的 TorchServe 工具链tools/deployment为纯 PyTorch 服务化场景提供了补充选择。实际使用时请以当前安装的 MMDeploy 版本及其对 MMDetection 的支持列表为准。赞分享人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载相关推荐MMDetection 模型部署全流程指南基于 MMDeploy 的 ONNX/TensorRT 转换、SDK 推理与 TorchServe 服务化MMDetection 模型部署全流程指南基于 MMDeploy 的 ONNX/TensorRT 转换、SDK 推理与 TorchServe 服务化 本文以人工智能计算机视觉深度学习模型评测MMSegmentation 模型部署实战基于 mmdeploy 的模型转换、SDK 推理与多后端适配指南MMSegmentation 模型部署实战基于 mmdeploy 的模型转换、SDK 推理与多后端适配指南 MMSegmentation简称 mmseg 人工智能深度学习计算机视觉MMSegmentation 模型部署实战指南基于 mmdeploy 的 ONNX Runtime 与 TensorRT 全流程MMSegmentation 模型部署实战指南基于 mmdeploy 的 ONNX Runtime 与 TensorRT 全流程 本篇技术指南以 MMSegm人工智能深度学习计算机视觉创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenClaw部署实战:从WSL2报错到微信接入与被动收入场景

OpenClaw部署实战:从WSL2报错到微信接入与被动收入场景

上周有个朋友在Windows上装OpenClaw,安装脚本跑到一半直接报错卡住:could not safely verify the WSL2 environment。我隔着屏幕都能想象出那个画面——红字一弹,进度条不动,整个人对着终端发呆。这个工具最近在自动化圈子里讨论度…

2026/9/20 6:30:55 阅读更多 →
AI辅助教材创作:核心技术解析与低查重实践

AI辅助教材创作:核心技术解析与低查重实践

1. 教材创作工具的现状与痛点教材编写一直是教育工作者和内容创作者的痛点领域。传统教材编写流程通常需要经历资料收集、内容组织、文字撰写、查重校对等多个环节,整个过程耗时耗力。尤其在高频更新的学科领域,教材内容的时效性要求更高,创作…

2026/9/20 6:30:55 阅读更多 →
PotPlayer窗口大小永久设置:ini配置四字段详解

PotPlayer窗口大小永久设置:ini配置四字段详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 6:30:55 阅读更多 →

最新新闻

小程序农产品团购平台架构设计与实践

小程序农产品团购平台架构设计与实践

1. 项目背景与核心价值最近几年随着移动互联网的普及,农产品电商领域迎来了爆发式增长。作为一名长期关注电商领域的技术开发者,我发现传统农产品电商平台存在几个痛点:一是操作流程复杂,中老年用户难以适应;二是缺乏社…

2026/9/20 7:13:11 阅读更多 →
LibreChat:面向生产环境的开源LLM对话中台与MCP工具集成平台

LibreChat:面向生产环境的开源LLM对话中台与MCP工具集成平台

1. LibreChat 是什么:一个真正能落地的开源对话界面,不是玩具LibreChat 这个名字最近在开发者圈子里出现频率很高,但很多人点开 GitHub 仓库后第一反应是:“这不就是个 ChatGPT 网页版换皮?”——错了。它根本不是 UI …

2026/9/20 7:13:11 阅读更多 →
程序员转型AI大模型:技术栈差异与渐进路线

程序员转型AI大模型:技术栈差异与渐进路线

1. 职业转型的十字路口:程序员与AI大模型的真实关系去年团队里有个做了8年Java后端的老同事突然转岗去做大模型微调,三个月后却主动申请调回原岗位。这件事让我开始认真思考:普通程序员到底该不该all in大模型?经过半年跟踪观察20…

2026/9/20 7:13:11 阅读更多 →
GetQzonehistory:导出QQ空间全部历史说说,把旧说说、留言和转发离线备份

GetQzonehistory:导出QQ空间全部历史说说,把旧说说、留言和转发离线备份

GetQzonehistory:导出QQ空间全部历史说说,把旧说说、留言和转发离线备份 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 翻说说翻到一条2014年的:只有…

2026/9/20 7:13:11 阅读更多 →
roc 中 `List.fold_until` 空列表语义详解:从 REPL 快照测试看提前终止折叠

roc 中 `List.fold_until` 空列表语义详解:从 REPL 快照测试看提前终止折叠

【免费下载链接】roc A fast, friendly, functional language. 项目地址: https://gitcode.com/GitHub_Trending/ro/roc 点击查看 免费下载 List.fold_until 是 roc 标准库中支持提前终止的折叠函数:它的步进函数通过返回 Continue(state) 或 Break(sta…

2026/9/20 7:13:11 阅读更多 →
初识C语言:从指针到内存,夯实编程底层根基

初识C语言:从指针到内存,夯实编程底层根基

很多人在学编程的时候都会问一个问题:C语言这么多年了,为什么还在讲?Python、Java、Go轮番登场,怎么第一门课还是C。我自己带过不少新人,也面试过不少毕业生,有个特别直观的感受——凡是C语言学得扎实的人&…

2026/9/20 7:12:11 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →