目录
0 准备:
(1)Jetson nano硬件【B01开发套件+USB摄像头+显示屏+网线】
(2)USB读卡器,64GB内存卡
1 烧录系统镜像
1)下载系统镜像
英伟达官方下载地址:Jetson Download Center | NVIDIA Developer
下载系统镜像JetPack 4.5.1(4GB版本)
2)格式化SD卡
下载SD Card Formatter软件并安装:https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-downloa
使用SD Card Formatter格式化SD卡
3)使用 Etcher 写入镜像
Etcher下载地址:balenaEtcher - Flash OS images to SD cards & USB drives
烧录镜像,大概30分钟
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"重启开发板。
打开终端输入: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分辨率
5、torch、torchvision安装
1)下载官方提供的torch-1.8.0-cp36-cp36m-linux_aarch64.whl包
https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl
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
6、Yolov5环境搭建
1)下载yolov5 5.0版本(我用6.0版本出现了numpy和tensorflow的兼容冲突问题,所以后来用5.0版本)
GitHub - ultralytics/yolov5 at v5.0
2)更新pip
python3 -m pip install --upgrade pip
3)在yolov5项目下,右键打开终端输入pip3 install -r requirements.txt
4)可以提前下载好yolov5s.pt权重
5)python3 detect.py 推理结果如下
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
该部分代码实现将tensorrtx/yolov5/gen_wts.py复制到yolov5目录下运行,由yolov5s.pt生成yolov5s.wts。
cd ~/tensorrtx/yolov5
mkdir build && cd build
mv ~/yolov5/yolov5s.wts ./
cmake ..
make -j
该部分代码实现将tensorrtx/yolov5/gen_wts.py复制到yolov5目录下运行,由yolov5s.pt生成yolov5s.wts。
./yolov5 -s yolov5s.wts yolov5s.engine s #生成engine文件
./yolov5 -d yolov5s.engine ../samples #推理samples文件夹下的2张图片
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
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
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
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
2)
cd Yolov5-in-Deepstream-5.0/Deepstream 5.0
cp ~/darknet/data/coco.names ./labels.txt
3)
vim config_infer_primary_yolovV5.txt #修改第59行
vim deepstream_app_config_yoloV5.txt #修改第24行
4)cp ~/tensorrtx/yolov5/build/yolov5s.engine ./ #复制之前生成的引擎文件到当前目录
cp ~/tensorrtx/yolov5/build/yolov5s.engine ./ #复制之前生成的引擎文件到当前目录
5)cd nvdsinfer_custom_impl_Yolo
6)make -j # 生成libnvdsinfer_custom_impl_Yolo.so文件
7) cd .. #返回到DeepStream5.0/下
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt
8)修改deepstream_app_config_yoloV5.txt文件,切换为usb摄像头测试:
10、说明
本教程主要参考b站文章内容在自己的jetson nano测试:Jetson nano从烧录系统到DeepStream+TensorRT+yolov5检测CSI摄像头视频 - 哔哩哔哩
其他参考:
Ubuntu使用darknet实现YOLOv4-tiny预训练模型测试+训练自己的数据集+评估自己的模型_Xavier的博客-CSDN博客
Jetson Nano 学习笔记_GeekPlusA的博客-CSDN博客_jetson nano学习
感谢其他博主分享的知识。