PyTorch模型转为ncnn

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。
ncnn优点众多,包括

  1. 支持卷积神经网络,支持多输入和多分支结构,可计算部分分支
  2. 无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架
  3. 纯 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

参考文章:

ncnn的github
ncnn填坑记录四:pytorch模型转 ncnn

你可能感兴趣的:(机器学习,pytorch,ncnn)