ONNX模型转换成NCNN模型

用Pytorch生成的.pt模型想要部署在手机端(安卓、IOS)可以先将将模型转换成onnx模型(.onnx)之后再通过onnx模型转化成ncnn模型(.bin .param)

.pt模型转换为.onnx,自行查找资料,优快云中几个博客写的都很好了。我这里记录一下onnx模型转换ncnn模型的过程

1.onnx去冗余

.pt模型导出的.onnx模型包含许多冗余的维度,这是ncnn不支持的,所以需要去掉冗余的维度。**一定要去冗余!!!!**要不后面转换容易报错

前置:onnx(pytorch自带了,不用单独安装)、onnx-simplifier (需要安装)

安装onnx-simplifier的指令:

pip install -i https://pypi.douban.com/simple -U onnx-simplifier --user

去冗余指令:

python -m onnxsim minifas.onnx minifas-sim.onnx

minifa.onnx为原始模型名称;
minifas-sim.onnx为生成的去冗余模型名称;

2.转换

windows环境转换可参考博客:

Windows(VS2019)编译

Linux环境转换可参考博客:

Linux环境编译

详细的方法优快云中很多博客都已经写的很详细了,出现bug的话每个人可能都不同,我就不在这里详细的写了。

在这里我推荐一个大佬的一键转换工具

ONNX2NCNN一键转换工具

只需要选择onnx模型便可一键生成ncnn模型。我有2个模型需要转换,一个超轻量的模型没有经过去冗余就可以直接转换成功,另一个如果不去冗余就会报错,去冗余之后就成功转换。还是挺方便的,如果手里只有一两个模型需要转换的话 可以先试试这个工具 如果能直接生成能省下很多时间,如果出现bug解决不了,再自行搭建环境进行编译即可。

### ONNX 模型换为 NCNN 模型的方法和工具 为了将ONNX模型成功换为NCNN模型并用于移动设备上的高效推理,通常遵循一系列特定的操作流程。此过程涉及多个阶段,包括准备环境、执行换以及验证换后的模型性能。 #### 准备工作 确保开发环境中已安装必要的依赖库和支持工具。对于Python用户来说,可以通过pip安装`onnx-simplifier`来优化ONNX模型,提高后续换的成功率[^1]: ```bash pip install onnxsim ``` 此外,还需要下载或编译最新的NCNN源码及其配套的工具链,特别是`ncnn/examples/onnx`目录下的脚本文件,这些资源提供了从ONNXNCNN的具体实现路径[^2]。 #### 执行换 一旦准备工作完成,就可以利用命令行工具来进行实际的模型换操作。具体而言,使用如下指令可将`.onnx`格式的神经网络定义化为适合移动端使用的`.param`参数配置文件与对应的二进制权重数据存储文件(即`.bin`): ```bash ./tools/onnx/onnx2ncnn <input.onnx> <output.param> <output.bin> ``` 上述命令中的`<input.onnx>`代表输入的ONNX模型路径;而`<output.param>`和`<output.bin>`则分别指定了输出的目标位置及名称。 #### 验证准确性 完成初步换后,建议对新生成的NCNN版本进行严格的测试以确认其行为是否完全匹配原始ONNX模型的表现。这一步骤至关重要,因为即使是最细微的变化也可能影响最终应用的效果。为此,推荐采用逐层比较的方式,在相同的数据集上运行两个不同框架下导出的结果,并仔细检查每一层之间的差异是否存在异常情况。 ```python import numpy as np from ncnn_net import Net # 假设这是加载ncnn模型的一个接口类 # 加载ncnn模型 net = Net() if not net.load_param("model.param"): raise Exception("Failed to load param file.") if not net.load_model("model.bin"): raise Exception("Failed to load bin file.") # 创建输入张量 in_mat = ... # 初始化输入矩阵 ex = net.create_extractor() ex.input("data", in_mat) # 获取输出特征图 out_mat = ... ex.extract("output_layer_name", out_mat) print(out_mat.numpy()) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值