当前位置:   article > 正文

Yolo V5 转tensorrt_yolov5 tensorrt

yolov5 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里来进行模型的转换和推断了

  1. git clone https://github.com/wang-xinyu/tensorrtx.git
  2. git clone https://github.com/ultralytics/yolov5.git
  3. # download its weights 'yolov5s.pt'
  4. # 这边要注意的是,在yolov5仓库中,在weights内要执行sh文件时,需要修改里面的路径,不然会找不到utlis文件,
  5. # 或者你也可以把sh文件移出上一层文件夹中,再执行,就不会有路径问题了。
  6. # copy tensorrtx/yolov5/gen_wts.py into ultralytics/yolov5
  7. # ensure the file name is yolov5s.pt and yolov5s.wts in gen_wts.py
  8. # go to ultralytics/yolov5
  9. python gen_wts.py
  10. # 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的那几个头文件的位置。

  1. # tensorrt
  2. include_directories(/usr/include/x86_64-linux-gnu/)
  3. link_directories(/usr/lib/x86_64-linux-gnu/)

然后添加如下两行

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

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

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

这个代码来源是

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

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

  1. # put yolov5s.wts into tensorrtx/yolov5
  2. # go to tensorrtx/yolov5
  3. # ensure the macro NET in yolov5.cpp is s 这个s不s,应该根据你一开始生成的wts权重文件是哪个版本决定的
  4. mkdir build
  5. cd build
  6. # cmake的时候记得修改cmakefile文件的链接库路径和头文件路径
  7. cmake ..
  8. make
  9. sudo ./yolov5 -s # serialize model to plan file i.e. 'yolov5s.engine'
  10. # 推断图片,samples下面应该放你的图片,格式没要求(jpg,其他格式博主没试过)
  11. 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,如果执行成功,那就没问题了。

  1. #tensorrt
  2. 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!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号