Yolo V5 转tensorrt

一、 在转tensorrt之前,请先确认你下载的yolo v5的版本及对应权重:

这个一定要注意,因为有的童鞋上来就转,如果成功了,那还好,成功不了,首先就要想到这个问题,就是yolo v5版本不对,导致转tensorrt不成功。自己可用这个版本的模型训练1个epoch,然后再转一下。如果转成功了,再去大规模的训练。

在官方地址:

https://github.com/ultralytics/yolov5

中有个master下有个Tags,选择v6.0版本

 2. 点击v6.0后下面给出这个版本的代码以及权重,去下面找它的权重

 

 点击里面yolo v5s 或者yolo v5l 后进入新的页面,在下面有个assets中选择对应的版本,下载即可。这是它是按照对应版本进行下载的。就是v6.0版本的yolo v5代码对应着它的权重。因为不同代码对里面的网络或者其他有改动。所以权重也有所改变。切记!!!!!

 二、下载完权重后,即可按照代码进行转换(代码来源在下方已标明):

1. 我们需要两个github仓库,一个是yolov5的官方仓库,一个是tensorrtx的仓库
我们只需要利用前者生成一个wts的权重文件,然后就可以利用这个权重文件在tensorrtx里来进行模型的转换和推断了

git clone https://github.com/wang-xinyu/tensorrtx.git
git clone https://github.com/ultralytics/yolov5.git
# download its weights 'yolov5s.pt' 
# 这边要注意的是,在yolov5仓库中,在weights内要执行sh文件时,需要修改里面的路径,不然会找不到utlis文件,
# 或者你也可以把sh文件移出上一层文件夹中,再执行,就不会有路径问题了。
# copy tensorrtx/yolov5/gen_wts.py into ultralytics/yolov5
# ensure the file name is yolov5s.pt and yolov5s.wts in gen_wts.py
# go to ultralytics/yolov5
python gen_wts.py
# a file 'yolov5s.wts' will be generated.

2. 将生成的wts文件copy到tensorrtx/yolov5下,

3. 需要修改tensorrtx/yolov5下cmakefile.txt文件,因为cmakefile的文件指向的动态链接库和头文件都是系统环境下的,如果你用tar安装tensorRT,你的那几个文件和库都是在你自己的环境下,需要修改cmakefile中指向的路径(如果你跑tensorrtx的其他模型,也是需要修改那个模型下的cmakefile.txt文件)
##################################

然后按照说明的改cmakelist.txt文件就行。改动如下:
将下面两行注释掉,这两个指向的是系统环境下tensorrt的那几个头文件的位置。

# tensorrt
include_directories(/usr/include/x86_64-linux-gnu/)
link_directories(/usr/lib/x86_64-linux-gnu/)

然后添加如下两行

include_directories(/home/xxxx/TensorRT-6.0.1.5/include/)
link_directories(/home/xxxx/TensorRT-6.0.1.5/targets/x86_64-linux-gnu/lib/)
#TensorRT-6.0.1.5是我解压后的文件夹名称

里面的/home/xxxx/TensorRT-6.0.1.5修改为你的tensorrt的版本的地址路径!!!!!!

(tensorrt的下载地址(需要注册一下):NVIDIA TensorRT | NVIDIA Developer

这个代码来源是

部署tensorRT时,解决可能出现的问题。_Activewaste-CSDN博客

3. 执行下面的代码进行编译:

# put yolov5s.wts into tensorrtx/yolov5
# go to tensorrtx/yolov5
# ensure the macro NET in yolov5.cpp is s  这个s不s,应该根据你一开始生成的wts权重文件是哪个版本决定的
mkdir build
cd build
# cmake的时候记得修改cmakefile文件的链接库路径和头文件路径
cmake ..
make
sudo ./yolov5 -s             # serialize model to plan file i.e. 'yolov5s.engine'
# 推断图片,samples下面应该放你的图片,格式没要求(jpg,其他格式博主没试过)
sudo ./yolov5 -d  ../samples # deserialize plan file and run inference, the images in samples will be processed.

需要注意的是倒数第二行的代码执行会报错:!!!!!!!!!!!!!!!

arguments not right!
./yolov5 -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw]  // serialize model to plan file
./yolov5 -d [.engine] ../samples  // deserialize plan file and run inference
此时执行下述代码:

./yolov5 -s yolov5s.wts yolov5s.engine s

运行最后一行代码也会报上述的错误:!!!!!!!!!!!!

此时执行下述代码:

./yolov5 -d yolov5s.engine ../samples
 

4. python版本yolov5_trt.py的运行

4.1 直接执行yolov5_trt.py的时候会报错,显示不能import tensorrt as trt 以及不能from .tensort import xxx

问题检查:

(1)注意有的童鞋使用的是anaconda环境,看看是不是在自己的环境下面,这种低级错误切记!如果是在这个环境下面,执行./yolov5 -d yolov5s.engine ../samples这个代码应该是成功的!如果执行上述代码成功,还是会报错,那看下面这个验证。

(2)这是因为系统变量里面没有tensorrt,这个时候需要添加系统变量。这个时候你可以在python的交互页面对上述问题进行验证,输入import tensorrt,看看报不报错,如果报错,就看下面的内容。

知识点:

(1)如果你对vim不了解,可以先去百度一下,就是一个类似于编辑器的命令,可以在Ubuntu打开任意文档或者程序(比如 vim a.txt, vim b.py等等),点击键盘上的I键进行编辑,但是保存的时候,需要先按一下esc,然后输入:wq进行保存。如果感觉输错了。运行:q即可,这时候不会写出内容。重新编辑,有的时候需要输入:q!,进行强制关闭。自己先尝试一下,比如在桌面新建个test.txt,  使用vim进行编辑,输入mmmmmm,然后对其进行保存。

(2)切记不要上来就编辑系统文件,你不小心输入错一个东西,就可能导致环境变量错误,排查起来很麻烦。 也可以使用gedit test.txt,这个类似于打开一个文本,直接编辑就好,然后保存就行(或者按ctrl+s)即可。

问题检查(2)的解决方法

1)使用 vim ~/.bashrc(或者gedit ~/.bashrc,如果你对vim不了解,就用这个吧),把下面这行命令放到这个环境变量页的最后面,也就是在这里面再添加下面这一行,而不是将.bashrc里面的 LD_LIBRARY_PATH进行修改,注意不是修改,是添加!!!!添加完后,点击esc,然后输入:wq进行保存。

2)保存完后,使用source ~/.bashrc,对系统进行更新。这里跟重启效果是一样的。在终端的python交互页面,看看能不能import tensorrt,如果执行成功,那就没问题了。

#tensorrt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your trt path/TensorRT-7.2.1.6/lib

这里your trt path 就是你放置tensorrt的地址,而且TensortRT-7.2.1.6要根据你自己的版本进行修改。

特别注意一点,就是 LD_LIBRARY_PATH=$LD_LIBRARY_PATH 两个LD_LIBRARY_PATH是一样的!!!!!自己手动输入的时候很容易输错。

ImportError: libnvinfer.so.7: cannot open shared object file: No such file or directory_grapefruit的博客-CSDN博客_libnvinfer.so.7

4.2 再去执行

python yolov5_trt.py

其他m,l,x版本参考:

YOLOv5 TensorRT Benchmark for NVIDIA® Jetson™ AGX Xavier™ and NVI | Forecr.io

上述代码来源:

https://github.com/wang-xinyu/tensorrtx/issues/433

运行完显示:

上述代码的来源:

【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比_Activewaste-CSDN博客_tensorrt加速yolov5

生成tensorrt引擎错误记录-crnn_Coding-Prince的博客-CSDN博客

X1. 可参考这些文献实现其他的目的:

手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速

导出:onnx系列:

YOLOv5系列(2)——YOLOv5导出jit,onnx,engine_wa1tzy的博客-CSDN博客_yolov5导出onnx

问题:

1. tensorRT加速yolov5 arguments not right!问题解决

tensorRT加速yolov5 arguments not right!问题解决_amosjy的博客-CSDN博客_arguments not right!

YOLO5 是目标检测的一种算法,而 TensorRT 是一种优化深度学习推理过程的工具。要使用 YOLO5 和 TensorRT 来加速打开摄像头,可以按照以下步骤进行: 首先,需要使用 OpenCV 的摄像头 API 打开摄像头。可以使用 OpenCV 的 VideoCapture 类来实现这一功能。需要注意的是,打开摄像头可能需要在代码中指定摄像头的索引或视频文件的路径。 然后,加载 YOLO5 的预训练权重模型。可以使用 YOLO5 官方提供的权重文件,或是根据自己的需要进行训练并保存模型。 接着,使用 TensorRT 将加载的 YOLO5 模型优化为 TensorRT 可以处理的引擎文件。首先,需要创建一个 TensorRT 的 builder 对象,并设置优化参数和目标硬件平台。然后,使用 builder 对象创建一个 TensorRT 的网络对象,并加载 YOLO5 的模型。最后,使用 builder 对象构建 TensorRT 的引擎,并将其保存为文件。 最后,使用 TensorRT 加速推理过程。需要打开一个线程,从摄像头读取帧,并将帧数据传递给 TensorRT 引擎进行推理。TensorRT 会对输入帧进行目标检测,并返回检测结果。可以根据业务需要对检测结果进行后续处理,例如绘制边界框或保存结果。 总之,使用 YOLO5 和 TensorRT 加速打开摄像头的过程需要先打开摄像头获取帧,然后加载 YOLO5 模型并使用 TensorRT 优化为引擎文件,最后使用 TensorRT 进行推理加速。这样可以提高目标检测的速度,并实时处理摄像头的视频流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值