在Jetson AGX Xavier上用TensorRT加速YOLOv5

  • Post author:
  • Post category:其他


1.设备:Jetson AGX Xavier

2.步骤

1:下载YOLOv5 v5.0的官方代码,并根据readme文件安装,确保它能够在agx上运行。

git clone -b v5.0 https://github.com/ultralytics/yolov5.git 

2:下载TensorRT的代码,注意要和YOLO的版本相匹配

git clone https://github.com/wang-xinyu/tensorrtx.git

3:把下载好的YOLO的权重文件,比如说YOLOv5x.pt放到weights文件夹里面。

4:将tensorrtx的YOLOv5文件夹里面的gen_wts.py复制到第一步下载的YOLOv5文件夹里面

cp {tensorrtx}/yolov5/gen_wts.py {ultralytics}/yolov5

5:生成yolov5x.wts文件,这一步要先cd进入到YOLOv5的文件夹里面。

cd {ultralytics}/yolov5
python gen_wts.py yolov5x.pt
// a file 'yolov5s.wts' will be generated.

6:生成引擎文件,先cd进入tensorrtx文件夹下面的YOLOv5文件夹

新建build文件夹,并cd进入

cd {tensorrtx}/yolov5/
// update CLASS_NUM in yololayer.h if your model is trained on custom dataset
mkdir build
cd build

7:把第五步生成的YOLOv5x.wts文件复制到build文件夹里面,进行编译,我选择的是yolov5x的引擎文件,编译时间比较长。

cp {ultralytics}/yolov5/yolov5x.wts {tensorrtx}/yolov5/build
cmake ..
make
sudo ./yolov5 -s yolov5x.wts yolov5x.engine x

8:编译完成后,可以进行测试,测试用的图片是samples文件夹里面的两张图

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

目前参考网上的一些帖子,这个加速文件是不能直接检测视频的,我直接在samples文件里面放入视频文件会报错,然后我用CV2写了一个按帧抽取视频的脚本,建议直接把这个脚本放在YOLOv5文件夹下面运行,不用再安装cv2的库。问题在于如果将视频里面的全部帧抽出来体积会巨大,我把一个78M的视频全部抽帧,得到了4G的图片,而这4G的图片全部检测完又是4G,会把agx的内存占很大一部分。

import cv2
vc = cv2.VideoCapture('D:\\yolov5\\yolov5-master\\data\\01.avi')#视频输入路径
c=1

if vc.isOpened():
    rval , frame = vc.read()
else:
    rval = False

timeF = 1#隔多少帧抽取一张图片

while rval:
    rval, frame = vc.read()
    if (c%timeF == 0):
        cv2.imwrite('D:\\yolov5\\yolov5-master\\data\\video2pic\\01'+str(c)+'.jpg',frame )#视频输出路径
    c = c + 1
    cv2.waitKey(1)
vc.release()

3.存在问题

原作者在最后一步启动加速检测的命令时,还给了另外一种Python文件的方式

python yolov5_trt.py

运行这个py文件需要安装pycuda,但是当我安装完成后运行会报错,接着我之前下载好的包括编译好的整个tensorrt文件夹都没了,垃圾箱也没有,只能重新做一遍,非常的坑,各位朋友谨慎操作。



版权声明:本文为weixin_43855653原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。