Windows下如何将mmdetection训练好的模型导出为onnx格式?

写在前面

注意:第一部分是踩坑记录,第二部分才是正确的导出步骤!!!!

踩坑方法记录

这一部分的方法看样子好像没啥问题,但是一步步繁琐的操作下来你会发现,你已经入坑了!!!

提醒大家,如果你正在按照这个方法导出模型,劝你尽快放弃,行不通【原因在于后续的python导出代码会个各种报错,而且因环境冲突无法解决】!!!!

正确的步骤是:正确方法记录(下文的后面部分)。

前言

目前,MMDeploy在Windows平台下提供cpu以及cuda两种Device的预编译包,其中cpu版支持使用onnxruntime cpu进行推理,cuda版支持使用onnxruntime-gpu以及tensorrt进行推理,可以从Releases获取。
注意:本篇教程以mmdeploy-1.3.1-windows-amd64.zip为例,展示预编译包cpu的预测方法。

在这里插入图片描述

为了方便使用者快速上手,本教程以分割模型(mmdetection)为例,展示预编译包的使用方法。

预编译包的目录结构

如下:
.
├── build_sdk.ps1
├── example
├── include
├── install_opencv.ps1
├── lib
├── README.md
├── set_env.ps1
└── thirdparty

准备工作

使用预编译包,来进行模型转换以及模型推理,除了预编译包的中的内容外,还需要安装一些第三方依赖库。
下面以ONNXRuntime为推理后端,说明所要进行的准备工作。
首先新建一个工作目录。
请按照get_started文档,准备虚拟环境,安装pytorch、torchvision、mmcv。

conda create --name mmdeploy python=3.8 -y
conda activate mmdeploy
pip3 install torch torchvision torchaudio

在这里插入图片描述

pip install -U openmim
mim install 
  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用mmdeploy可以将mmdetection模型转换为onnx格式,让模型在不同的平台和框架之间进行转换和迁移。同时,mmdeploy-sdk可以使用c语言进行实现,可以将onnx格式模型部署到C/C++环境中。 要使用mmdeploymmdetection模型转换为onnx,首先需要安装mmcv-full和mmdetection。安装完成后,使用以下命令将模型转换为onnx: ``` python tools/deploy/export_onnx.py ${CONFIG_FILE} ${CHECKPOINT_FILE} ${ONNX_FILE} --input-img ${IMG_SHAPE} ``` 其中${CONFIG_FILE}为模型的配置文件,${CHECKPOINT_FILE}为训练好的模型文件,${ONNX_FILE}为生成的onnx文件名称,${IMG_SHAPE}为输入图像的形状。 转换为onnx后,可以使用mmdeploy-sdk对模型进行部署。首先需要在C环境下使用mmdeploy-sdk的API读取onnx模型文件,然后使用C语言的库函数对模型进行推理。 使用mmdeploy-sdk的API读取onnx模型文件,代码如下: ``` #include <stdlib.h> #include <string.h> #include <assert.h> #include "mmdeploy.h" int main(int argc, char **argv) { flexbuffer *model; mmsession *session; const char *model_path = argv[1]; /* 读取onnx模型文件 */ model = read_flexbuffer_file(model_path); assert(model); /* 创建session */ session = create_session(model); assert(session); /* 设置输入数据 */ set_input_data(session, input_data); /* 进行推理,获取输出数据 */ get_output_data(session, output_data); return 0; } ``` 使用C语言的库函数对模型进行推理,主要的工作是对输入数据进行预处理,并调用session的run方法进行推理,代码如下: ``` #include <stdlib.h> #include <string.h> #include <assert.h> #include "mmdeploy.h" int main(int argc, char **argv) { flexbuffer *model; mmsession *session; float *input_buf, *output_buf; /* 预处理输入数据 */ input_buf = preprocess_input(input_data); /* 读取onnx模型文件 */ model = read_flexbuffer_file(argv[1]); assert(model); /* 创建session */ session = create_session(model); assert(session); /* 设置输入数据 */ set_input_data(session, input_data); /* 进行推理,获取输出数据 */ get_output_data(session, output_data); /* 对输出数据进行后处理 */ output_buf = postprocess_output(output_data); return 0; } ``` 在使用mmdeploy-sdk进行C语言实现时,需要注意模型的输入和输出数据类型和形状,以及预处理和后处理函数的编写。通过以上步骤,就可以使用mmdeploymmdetection模型转换为onnx,并使用mmdeploy-sdk实现C语言部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深耕AI

谢谢鼓励~我将继续创作优质博文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值