介绍
导出与查看
在Pytorch下导出模型及权重到ONNX文件的代码示例如下
1 |
import torch |
其中
torch.onnx.export
中的模型输入张量至少有两维,第一维必须是Batch大小,即为上述代码中的
torch_input
。这里的模型输入为图像,其一般格式为N(Batch大小)C(图像通道,灰度图像为1)H(图像高)W(图像宽)。最后化简模型一步是可选的。
模型的查看可以使用
netron
工具可视化查看网络结构
原生C/C++部署
- OnnxRuntime 微软官方ONNX的CPU调用库,支持Windows下C#/C/C++,当然也有Linux的支持但是需要 手动下载 。OnnxRuntime的 另外一个版本 是支持CUDA/TensorRT的GPU调用库
- OpenVINO 针对Intel平台优化的ONNX调用库
- OpenCV 虽然OpenCV是做图像处理的,但是它的dnn模块中也有加载ONNX模型调用的功能。
Java部署
- OnnxRuntime 微软官方ONNX的CPU调用库也是支持Java调用的,本质上是在Java内调用C/C++代码
- DJL(Deep Java Library) Java主流深度学习框架
低级嵌入式平台部署
- ESP32平台部署 部署过程比较复杂,需要先用 TVM 将模型参数量化,并且将一些算子转换为ESP32平台支持的加速算子,最后将模型生成为C代码
- STM32平台部署 用STM32CubeMX + X-CUBE-AI完成部署,部署平台至少Cortex-M4以上