当前位置: 代码迷 >> 综合 >> jetson nano +yolov4-tiny使用tensorRT优化模型做到实时检测
  详细解决方案

jetson nano +yolov4-tiny使用tensorRT优化模型做到实时检测

热度:59   发布时间:2023-11-21 19:52:56.0

在写这篇博客前,我使用yolov5+deepstream完成了在jetson nano上的部署,部署完成后检测帧率很低,然后查阅各种资料和论文,发现直接使用pytorch模型转化并不会优化jetson nano底层算法,然后我使用各种转化方法,把能用的算法几乎都用了,还是做不到实时检测(可能还是模型的问题),也尝试了yolov3 ,yolov4 ,最终效果都不是很好。
然后我看到一篇博主分享的博客(https://blog.csdn.net/ZeyiRTangent),使用yolov4-tiny+tensorRT可以做到实时检测(目前yolov4-tiny+tensorRT是效果最好的组合),我写下这篇博客只是记录我使用yolov4-tiny+tensorRT检测时遇到的一些问题。感谢这位博主的分享(https://blog.csdn.net/weixin_54603153)

文章目录

  • 前言
  • 一、环境
  • 二、安装步骤
    • 1.安装pycuda
    • 2.安装numpy
    • 3.安装onnx=1.4.1
  • 三、具体步骤
    • 1.下载tensorrt_demos代码
    • 2.编译
    • 3.生成onnx文件
    • 4.生成经过tensorRT优化后的模型文件(.trt文件)
    • 5.调用usb摄像头进行目标检测
  • 总结


前言

这篇博客并不是我的原创,只是记录我的一些学习经历,并在其他博主的博客上做了一些补充。希望可以帮到大家。在使用deepstream部署时检测帧率大概只有5帧左右,使用yolov4-tiny+tensorRT可以做到40~50帧(在这里我只做到了25帧左右),做到实时检测时没有问题的,下面我们进入正文。

一、环境

具体所需的硬件环境和软件环境可以看我上一篇博客,里面详细记录了部署前的准备,在这里我不做过多赘述。
基本环境准备好后

还需要:

1.pycuda =2019.1.2
2.numpy=1.19.5
3.onnx=1.4.1

二、安装步骤

1.安装pycuda

在此我附上百度网盘链接:

链接:https://pan.baidu.com/s/1DL5sre_HhU9P9bSUPDRAKw
提取码:uwc4
下载之后执行一下命令进行安装

cd pycuda-2019.1.2/  
python3 configure.py --cuda-root=/usr/local/cuda-10.2 
sudo python3 setup.py install

2.安装numpy

首先我们先安装pip3

sudo apt-get install python3-pip 

然后安装Cython

pip3 install Cython

接下来我们安装numpy

pip3 install numpy

3.安装onnx=1.4.1

首先在nano上安装依赖

sudo apt-get install protobuf-compiler libprotoc-dev 

然后就可以安装onnx了(不要换源,我换源安装之后环境出错了)

pip3 install onnx==1.4.1

三、具体步骤

1.下载tensorrt_demos代码

(感谢这位博主的分享:https://blog.csdn.net/ZeyiRTangent)

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

下载之后进入yolo文件夹下
在yolo文件夹下有一个download_yolo.sh 文件,里面包含了yolov3 和yolov4的各种模型和模型生成文件

运行downloda_yolo.sh文件

sh download_yolo.sh

然后就会下载相应的模型和生成模型文件(这里我使用的是yolov4-tiny和其模型生成文件)
下载完成后在yolo文件夹下会出现模型文件和模型生成文件

2.编译

此时不要直接生成运行yolo_toTonnx.py文件,会出现错误提示你没有进行编译
接下来我们回到上一级目录

cd ..

进入plugins文件夹进行编译

cd plugins
make

编译完成后就可以进行模型生成

3.生成onnx文件

执行yolo_to_onnx.py文件,我选用的是yolov4-tiny-416

python3 yolo_to_onnx.py -m yolov4-tiny-416

执行之后在yolo文件夹下就会生成一个.onnx文件

4.生成经过tensorRT优化后的模型文件(.trt文件)

执行

python3 onnx_to_tensorrt.py -m yolov4-tiny-416

执行之后在yolo文件夹下你可以看到.trt文件

5.调用usb摄像头进行目标检测

这里便是我要补充的地方,一些博主的博客里提到在utils/camera.py文件中有相应的声明
调用usb摄像头需要修改camera.py文件的某个部分

修改前
在这里插入图片描述
修改后
在这里插入图片描述
这里为什么要修改为False,在注释第二句话可以看到,如果设置False,我们打开使用cv2.VideoCapture()
机制的摄像头,修改后保存。

执行

python3 trt_yolo.py --usb 0 -m yolov4_tiny-416

接下来就可以看到检测结果了

基本上可以做到实时检测。

下面是一个博主检测的结果,检测帧率达到了38(我只做到了25)
在这里插入图片描述

需要配置好的tensorrt_demo文件可以在下面留下邮箱,我看到后会发到相应邮箱里。

总结

这里对文章进行总结:
这篇文章是我在部署yolov5后为了提升帧率写的一篇博客,在调用USB摄像头时,出现了一点小插曲,所以我写下这篇文章记录下来,后续我会在对yolov5进行优化。感谢这些博主的分享,在此附上链接
(https://blog.csdn.net/ZeyiRTangent)
(https://blog.csdn.net/weixin_54603153)

  相关解决方案