之前在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_demogit clone https://github.com/jkjung-avt/tensorrt_demos
在文件夹中点击yolo,里面含有一个requirements.txt的文件夹,包含了所需安装的库及版本,需要逐个安装。
安装pycuda在下载好的代码包中有写好的pycuda安装脚本,在脚本目录下运行即可。
./install_pycuda.sh
经过了比较漫长的等待之后,安装完成,似乎numpy也安装了,但是版本不太对。
安装numpy一开始直接安装numpy失败了,原因是缺少了Cython。
安装onnx=1.4.1pip3 install Cython
pip3 install numpy
由于onnx是限定版本的,所以得加上版本号。首先得安装依赖,不然又会报错。
测试使用tensorrt_demosudo apt-get install protobuf-compiler libprotoc-dev
pip3 install onnx==1.4.1
在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博客