Jetson Nano部署实现(一)——Yolov5目标检测-Jetson Nano部署

本文档详细介绍了如何在Jetson Nano上部署Yolov5目标检测模型,包括烧录系统镜像、安装远程登录工具PuTTY和WinSCP、设置VNC、安装DeepStream SDK、生成和测试yolov5s.engine文件,以及最终的部署和测试过程。适合对嵌入式AI和Jetson Nano感兴趣的读者。

目录

1.烧录系统镜像

1.1 下载系统镜像

1.2 格式化 SD 卡

1.3 使用 Etcher 写入镜像

1.4 使用SD卡开机

2.远程登录工具

2.1 安装和使用远程登录工具PuTTY

(1)下载和安装PuTTY

(2) 确定自己开发板的 IP 地址

(3)使用PuTTY远程登录Nano开发板

2.2 安装和使用远程文件传输软件WinSCP

2.3 VNC 远程桌面控制(可用可不用 我这里没有用到)

(1) 安装 vino

(2) Enable VNC 服务

(3) 设置 VNC

(4) 重启机器,验证是否设置 vnc 成功。

(5) 设置开机自启动 VNC Server

(6) 连接 VNC Server

3.安装和测试DeepStream

3.1 Install Dependencies

3.2 Install the DeepStream SDK

3.3 DeepStream测试(未进行测试)

4.下载调试yolov5项目(computer!)

5.生成wts文件(computer!)

5.1 克隆tensorrtx

5.2 生成yolov5s.wts文件

6 生成yolov5s.engine文件(Nano!)

(每次修改参数后都需要重新生成engine)

6.1 克隆tensorrtx

6.2  编译tensorrtx/yolov5

6.3 copy文件'yolov5s.wts' 文件到tensorrtx/yolov5/build目录下

6.4 生成yolov5s.engine

7 使用DeepStream部署yolov5s

7.1 拷贝yolov5 deepstream文件

7.2 拷贝yolov5.engine

7.3 编译

8 部署测试

8.1 测试视频文件推理

8.2 USB摄像头视频测试

8.3 CSI摄像头视频测试


1.烧录系统镜像

1.1 下载系统镜像

英伟达官方下载地址 :https://developer.nvidia.com/embedded/downloads

下载系统镜像JetPack 4.5.1(注意有4GB和2GB两个版本,根据Jetson Nano的型号选择相应的版本),这里我是4G的镜像。 

1.2 格式化 SD 卡

下载SD Card Formatter软件并安装,使用 SD Card Formatter 格式化 SD 卡。

下载地址:https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-download/

1.3 使用 Etcher 写入镜像

下载Etcher软件并安装 ,下载地址:https://www.balena.io/etcher/

使用Etcher软件写入镜像,大概30分钟,镜像写入完成。单击Flash from file选中镜像压缩包。

1.4 使用SD卡开机

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

2.远程登录工具

2.1 安装和使用远程登录工具PuTTY

(1)下载和安装PuTTY

下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/

单击Next

选择自己的位置,单击next

单击Install

(2) 确定自己开发板的 IP 地址

在安装系统中,在界面通过 ctr+Alt+T 打开命令提示符,输入:ifconfig 找到对应的有线网卡 eth0 的 IP地址。eg.我的IP地址为:192.168.1.109

(3)使用PuTTY远程登录Nano开发板

打开 PuTTY , 输入IP地址和端口号(IP:192.168.1.109 端口号默认22),默认开启 ssh 服务,单击Open;输入用户名和密码后进入终端模式。

2.2 安装和使用远程文件传输软件WinSCP

WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端,同时支持 SCP 协议。

它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。方便在 windows 和 linux 两个不同的系统之间传输文件。

下载地址: https://winscp.net/

下载安装步骤如下:

单击我接受

自定义安装位置,单击下一步

选择自己的安装位置

一路傻瓜式操作到最后一步~单击安装,即可完成。

主机名为ip地址:192.168.1.109,端口号默认22,用户名和密码为班子设置的用户名和密码,eg.用户名:ciwei

2.3 VNC 远程桌面控制(可用可不用 我这里没有用到)

(1) 安装 vino

利用PuTTY, 在Nano上执行:

sudo apt update

sudo apt install vino

(2) Enable VNC 服务

执行

sudo ln -s ../vino-server.service /usr/lib/systemd/user/graphical-

session.target.wants

配置 VNC server,执行

gsettings set org.gnome.Vino prompt-enabled  false

gsettings set org.gnome.Vino require-encryption  false

编辑 org.gnome.Vino.gschema.xml文件,执行

sudo vi  /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml

文件最后添加

<key name='enabled' type='b'>

<summary>Enable remote access to the desktop</summary>

<description>

If true, allows remote access to the desktop via the RFB protocol. Users on remote machines may then connect to thedesktop using a VNC viewer.

</description>

<default>false</default>

</key>

设置为 Gnome 编译模式

sudo glib-compile-schemas /usr/share/glib-2.0/schemas

(3) 设置 VNC

登陆密码('thepassword' 修改为自己的密码)

gsettings set org.gnome.Vino authentication-methods "['vnc']"

gsettings set org.gnome.Vino vnc-password $(echo -n 'thepassword'|base64)

(4) 重启机器,验证是否设置 vnc 成功。

sudo reboot

(5) 设置开机自启动 VNC Server

上述方式属于手动启动,每次都需要手动启动会比较麻烦,下面会设置开机自启动的形式。

VNC 服务器只有在您本地登录到 Jetson Nano之后才可用。如果希望 VNC 自动可用,可使用系统设置应用程序来启用自动登录。

gsettings set org.gnome.Vino enabled true

mkdir -p ~/.config/autostart

vi ~/.config/autostart/vino-server.desktop

将下面的内容添加到该文件中,保存并退出。

[Desktop Entry]

Type=Application

Name=Vino VNC server

Exec=/usr/lib/vino/vino-server

NoDisplay=true

(6) 连接 VNC Server

使用 vnc viewer 软件进行 VNC 连接,首先需要查询 IP 地址; 输入 IP 地址后点击 OK,双击对应的VNC 用户输入密码,最后进入到 VNC 界面。

3.安装和测试DeepStream

3.1 Install Dependencies

在nano板子上的命令行,执行以下命令,安装需要的软件包:

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(这一步第一次安装失败)

3.2 Install the DeepStream SDK

Using the DeepStream tar package

1.下载 DeepStream 5.1 Jetson tar package deepstream_sdk_v5.1.0_jetson.tbz2, 并用winscp拖到 Jetson Nano。

2.输入以下命令以提取并安装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.3 DeepStream测试(未进行测试)

执行命令:(编辑文件prebuild.sh,注释掉除yolov3-tiny的语句)

cd /opt/nvidia/deepstream/deepstream-5.1/sources/objectDetector_Yolo

执行命令:(下载yolov3-tiny.cfg和yolov3-tiny.weights)

./prebuild.sh

执行命令:

deepstream-app -c deepstream_app_config_yoloV3_tiny.txt

4.下载调试yolov5项目(computer!)

可参照本人前几篇博客下载调试~步骤如下:

1.安装Anaconda和Pycharm 并下载yolov5代码

2.安装所需库:(pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt)

3.将权重文件yolov5s.pt/yolov5m.pt/yolov5l.pt/yolov5x.pt放置在weights文件夹下

4.训练自己的数据集

另:这里我用的yolov5s第四版,用之前的版本在生成yolov5.engine时会报错。

5.生成wts文件(computer!)

5.1 克隆tensorrtx

git clone https://github.com/wang-xinyu/tensorrtx.git

克隆失败的话直接去上述网址下载。

5.2 生成yolov5s.wts文件

将文件tensorrtx/yolov5/gen_wts.py 复制到自己的yolov5文件夹下,同时将自己的best.pt也复制到主文件夹下。

修改gen_wts.py为:

确保yolov5s.pt and yolov5s.wts在gen_wts.py下,cd 进入yolov5文件夹下 执行:

python gen_wts.py

 'yolov5s.wts' 生成

6 生成yolov5s.engine文件(Nano!)

(每次修改参数后都需要重新生成engine)

6.1 克隆tensorrtx

克隆tensorrtx文件夹至nano板子上。

6.2  编译tensorrtx/yolov5

修改yolov5文件夹下yololayer.h ,默认类别数80改为1。

cd  进入tensorrtx/yolov5 ,执行以下代码。(确保yolov5.cpp is s)

mkdir build

cd build

cmake ..

make

注意: by default, yolov5 script generate model with batch size = 1, FP16 mode and s model.(我使用的S网络,不需要修改)

#define USE_FP16 // comment out this if want to use FP32

#define DEVICE 0 // GPU id

#define NMS_THRESH 0.4

#define CONF_THRESH 0.5

#define BATCH_SIZE 1

#define NET s // s m l x

如果你需要改变上述默认参数,可在编译前修改文件 yolov5.cpp,还可改变yololayer.h中的参数。

static constexpr int CLASS_NUM = 80;

static constexpr int INPUT_H = 608;

static constexpr int INPUT_W = 608;

6.3 copy文件'yolov5s.wts' 文件到tensorrtx/yolov5/build目录下

6.4 生成yolov5s.engine

输入以下命令执行:

sudo ./yolov5 -s yolov5s.wts yolov5s.engine s

sudo ./yolov5 -d yolov5s.engine ../samples

7 使用DeepStream部署yolov5s

7.1 拷贝yolov5 deepstream文件

拷贝yolov5.zip(这里是他们给出的官方yolov5)到/opt/nvidia/deepstream/deepstream-5.1/sources/,然后解压文件。

sudo chmod -R 777 /opt/nvidia/deepstream/deepstream-5.1/sources/

cd /opt/nvidia/deepstream/deepstream-5.1/sources/

unzip yolov5.zip

7.2 拷贝yolov5.engine

cp    /home/ciwei(改为自己的用户名)/tensorrtx/yolov5/build/yolov5s.engine     /opt/nvidia/deepstream/deepstream-5.1/sources/yolov5

备注:yolov5 deepstream文件yolov5.zip的来源:https://github.com/marcoslucianops/DeepStream-Yolo

修改文件夹DeepStream-Yolo/external/yolov5/nvdsinfer_custom_impl_Yolo下的文件yololayer.h和yololayer.cu使其可以在YOLOv5 V4.0上工作

7.3 编译

针对自己的数据集,修改config_infer_primary.txt中的参数,以及类别名称文件labels.txt。

num-detected-classes=80

labels修改为:fire

修改后执行:

cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolov5

CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo

samples下有测试图片,可以用来测试:

另.如要改变NMS_THRESH, 编辑文件nvdsinfer_custom_impl_Yolo/nvdsparsebbox_Yolo.cpp并重新编译。(不需修改 默认)

#define kNMS_THRESH 0.45

如要改变CONF_THRESH, 编辑文件config_infer_primary.txt。(不需修改 默认)

[class-attrs-all]

pre-cluster-threshold=0.25

8 部署测试

8.1 测试视频文件推理

cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolov5

deepstream-app -c deepstream_app_config.txt

默认视频的路径在deepstream_app_config.txt文档中,打开查看或修改,路径如下:

8.2 USB摄像头视频测试

摄像头检测指令:

ls /dev/video*(简单)

v4l2-ctl --list-devices(完整指令)

v4l2-ctl --device=/dev/video0 --list-formats-ext(细致指令)

v4l2-ctl --device=/dev/video1 --list-formats-ext

安装v4l-utils工具:

sudo apt install v4l-utils

YOLOv5 USB摄像头视频测试命令:

deepstream-app -c source1_usb_dec_infer_yolov5.txt

8.3 CSI摄像头视频测试

deepstream-app -c source1_csi_dec_infer_yolov5.txt





 

Jetson Orin Nano款功能强大的嵌入式 AI 开发平台,能够支持复杂的深度学习模型部署,包括 YOLOv8 这样的高效目标检测模型。在 Jetson Orin Nano部署 YOLOv8 模型通常涉及以下几个关键步骤: ### 1. 环境准备 首先需要确保 Jetson Orin Nano 的系统环境满足运行 YOLOv8 的要求。建议使用 Ubuntu 作为操作系统,并安装必要的依赖库,例如 Python、PyTorch 和 ONNX 相关工具[^2]。 可以使用以下命令安装些常用的依赖项: ```bash sudo apt update sudo apt install python3-pip python3-venv ``` 创建并激活虚拟环境以隔离项目依赖: ```bash python3 -m venv yolo_env source yolo_env/bin/activate ``` ### 2. 安装 Ultralytics 库 YOLOv8 是由 Ultralytics 提供的模型,因此需要先安装 `ultralytics` Python 包。可以通过 pip 直接安装最新版本: ```bash pip install ultralytics ``` ### 3. 导出 YOLOv8 模型为 ONNX 格式 为了在 Jetson 平台上更高效地推理,通常会将 PyTorch 模型转换为 ONNX 格式。可以在开发板上编写个简单的脚本来完成此操作。以下是导出模型的示例代码 [^2]: ```python from ultralytics import YOLO # 加载预训练的 YOLOv8 模型 model = YOLO("../yolov8/yolov8n.pt") # 将模型导出为 ONNX 格式 success = model.export(imgsz=640, format="onnx", batch=1) ``` 运行此脚本后,会在指定路径下生成 `.onnx` 文件,这是后续部署所需的输入文件。 ### 4. 使用 TensorRT 优化模型 Jetson 平台对 TensorRT 有良好的支持,TensorRT 可以显著提升推理速度并降低延迟。可以使用 `onnx2trt` 工具将 ONNX 模型转换为 TensorRT 引擎。以下是基本的转换命令: ```bash onnx2trt yolov8n.onnx -o yolov8n.engine ``` 如果未安装 `onnx2trt`,可以通过源码编译或使用 Docker 镜像来获取该工具。 ### 5. 在 Jetson Orin Nano 上进行推理 旦获得了 TensorRT 引擎文件,就可以使用 Python 或 C++ 编写推理脚本。以下是个简单的 Python 推理示例: ```python import cv2 import numpy as np import pycuda.autoinit import pycuda.driver as cuda import tensorrt as trt # 初始化 TensorRT 推理引擎 TRT_LOGGER = trt.Logger(trt.Logger.WARNING) with open("yolov8n.engine", "rb") as f, trt.Runtime(TRT_LOGGER) as runtime: engine = runtime.deserialize_cuda_engine(f.read()) # 分配内存并执行推理 with engine.create_execution_context() as context: inputs, outputs, bindings, stream = allocate_buffers(engine) # 读取图像并预处理 img = cv2.imread("test.jpg") img = cv2.resize(img, (640, 640)) img = img.transpose((2, 0, 1)).astype(np.float32) np.copyto(inputs[0].host, img.ravel()) # 执行推理 trt_outputs = do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream) # 后处理输出结果 process_output(trt_outputs) ``` ### 6. 性能优化与调试 在实际部署过程中,可能需要根据具体应用场景调整模型的输入尺寸、批处理大小等参数以获得最佳性能。同时,也可以利用 Jetson Orin Nano 的多核 CPU 和 GPU 协同计算能力进步提升效率。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是刺猬吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值