ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。
ncnn优点众多,包括
- 支持卷积神经网络,支持多输入和多分支结构,可计算部分分支
- 无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架
- 纯 C++ 实现,跨平台,支持 android ios 等
然而,目前PyTorch已成为主流的深度学习开发平台,但是在部署上仍有不足,因此,我们可以借助ncnn将PyTorch模型部署到移动端。
环境
系统: Windows 11 dev (终端比原先方便很多)
vs: vs 2019
python: 3.8
PyTorch: 1.9.0
1. 安装onnx
pip install --upgrade onnx onnxruntime
2. 导出onnx模型
以torchvision自带的resnent18为例, 将PyTorch的模型导出为onnx的格式。
import torch
import torchvision
# An instance of your model
model = torchvision.models.resnet18()
# An example input you would normally provide to your model's forward() method
x = torch.rand(1, 3, 224, 224)
# Export the model
torch_out = torch.onnx.export(model, x, "resnet18.onnx", export_params=True)
3. 简化onnx模型
在将onnx转换为ncnn模型前,我们需要简化onnx模型,以免出现不可编译的情况
安装onnx-smiplifier
pip install --upgrade onnx-simplifier
简化onnx模型,打开终端,
python -m onnxsim resnet18.onnx resnet18-sim.onnx
4. onnx转换为ncnn
去ncnn官方的github下载ncnn的工具包,解压后,从bin中找到onnx2ncnn.exe文件,拷贝到工程文件夹,然后,打开终端输入
./onnx2ncnn .\resnet18.onnx resnet18.param resnet18.bin
就生成了resnet18.param和resnet18.bin