yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测

软硬件版本

Jetson Nano 4G  

ubuntu 18.04
JP 4.5.1
CUDA 10.2
TensorRT 7.1.3.0

Python 3.6

一、下载源码

git clone https://github.com/AlexeyAB/darknet.git

二、编辑Makefile

cd darknet
sudo vim Makefile   

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第1张图片

三、编译

在darknet路径下输入

make -j4

编译成功,输入./darknet有如下输出

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第2张图片

四、将我们在windows下训练好的权重以及改好的文件复制到板子上的darknet文件夹相应位置

复制的文件有四个个分别是:

1.我们训练好的权重文件

2.修改过的cfg文件夹下的cfg/yolov4-tiny.cfg

3.修改后的cfg文件夹下的cfg/coco.data

4.修改后的cfg文件夹下的cfg/coco.name

我这里把修改后的四个文件统一放在了一个文件夹里面如下

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第3张图片

 通过WinSCP把这个文件夹直接拖到nano的darknet里面

五、USB摄像头测试

输入指令

./darknet detector demo ok/new.data ok/yolov4-tiny-new.cfg ok/yolov4-tiny-new_last.weights /dev/video1

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第4张图片

六、CSI摄像头检测

1.先安装 GStreame

sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev 

2.输入下面指令显示安装成功

3. 测试

./darknet detector demo ok/new.data ok/yolov4-tiny-new.cfg ok/yolov4-tiny-new_last.weights "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"

4.效果

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第5张图片

USB摄像头和CSI摄像头在FPS上差别不大,后续我还会进行tensorrt转换

重头戏!!!进行tensorrt转换并调用摄像头

一、下载源码

我是在电脑上下载的源码然后复制到nano板子上

GitHub - jkjung-avt/tensorrt_demos: TensorRT MODNet, YOLOv4, YOLOv3, SSD, MTCNN, and GoogLeNet

二、将我之前训练好的yolov4-tiny.weights和yolov4-tiny.cfg从电脑上复制到刚才下载好的文件中,路径是tensorrt_demos-master/yolo

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第6张图片

注意这里的yolov4-tiny.weights是我们之前训练好的,yolov4-tiny.cfg是我们训练时修改过的

三、看一下requirements.txt中我们是否满足条件

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第7张图片

四、返回上一层plugins文件夹下执行make编译

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第8张图片

 编译成功生成yolo_layer.o和libyolo.layer.so文件

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第9张图片

如果不编译的话后面运行onnx_to_tensorrt.py会有如下错误 yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第10张图片

五、将yolov4-tiny.weights文件转换为onnx格式

在tensorrt_demos-master/yolo下输入

python3 yolo_to_onnx.py -m yolov4-tiny

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第11张图片

 yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第12张图片

六、生成trt文件

python3 onnx_to_tensorrt.py -m yolov4-tiny

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第13张图片

 yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第14张图片

七、调用CSI检测(测试的时候都是在tensorrt_demos-master文件夹下进行)

这里检测代码我们可以看utils/camera.py,里面有说怎么调用

返回上层文件夹输入

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

即可调用CSI摄像头,FPS17左右

八、调用USB摄像头

输入

python3 trt_yolo.py --usb 1 -m yolov4_tiny

即可调用USB摄像头,FPS=26左右

九、测试MP4视频

python3 trt_yolo.py --video ceshi.MP4 -m yolov4_tiny

十、修改置信度

可以修改置信度也可以不修改,打开trt_yolo.py

yolov4-tiny使用jetson nano进行目标检测+tensorrt+CSI+USB摄像头检测_第15张图片

以上就是yolov4-tiny部署到jetson nano 以及tensorrt转换+测试的整个流程 

参考博文:

jetson-nano项目:使用csi摄像头运行yolov3-tiny demo_x16516581的博客-CSDN博客

Nvidia Jetson Nano 安装 GStreamer_.-CSDN博客

Jetson Nano使用YOLOv4进行目标检测_FriendshipTang的博客-CSDN博客

Jetson nano从烧录系统到DeepStream+TensorRT+yolov5检测CSI摄像头视频 - 哔哩哔哩

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

你可能感兴趣的:(opencv,计算机视觉)