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文件夹都没了,垃圾箱也没有,只能重新做一遍,非常的坑,各位朋友谨慎操作。