赞
踩
一、 在转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是一样的!!!!!自己手动输入的时候很容易输错。
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
问题:
tensorRT加速yolov5 arguments not right!问题解决_amosjy的博客-CSDN博客_arguments not right!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。