Jetson Nano 使用教程、yolo、DeepStream

Jetson Nano


一、Jetson Nano系统安装及基础环境配置

建议配个5V 4A的电源,5V 2A的电源需要将板子设定在5W功耗模式下,且会导致机器莫名其妙重启等问题。有条件的再加个风扇散热

1.系统安装

直接将镜像烧录到SD卡中插入设备即可安装系统。下载的时候建议用迅雷下载,十来分钟就能下完
镜像下载链接:Jetson Nano镜像(直接复制这个链接到迅雷就可以下载了,当然点击进去也可以直接用浏览器下载)
烧录镜像软件:win32disk、SD Memory Card Formatter、Etcher等都可以

2.换源

备份原来的source.list文件

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 

修改source.list文件

sudo gedit /etc/apt/sources.list

选择以下的一个源替换文件中的内容
清华源

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiversedeb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse

中科大源

deb http://mirrors.ustc.edu.cn/ubuntu-ports bionic main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports bionic-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports bionic-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports bionic-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports bionic main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports bionic-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports bionic-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb http://mirrors.ustc.edu.cn/ubuntu-ports bionic-proposed main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports bionic-proposed main restricted universe multiverse

阿里源

deb https://mirrors.aliyun.com/ubuntu-ports/ bionic main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/s bionic-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.aliyun.com/ubuntu-ports/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu-ports/ bionic-proposed main restricted universe multiverse

替换完后跟更新一下即可,不要乱upgrade,会出现老多莫名其妙的错误

sudo apt-get update

3.添加cuda路径

安装完系统后直接nvcc -V查看cuda版本会显示找不到命令,其实JetPack包里面已经装好了cuda,只不过没添加到bashrc中,将cuda的环境变量添加到改文件即可

sudo gedit ~/.bashrc
#复制下面三行到改文件的最下面
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda
#保存后执行下面的命令
source ~/.bashrc

开一个新的终端输入nvcc -V即可看到cuda版本号了

4.安装conda、pip

(1):安装conda

更新:原本系统的python默认版本是3.6,在安装完Archiconda后系统默认python版本变更为3.7,且出现了pip版本混乱的问题,后面我重新刷机不再安装Archiconda,有遇到这个问题的朋友可以一起讨论下
anaconda是不支持arm架构的这些嵌入式设备的,所以想在arm架构上使用conda命令只能使用Archiconda或者是miniconda,nano上我用的是Archiconda
GitHub:Archiconda
在这里插入图片描述
下载完后进入到文件所在的位置,执行

chmod 777 Archiconda3-0.2.3-Linux-aarch64.sh
./Archiconda3-0.2.3-Linux-aarch64.sh

安装完成后需要添加变量到bashrc,不然会出现创建环境的时候权限不够的问题

sudo gedit ~/.bashrc
#在最后添加
export PATH=~/archiconda3/bin:$PATH
#保存后退出执行
source ~/.bashrc

(2):安装pip

sudo apt-get install libhdf5-serial-dev hdf5-tools zlib1g-dev zip libjpeg8-dev libhdf5-dev  python3-pip

升级pip,有些博主写的一些命令虽然可以升级pip3版本,但是后续会出现其他问题,具体问题参考一个博主写的:pip3报错
总结一下比较正确的升级命令是

python3 -m pip install --upgrade pip

二、Jetson Nano目标检测

yolo系列

1.引入库

GitHub链接:darknet
权重文件:yolov4-tiny.weight
下载解压后

cd darknet-master
make -j4

测试

#图片
./darknet detect cfg/yolov4-tiny.cfg yolov4-tiny.weights data/dog.jpg

在这里插入图片描述

#本地视频,需自己下载放入
./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights data/sample_720p.mp4

在这里插入图片描述

#usb实时检测,默认不输入参数即调用摄像头
./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights 
#但是不输入参数是以原画质输入的,我的usb是1080p的,检测帧率只有2-3帧,可以加参数:/dev/video0,输入的变为640*480,帧率就有9帧左右
./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights /dev/video0

在这里插入图片描述

2.模型训练

训练一个人脸识别的模型,参考博客:win10 下的YOLOv3 训练 wider_face 数据集检测人脸
数据集下载链接:WIDER FACE(超快,国内也能下,两分钟下完3G)
因为参考博客是再Win10上的,所以有些地方需要修改一下:
4、(1)配置cfg文件:将testing下的batch和subdivisions加#注释掉
在训练开始后报错:CUDA Error: out of memory,把文件中第一个subdivisions改成8,batch改成8的倍数
max_batches 改为 max_batches = 2000 (第20行)max_batches 的数量为检测的目标数 * 2000
steps 改为 steps=1600,1800 (第22行)steps =max_batches 0.8 ,0.9
classes 改为 classes =1  (第 610 、696、783 行)即自己模型的类别数
filters 改为 filters =18 (只改三个 yolo 层的上一层的 filters 即 第 603、689 、776 行 )即 filters =3
(classes+5)

4、(3)配置Makefile文件:把NVCC=nvcc改为NVCC=/usr/local/cuda-10.2/bin/nvcc
5、开始训练:
回到/darknet-master目录,先make clean再make编译一下(编译失败改完Mkefile后记得再执行一下make clean再执行make),然后执行

#单GPU训练
./darknet detector train build/darknet/x64/data/obj.data build/darknet/x64/cfg/yolov3-obj.cfg build/darknet/x64/darknet53.conv.74 
#多GPU训练,我用的是四块就0123,同理两块就01
./darknet detector train build/darknet/x64/data/obj.data build/darknet/x64/cfg/yolov3-obj.cfg build/darknet/x64/darknet53.conv.74 -gpus 0,1,2,3
#中断后继续训练
./darknet detector train build/darknet/x64/data/obj.data build/darknet/x64/cfg/yolov3-obj.cfg buckup/yolov3-obj.weights

部分参数介绍:

每一次迭代的第一个数值是迭代次数,每一百次迭代存储一次模型,每个类一般迭代2000次
avg loss:是错误率指标,刚开始的时候会很大,最后会降到个位数甚至接近0

训练完成在backup文件夹下生成四个权重文件,只要用last那个就行
在这里插入图片描述
图片测试
在这里插入图片描述

3.部署模型到DeepStream

所需要准备的文件(参考第二部模型训练):

data.name
yolov3-obj.cfg
yolov3-obj.weights

首先将上面的文件复制到objectDetector_Yolo文件夹下,然后打开终端复制config_infer_primary_yoloV3.txt为config_face.txt,如:

sudo cp config_infer_primary_yoloV3.txt config_face.txt
#文件有两处需要更具模型更改的地方
custom-network-config=yolov3-obj.cfg
model-file=yolov3-obj.weights

复制deepstream_app_config_yoloV3.txt为deepstream_face.txt如:

sudo cp deepstream_app_config_yoloV3.txt deepstream_face.txt
#
labelfile-path=data.name
config-file=config_face.txt

打开nvdsinfer_custom_impl_Yolo文件夹,修改nvdsparsebbox_Yolo.cpp文件下classes

static const int NUM_CLASSES_YOLO = 80;#将数字修改为模型类别数

保存退出后执行make clean后再次make
执行deepstream-app -c deepstream_face.txt即可

三、Jetson Nano TensorRT DeepStream

DeepStream已经嵌入TensorRT,所以就不需要去再烦心TensorRT的配置问题,在DeepStream里面可以直接使用TensorRT

1.安装DeepStream

先下载DeepStream SDK包:DeepStream5.1

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
sudo apt-get install librdkafka1=0.11.3-1build1

安装

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

安装查看的时候出现 No EGL Display的错误
在这里插入图片描述

添加unset DISPLAY变量

sudo vim ~/.bashrc
unset DISPLAY
source ~/.bashrc

查看DeepStream安装情况,安装完成

deepstream-app --version-all

在这里插入图片描述

2.测试DeepStream

(1)deepstream-test

cd /opt/nvidia/deepstream/deepstream-5.1/sources/apps/sample_apps/deepstream-test1/
#修改Makefile中cuda的版本:CUDA_VER?= -->CUDA_VER=10.2  
sudo make
./deepstream-test1-app /opt/nvidia/deepstream/deepstream-5.1/samples/streams/sample_720p.h264

视频存储路径都在/opt/nvidia/deepstream/deepstream-5.1/samples/streams/下,可以选择不同的视频测试

(2)deepstream-app

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 

在这里插入图片描述

在这里插入图片描述
补充:
配置文件中,也就是source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt 或同目录其他文件中,有一个跟踪的选项可以实时跟踪检测到的物体,具体信息如下:

[tracker]
#1开启追踪,0关闭追踪
enable=1   
#width和height必须是32的倍数
tracker-width=640   
tracker-height=384
#以下三个so文件是三个不同的跟踪器
#IOU 追踪器的性能最好,但是同一物件的编号并不是太稳定
#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_iou.so
#NVDCF 追踪器的编号最为稳定,但性能大概只有 IOU 的 1/4,最多只能承受 2 路视频的实时分析
#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_nvdcf.so
#KLT 算法可以支持到8路以内的实时识别,追踪能力也比 IOU 好不少,不过这个算法对 CPU 的占用率比较高
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_klt.so

(3)deepstream-yolov3

cd /opt/nvidia/deepstream/deepstream-5.1/sources/objectDetector_Yolo
#将权重文件和配置文件下载复制到这个文件夹下面,然后开打nvd开头的文件夹下面执行
sudo make
cd ..
#运行即可
deepstream-app -c deepstream_app_config_yoloV3.txt
deepstream-app -c deepstream_app_config_yoloV3_tiny.txt

在运行yolo和实时摄像头的时候有可能出现以下错误:
在这里插入图片描述
在运行前输入export DISPLAY=:1 or 0即可,但是这样开机后再运行还是会出错,永久更改的话就去bashrc里面把之前安装deepstream的unset DISPLAY给去掉就行了,记得source一下(unset DISPLAY是因为在安装deepstream时候显示EGL错误加入环境变量的,暂时没有找到原因,但只有这个解决方案,上面显示的这个错误也是没找到解决方法,后面看了半天把这个删掉就行,重启仍有效,所以把这个问题po出来,有同样问题的朋友可以按照这个改一下,我暂时没遇到过其他问题)

yolov3检测加跟踪,yolov3.weights下是5-6帧,tiny下是40多帧
在这里插入图片描述

(4)deepstream-usb

我测试的时候用的是普通的usb接口摄像头,即插即用
在测试USB摄像头前,需要获取正确的摄像头参数并更改配置文件,不然会一直报错运行不起来
获取摄像头参数

#安装v4l2
sudo apt-get install v4l-utils
#查看v4l2设备
v4l2-ctl --list-devices
#运行后显示如下,说明usb摄像头所在的位置是/dev/video0
#USB 2.0 Camera (usb-3610000.xhci-2):
#        /dev/video0
#查看相机参数
v4l2-ctl --device=/dev/video0 --list-formats-ext

相机参数显示如图
在这里插入图片描述
依照上图显示的相机参数,更改source1_usb_dec_infer_resnet_int8.txt文件

cd /opt/nvidia/deepstream/deepstream-5.1/samples/configs/deepstream-app
sudo geidt source1_usb_dec_infer_resnet_int8.txt
#更改[source0]下的信息
camera-width=800
camera-height=600
camera-fps-n=21
#更改[primary-gie]下的信息,这个是模型文件的
#在步骤2的时候在model文件下已经生成了启动文件,所以这边不需要在重新生成启动文件
model-engine-file=../../models/Primary_Detector_Nano/resnet10.caffemodel_b1_gpu0_fp16.engine
config-file=config_infer_primary_nano.txt
#保存退出后运行
deepstream-app -c source1_usb_dec_infer_resnet_int8.txt

在这里插入图片描述

### 部署YOLO模型到NVIDIA Jetson Nano #### 准备环境和工具 为了成功在NVIDIA Jetson Nano上部署YOLO模型,需要先安装必要的软件包以及配置开发环境。这包括但不限于Python库、CUDA Toolkit、cuDNN以及其他依赖项[^1]。 #### 获取并准备YOLOv5模型 下载官方发布的预训练权重文件或是自行训练得到的特定场景下的YOLOv5权重。对于Jetson Nano而言,建议采用较小版本如`yolov5s.pt`来减少资源占用并提高推理速度。完成下载后需转换此PyTorch格式(.pt)至ONNX格式以便后续优化处理。 ```bash # 下载 yolov5 模型仓库 git clone https://github.com/ultralytics/yolov5.git cd yolov5 # 安装需求 pip install -r requirements.txt # 导出 ONNX 文件 (假设使用的是 yolov5s 版本) python export.py --weights yolov5s.pt --include onnx ``` #### 使用TensorRT加速YOLOv5 通过将上述获得的`.onnx`文件进一步转化为适用于TensorRT引擎运行的形式——即`.engine`文件,可以显著提升性能表现。具体操作可通过调用`trtexec`命令行工具实现,该工具位于CUDA安装目录下。 ```bash # 转换 .onnx 至 TensorRT engine (.engine) /path/to/trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine \ --explicitBatch --workspace=256 --fp16 ``` #### 整合DeepStream SDK进行视频流分析 利用NVIDIA提供的DeepStream SDK框架能够方便快捷地接入摄像头或其他媒体源作为输入,并实现实时图像处理功能。创建一个新的GStreamer管道定义文件(`pipeline.config`)用于描述数据流动路径;编写应用程序代码读取生成好的`.engine`文件加载入内存执行推断任务。 ```c++ // C++ 示例:初始化 DeepStream 并加载 TensorRT Engine 进行预测 #include <gst/gst.h> ... std::string model_path = "/path/to/yolov5s.engine"; nvinfer1::ICudaEngine* load_engine(const std::string& path); void init_deepstream_pipeline(); ... int main() { GstElement *pipeline; // 初始化 GStreamer 和 DeepStream 组件 gst_init(NULL, NULL); pipeline = gst_parse_launch("filesrc location=test.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! nvvidconv ! queue max-size-buffers=0 max-size-bytes=0 max-size-time=0 ! nvinferserver config-file-path=pipeline.config batch-size=1 ! fakesink", NULL); // 加载 TensorRT 推理引擎 auto trt_engine = load_engine(model_path.c_str()); // 启动流水线 gst_element_set_state(pipeline, GST_STATE_PLAYING); } ``` #### 测试与验证 最后一步是对整个系统进行全面测试以确认各部分工作正常无误。可以通过播放一段本地存储的视频片段或者连接USB摄像机来进行实际效果评估。观察输出日志中的FPS指标判断是否达到了预期水平,必要时调整参数重新编译直至满意为止。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值