Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头

目录

0 准备:

1 烧录系统镜像

1)下载系统镜像

2)格式化SD卡

3)使用 Etcher 写入镜像

4)使用SD卡开机

2、增加swap内存

3、查看cuda版本

4、clone darknet源码并编译

 5、torch、torchvision安装

6、Yolov5环境搭建

7、TensorRT make & 推理测试

​ 8、安装和测试DeepStream

9、Yolov5检测

10、说明


0 准备:

(1)Jetson nano硬件【B01开发套件+USB摄像头+显示屏+网线】

(2)USB读卡器,64GB内存卡

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第1张图片

1 烧录系统镜像

1)下载系统镜像

英伟达官方下载地址:Jetson Download Center | NVIDIA Developer

下载系统镜像JetPack 4.5.1(4GB版本)

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第2张图片

2)格式化SD卡

下载SD Card Formatter软件并安装:https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-downloa 

使用SD Card Formatter格式化SD卡

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第3张图片

3)使用 Etcher 写入镜像

Etcher下载地址:balenaEtcher - Flash OS images to SD cards & USB drives 

烧录镜像,大概30分钟

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第4张图片

4)使用SD卡开机

烧写完成后,将SD卡插入Jetson Nano,开机,完成一些设置,如时区、语言、输入法等 。 

2、增加swap内存

由于Jetson nano的内存只有4GB,且与显存共用,后期编译torchvision,生成TensorRT推理引擎文件不够用,这里提前增加swap内存。

打开终端输入:

sudo vim /etc/systemd/nvzramconfig.sh

 通过vim打开nvzramconfig.sh,按"i"进入"insert"模式,修改mem=$((("${totalmem}" / 2 / "${NRDEVICES}") * 1024))为mem=$((("${totalmem}" * 2 / "${NRDEVICES}") * 1024)),按"ESC"退出"insert"模式,输入":wq"保存并退出,输入"reboot"重启开发板。

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第5张图片

打开终端输入:gnome-system-monitor

gnome-system-monitor

即可在监视管理器中看到内存增加。

3、查看cuda版本

Jetson nano烧录镜像时系统已经自带有cuda(本机cuda为10.2)和cudnn,所以不再需要自己安装。

1)vim .bashrc

2)在"insert"模式下,在末尾处加上

export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64\                         
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

3)"ESC"退出"insert"模式,":wq"保存退出

4)输入nvcc -V可查看到cuda版本为10.2.89

4、clone darknet源码并编译

1)下载darknet源码:

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

2)修改Makefile文件

 GPU=1

CUDNN=1

OPENCV=1

LIBSO=1

3)"ESC"退出"insert"模式,":wq"保存退出,make -j 编译

 4)编译结束,输入./darknet进入子目录,输入:

wget https://github.com/AlexeyAB/darknet/releases/download

下载yolov3-tiny.weights和yolov4-tiny.weights权重。

输入:

./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights exp-output test0.mp4

即可使用darknet框架的yolov4-tiny推理视频。

也可测试图片/摄像头:

./darknet detector test cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights data/dog.jpg	# 图片测试
./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights -ext_output test.mp4		# 视频测试
./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights -c 0		# 摄像头测试

USB摄像头推理:1920x1080分辨率

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第6张图片

 5、torch、torchvision安装

1)下载官方提供的torch-1.8.0-cp36-cp36m-linux_aarch64.whl包

https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第7张图片

 2)按照官方教程输入以下命令

sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
pip3 install Cython
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl # (按照自己torch1.8.0包的下载路径修改)
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第8张图片

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第9张图片

6、Yolov5环境搭建

1)下载yolov5 5.0版本(我用6.0版本出现了numpy和tensorflow的兼容冲突问题,所以后来用5.0版本)

 GitHub - ultralytics/yolov5 at v5.0Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第10张图片

 2)更新pip

python3 -m pip install --upgrade pip

 3)在yolov5项目下,右键打开终端输入pip3 install -r requirements.txt

4)可以提前下载好yolov5s.pt权重

5)python3 detect.py 推理结果如下

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第11张图片

7、TensorRT make & 推理测试

1)glone TensorRT

 注意tensorrtx版本要和yolov5 5.0版本对应上。

2)将yolov5文件夹和tensorrtx文件夹拷贝至home目录下。

cd tensorrtx
cp yolov5/gen_wts.py ~/yolov5
cd ~/yolov5
python3 gen_wts.py yolov5s.pt

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第12张图片

该部分代码实现将tensorrtx/yolov5/gen_wts.py复制到yolov5目录下运行,由yolov5s.pt生成yolov5s.wts。

cd ~/tensorrtx/yolov5
mkdir build && cd build
mv ~/yolov5/yolov5s.wts ./
cmake ..
make -j

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第13张图片

该部分代码实现将tensorrtx/yolov5/gen_wts.py复制到yolov5目录下运行,由yolov5s.pt生成yolov5s.wts。

./yolov5 -s yolov5s.wts yolov5s.engine s #生成engine文件

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第14张图片

./yolov5 -d yolov5s.engine ../samples   #推理samples文件夹下的2张图片

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第15张图片

 8、安装和测试DeepStream

1) Install Dependencies

执行以下命令以安装需要的软件包:

sudo apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4=2.11-1

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第16张图片 2)Install the DeepStream SDK

a. 下载 DeepStream 5.1 Jetson tar package deepstream_sdk_v5.1.0_jetson.tbz2

https://developer.nvidia.com/deepstream-sdk-v510-jetsontbz2

b. 输入以下命令以提取并安装DeepStream SDK:

sudo tar -xvf deepstream_sdk_v5.1.0_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.1
sudo ./install.sh
sudo ldconfig

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第17张图片

3)安装完成进入官方例程文件夹

cd /opt/nvidia/deepstream/deepstream-5.1/samples/configs/deepstream-app/

 测试:

deepstream-app -c source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第18张图片

9、Yolov5检测

1)git clone GitHub - DanaHan/Yolov5-in-Deepstream-5.0: Describe how to use yolov5 in Deepstream 5.0

git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第19张图片

2)

cd Yolov5-in-Deepstream-5.0/Deepstream 5.0
cp ~/darknet/data/coco.names ./labels.txt

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第20张图片

3)

vim config_infer_primary_yolovV5.txt   #修改第59行
vim deepstream_app_config_yoloV5.txt #修改第24行

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第21张图片

4)cp ~/tensorrtx/yolov5/build/yolov5s.engine ./ #复制之前生成的引擎文件到当前目录

cp ~/tensorrtx/yolov5/build/yolov5s.engine ./ #复制之前生成的引擎文件到当前目录

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第22张图片

 5)cd nvdsinfer_custom_impl_Yolo

6)make -j # 生成libnvdsinfer_custom_impl_Yolo.so文件

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第23张图片

7) cd .. #返回到DeepStream5.0/下

LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt

8)修改deepstream_app_config_yoloV5.txt文件,切换为usb摄像头测试:

Jetson nano部署过程记录:yolov5s+TensorRT+Deepstream检测usb摄像头_第24张图片

10、说明

本教程主要参考b站文章内容在自己的jetson nano测试:Jetson nano从烧录系统到DeepStream+TensorRT+yolov5检测CSI摄像头视频 - 哔哩哔哩

其他参考:

​​​​​​Ubuntu使用darknet实现YOLOv4-tiny预训练模型测试+训练自己的数据集+评估自己的模型_Xavier的博客-CSDN博客

Jetson Nano 学习笔记_GeekPlusA的博客-CSDN博客_jetson nano学习 

感谢其他博主分享的知识。

你可能感兴趣的:(嵌入式部署,计算机视觉,嵌入式硬件,arm,目标检测)