win10 tensorrtx lenet使用方法

1 环境

硬件:
CPU:Intel®Core™i5-10400F CPU @2.90GHz 2.90GHz
GPU: NVIDIA GeForce GTX 1660 Ti (6G显存)
内存:16.0GB(15.9GB可用)

软件:
Visual Studio 2019
Cmake
CUDA10.0/10.1,cudnn
Anaconda python3.8.3
torch 1.6.0+cu101,torchvision 0.7.0+cu101
TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.0.cudnn7.6

2 准备工作

Cmake,CUDA,cudnn,Anaconda等常规软件安装参照网上教程安装即可,不再赘述。
2.1 tensorRT安装与测试
参考我的另一篇博客:win10 TensorRT 安装与测试
2.2 tensorRT工具库tensorrtx
tensorrtx是GitHub上star最多的tensorrt资料仓库,这个库就尝试使用TensorRT的各种API直接进行网络的构建,简单粗暴,还很有效。避免模型转onnx时出现的一些网络层不支持问题和不友好的报错提示问题。
在这里插入图片描述
tensorrtx下载链接
https://github.com/wang-xinyu/tensorrtx
与tensorrtx相关的仓库pytorchx
https://github.com/wang-xinyu/pytorchx

3 pytorch转tensorrt

pytorch转tensorrt有两种方法,一种是先将pytorch训练得到的pt模型保存为一种二进制文件格式,然后通过开源工具tensorrtx的源码构建tensorrt引擎,推理拿到outputs;另一种是先将pytorch训练得到的pt模型转换为中间件onnx,解析onnx文件构建trt引擎,然后执行推理,拿到outputs。
3.1 tensorrtx构建tensorrt
3.1.1 lenet
3.1.1.1 lenet的tensorrt模型测试
1)生成权重文件

首先运行python /path/to/pytorchx/lenet/lenet5.py得到训练模型lenet5.pth,然后运行python /path/to/pytorchx/lenet/inference.py记录模型推理结果,得到lenet5.wts,最后将lenet5.wts移动到/path/to/tensorrtx/lenet/中。
在这里插入图片描述
在这里插入图片描述

2)C++代码编译并运行
编译
cd /path/to/tensorrtx/lenet
mkdir build
cd build
cmake …
make

运行
生成Engine文件:sudo ./lenet -s
执行模型推理:sudo ./lenet -d,并记录推理结果。

对比C++与python的推理结果
在这里插入图片描述

注:在windows上,以上cmake命令可以通过cmake软件实现,运行操作可以通过VS实现(命令行参数-d,-s在属性—>调试—>命令参数中设置)
在这里插入图片描述

3.1.1.2 lenet的源码解析
1)python源码
lenet5.py
定义了一个简单卷积神经网络
在这里插入图片描述

保存模型
通过torch.save()保存模型
在这里插入图片描述

Inference.py
a)torch.load()加载模型
b)调用eval方法
c)取出模型中的数据
d)struct.pack()按照给定的格式(fmt),把数据转换成字符串(字节流).
在这里插入图片描述

2)C++源码
lenet.cpp
在这里插入图片描述

a)构建engine文件
./lenet -s 命令,主要功能就是通过API构建模型,导入权重,并将模型保存到本地。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

b)模型推理
./lenet -d,读取engine文件,输入数据准备、执行推理、释放内存。

在这里插入图片描述
在这里插入图片描述

问题
0x00007FFFF306DACE (ucrtbase.dll) (lenet.exe 中)处有未经处理的异常: 请求了严重的程序退出。
在这里插入图片描述

将engine文件保存方式设为binary
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值