pt模型转onnx模型,onnx模型转engine模型,pt模型转engine模型详细教程(TensorRT,jetpack)
创始人
2024-11-13 16:10:23
0

背景

背景是需要在nvidia jetpack4.5.1的arm64设备上跑yolov8,用TensorRT加速,需要用*.engine格式的模型,但是手头上的是pt格式模型,众所周知小板子的内存都很小,连安装ultralytics依赖库的容量都没有,所以我想到在windows系统上先把模型转好,然后再直接放在板子上用。

下载ultralytics yolov8

https://github.com/ultralytics/ultralytics

找到exporter.py

我以为是直接在这个exporter.py上直接改参数来转模型,找了半天找不到,然后直接运行这个python文件也是失败报错,后来才看到这个exporter.py上面有教如何使用
在这里插入图片描述

  • 安装依赖库
pip install "ultralytics[export] 

等待安装好,这需要很长时间
在这里插入图片描述
然后不是直接运行这个exporter.py文件,而是像提示里面一样,创造一个py文件,在文件里面复制这几行然后改参数就行了

    from ultralytics import YOLO     model = YOLO('yolov8n.pt')     results = model.export(format='onnx') 

结果我运行了会报错找不到gpu

assert self.im.device.type != 'cpu', "export running on CPU but must be on GPU, i.e. use 'device=0'" AssertionError: export running on CPU but must be on GPU, i.e. use 'device=0 

查了是需要指定gpu,然后我尝试在python里指定gpu,都还是报这个错,突然看到有提示需要device=0,我想这是加在哪里的呢,后来发现是在下面那个cli命令行加

尝试一步到位转成engine模型

yolo mode=export model=Gap.pt format=engine 

报错assert self.im.device.type != ‘cpu’, “export running on CPU but must be on GPU, i.e. use ‘device=0’”

assert self.im.device.type != 'cpu', "export running on CPU but must be on GPU, i.e. use 'device=0'" 

在这里插入图片描述

解决办法就是在后面加一个device=0

yolo mode=export model=Gap.pt format=engine device=0   

把模型放在小板子上用结果报错ERROR: coreReadArchive.cpp (31) - Serialization Error in verifyHeader: 0 (Magic tag does not match)

在这里插入图片描述
查了下,我真是慌了,意思是编译engine时候的使用的tensorrt版本与使用trt推理时候的tensorrt版本不一致,需要一致才行
,排查下各自是什么版本

  • linux查tensorRT版本
ldd 可执行文件 

在这里插入图片描述
可以看到生成可执行文件的tensorRT是7版本

这个命令行也可以查询到

dpkg -l | grep TensorRT 

在这里插入图片描述
能看到是7.1.3版本的tensorRT

  • windows查tensorRT版本
import tensorrt as trt print(f'TensorRT version: {trt.__version__}') 

在这里插入图片描述
可以看到我在编译engine时候的使用的tensorrt版本是8.4,版本不匹配,所以trt推理失败。

然后我寻思arm64环境是不方便更改的,那我就降低windows端的tensorRT版本,我就去nvidia官网下载(https://developer.nvidia.com/tensorrt/download)结果,官网都不提供7.1版本的tensorRT下载了,一下子又不知道该怎么解决了。

我突然想到既然直接使用engine不行,那我用生成出来的onnx模型再在arm64上转成engine行不行

aarch64上onnx转engine模型

找到你本机上的trt转模型可执行文件

sudo find / -name trtexec 

在这里插入图片描述
复制到你的模型文件夹

./trtexec --onnx=/home/adlink/wjp/YoloV8-TensorRT-Jetson_Nano-main/models/yolov8n.onnx  --saveEngine=yolov8n.engine --fp16=fp32 

结果还是报错volume mismatch,Input dimensions [1,33,8400] have volume 277200 and output dimensions [1,4,16,8400] have volume 537600.
在这里插入图片描述
仿佛又没有办法解决了,难道非要统一版本,但是这上面尝试过已知道是非常困难的,我尝试用其他办法,后来尝试更换参数,发现是opset版本太高的问题,好像默认是17,而aarch64上的版本很低,需要在yolo转pt为onnx的步骤加指定opset的参数

yolo export model=yolov8s.pt format=onnx opset=11 simplify=True 

再把生成的onnx文件用trtexec转

./trtexec --onnx=/home/adlink/wjp/YoloV8-TensorRT-Jetson_Nano-main/models/yolov8n.onnx  --saveEngine=yolov8n.engine --fp16=fp32 

在这里插入图片描述
就转成功了,跑模型也没问题!

特别说明下

[TRT] Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output. 

中间会在这个步骤停很长时间,这个不是报错,静静等待就好了,过一会就能成功转换onnx为engine模型了

相关内容

热门资讯

大家学习交流!红龙poker辅... 大家学习交流!红龙poker辅助挂多功能透视工具,真是有挂(有挂规律)运红龙poker辅助工具,进入...
26年最新开挂版!武林外传辅助... 26年最新开挂版!武林外传辅助透视挂,天天爱泰州麻将真的是有外挂,总是有挂技巧武林外传破解侠是真的助...
重大通报!微扑克辅助挂多功能透... 重大通报!微扑克辅助挂多功能透视工具,真是存在有挂(存在有挂)1、下载好微扑克正确养号方法之后点击打...
26年最新开挂版!欢乐达人辅助... 26年最新开挂版!欢乐达人辅助透视挂,朱雀吴江三缺一存在有外挂,切实了解有挂欢乐达人破解侠是真的助透...
记者揭秘!智星菠萝德州辅助挂多... 记者揭秘!智星菠萝德州辅助挂多功能透视工具,原来存在有挂(有挂分析)1、点击下载安装,智星菠萝德州脚...
26年最新开挂版!来几局app... 26年最新开挂版!来几局app辅助透视挂,全来跑风麻将是真的有外挂,一直有挂规律1、进入到来几局ap...
玩家必看科普!AAPoKer辅... 玩家必看科普!AAPoKer辅助挂多功能透视工具,本来真的有挂(有挂教程)1、下载好AAPoKer正...
26年最新开挂版!發财辅助透视... 26年最新开挂版!發财辅助透视挂,约战武汉麻将是真的有外挂,真是有挂实锤發财能透视中分为三种模型:發...
一分钟教会你!AAPoKer辅... 一分钟教会你!AAPoKer辅助挂多功能透视工具,都是有挂(有挂解惑)暗藏猫腻,小编详细说明AAPo...
26年最新开挂版!大圣链接辅助... 26年最新开挂版!大圣链接辅助透视挂,逍遥麻将是真的有外挂,原来有挂神器1、大圣链接公共底牌简单,大...