目录
1. .pt模型转为.onnx报错问题
选择opset version为11
可能报错:the operator silu to ONNX opset version 11 is not supported
原因:onnx不支持silu算子
silu激活函数:silu (x)=x∗ sigmoid(x)
解决办法:手动修改虚拟环境中第三方库torch中的函数
参考:https://blog.csdn.net/qq_43450443/article/details/130053363
2.关于onnx模型简化的问题
使用pytorch转onnx模型后经常需要做下simplify, 经过simplify后的模型更加简洁,其底层实现原理是通过读取onnx模型,再将一些需要动态计算的值转换为静态值,从而对模型进行简化,便于进行之后的推理操作。
有些代码在转为onnx模型的时候已经做了simplify,具体看传入的参数配置
如果没有的话,两种方法
第一种方法:可以自己安装onnx-simplifier,及onnxruntime库
终端运行以下命令启动库中的脚本
python -m onnxsim path_to_your_input_onnx path_to_your_output_onnx
第二种方法:如果你最终要转成ncnn模型,可以直接用下面的工具
一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine (convertmodel.com)
勾选即可
onnx模型在线查看网站:Netron
3.ncnn介绍:
ncnn是腾讯推出的在手机端极致优化的高性能神经网络前向计架框架,适用于手机端的CPU计算且无需依赖第三方计算库,ncnn只用作推理。基于 ncnn,开发者能够将Netron轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。NCNN模型是全部用c++来写的,可以跨平台,常见的嵌入式设备上可以通用。
ncnn模型由两个文件组成,.bin和.param文件
前者是权重数据文件,后者是网络结构文件
该网站可以查看param文件,网络结构可视化 Netron
后面可对ncnn模型进行加密,用模型进行推理等操作。