在windows下使用ncnn部署加速神经网络(以resnet18为例)

本文介绍了在Windows操作系统中使用NCNN库部署和加速ResNet18神经网络的步骤,包括设置NCNN环境、利用PyTorch和ONNX将模型转换为ONNX格式、优化模型、使用NCNN工具转换为param和bin文件,以及在VisualStudio中创建项目运行示例。最后提到了树莓派上的NCNN部署作为后续内容。
摘要由CSDN通过智能技术生成

在windows下使用ncnn部署加速神经网络(以resnet18为例)

首先需要部署NCNN的环境,这里具体看我上一篇博客保姆级在windows环境下部署NCNN环境,就不赘述了。

模型转换

之后我们需要加载pytorch模型并转换为onnx文件,需要python环境下安装pytorch和onnx.

我这里直接使用torchvision来加载模型来演示。

import torch
from torchvision import models
import onnx

device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print('device', device)
#这里是选择cpu和gpu
model = models.resnet18(pretrained=True)
model = model.eval().to(device)
#将模型的验证加载到device上,注意这里的model是带参数的

#设置一个随机输入
x = torch.randn(1, 3, 256, 256).to(device)
#开始转换
with torch.no_grad():
    torch.onnx.export(
        model,                       # 要转换的模型
        x,                           # 模型的任意一组输入
        'resnet18_imagenet.onnx',    # 导出的 ONNX 文件名
        opset_version=11,            # ONNX 算子集版本
        input_names=['input'],       # 输入 Tensor 的名称(自己起名字)
        output_names=['output']      # 输出 Tensor 的名称(自己起名字)
    )

# 读取 ONNX 模型
onnx_model = onnx.load('resnet18_imagenet.onnx')
# 检查模型格式是否正确
if not onnx.checker.check_model(onnx_model)
	print('onnx模型成功加载!')
#打印计算图,可视化
print(onnx.helper.printable_graph(onnx_model.graph))

转换后的onnx文件其实还不够简化,还需要进一步精简,需要用到python的onnxsim

from onnxsim import simplify
import onnx
input_path = "resnet18_imagenet.onnx"#你自己的模型文件
output_path = "resnet18_imagenet_sim.onnx"#精简后的文件保存路径
onnx_model = onnx.load(input_path)  # load onnx model
model_simp, check = simplify(onnx_model)
assert check, "Simplified ONNX model could not be validated"
onnx.save(model_simp, output_path)
print('finished exporting onnx')

这样子就得到了精简后的onnx文件:resnet18_imagenet_sim.onnx

之后打开ncnn的转换工具,具体路径在编译完的ncnn工程目录下的\install\bin下,其实可以单独吧这个文件夹下的exe都复制到另外一个文件夹,制作成ncnn转换工具,就像我这样子。

在这里插入图片描述

之后把转换后的resnet18_imagenet_sim.onnx复制到该文件夹下,启动cmd,运行

onnx2ncnn.exe resnet18_imagenet_sim.onnx resnet18_imagenet_sim.param resnet18_imagenet_sim.bin

对ncnn文件进行二进制加密和转换成.h文件

ncnn2mem.exe resnet18_imagenet_sim.param resnet18_imagenet_sim.bin resnet18_imagenet_sim.id.h resnet18_imagenet_sim.mem.h

运行之后文件夹下会多出resnet18_imagenet_sim.id.h resnet18_imagenet_sim.mem.h和resnet18_imagenet_sim.param.bin文件

运行demo

打开visual studio,新建一个空项目,加载之前配置好的项目属性表

在这里插入图片描述

记得得在这个Release|x64下面导入,并且这个编译选项也保持一致:

在这里插入图片描述

引入两个上面生成的resnet18_imagenet_sim.id.h,resnet18_imagenet_sim.bin和resnet18_imagenet_sim.param.bin文件,新建源文件,

打开下面链接,复制yanye_color_all_score_ncnn.cpp到自己的源文件

teach_all/yanye_color_all_score_ncnn.cpp at main · stupid-boy-me/teach_all · GitHub

修改一下那些加载文件啊和头文件,之后运行编译,有下面的界面就基本部署在pc上部署成功了。

在这里插入图片描述

预告一下,下一篇博客树莓派下部署NCNN我将讲述如何在树莓派上编译ncnn并部署resnet18。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值