之前在Darknet下使用Yolo V4-tiny进行了图像实时检测的测试,发现帧率一直只有十几,还有很大的提升空间,今天就来尝试一下使用tensorrt进行加速后的效果。

基础环境

Jetson Nano B01 4GB

CUDA 10.2.300

OpenCV 4.1.1 (显示没有用CUDA进行编译,不知道是否有影响)

Tensorrt 8.0.1.6

cuDNN 8.2.1.32

Python 3.6.9

下载tensorrt_demo

git clone https://github.com/jkjung-avt/tensorrt_demos

        在文件夹中点击yolo,里面含有一个requirements.txt的文件夹,包含了所需安装的库及版本,需要逐个安装。

 安装pycuda

        在下载好的代码包中有写好的pycuda安装脚本,在脚本目录下运行即可。

./install_pycuda.sh 

         经过了比较漫长的等待之后,安装完成,似乎numpy也安装了,但是版本不太对。

安装numpy

        一开始直接安装numpy失败了,原因是缺少了Cython。       

pip3 install Cython 

pip3 install numpy

安装onnx=1.4.1

        由于onnx是限定版本的,所以得加上版本号。首先得安装依赖,不然又会报错。

sudo apt-get install protobuf-compiler libprotoc-dev 

pip3 install onnx==1.4.1

测试使用tensorrt_demo 

       在yolo文件夹下有一个download_yolo.sh 文件,里面包含了yolov3 和yolov4的各种模型和cfg文件的下载,运行该脚本,或者自行放入相关模型在文件夹中。

         然后进入plugins文件夹下执行make编译。

       编译完成后,切到yolo文件夹下将yolov4-tiny.weights文件转换为onnx格式 。

python3 yolo_to_onnx.py -m yolov4-tiny

        转换成功后,再生成trt文件。出现了一些警告,应该问题不大。

python3 onnx_to_tensorrt.py -m yolov4-tiny 

        接下来就回到demos目录下,来测试一下了。

        先是经典照片

python3 trt_yolo.py --image dog.jpg -m yolov4-tiny

        不懂为啥图片也要加个帧率 ,接下来看看CSI摄像头的测试效果。

python3 trt_yolo.py --gstr "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1 ! nvvidconv flip-method=2 ! video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink" -m yolov4-tiny

        画面因为安装问题所以是倒置的,大家也可以用命令调整一下。帧率可以达到二十左右,效果还行,流畅了不少,按esc退出,ctrl+c会卡很久。测试一下视频。

python3 trt_yolo.py --video test.mp4 -m yolov4-tiny 

     帧率也在20左右,效果不错,很流畅。帧率可能还是和模型的关系比较大。

参考

​​​​​在Jetson Nano上进行实时目标检测:使用tensorRT加速yolov3 v4-tiny (tensorrt_demos)_Uncle Pan's Blog-CSDN博客_jetson nano yolov4加速

​​​​​​yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_hhhhhhky的博客-CSDN博客

jetson nano +yolov4-tiny使用tensorRT优化模型做到实时检测_戚晨夕的博客-CSDN博客