十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MMDetection 模型部署全指南:基于 MMDeploy 的 ONNX 转换、模型规范与多端推理实战

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),仅供参考
返回列表