英伟达Jetson Xavier NX部署YOLO5

1.查看JetPack版本

新到手的NX首先需要确定一下JetPack的版本:

sudo apt-cache show nvidia-jetpack

会显示类似下面的内容:

Package: nvidia-jetpack
Version: 4.6-b199
Architecture: arm64
Maintainer: NVIDIA Corporation

不同的JetPack版本会对应后续不同torch和torchvison版本的选择。

2.拓展存储空间

NX自带的存储空间非常小,想要部署YOLO5肯定是装不下的。可以安插SD卡或者安装SSD固态硬盘来解决这个问题,我手里的NX商家给赠了一个128G的固态硬盘。(SSD的读写速度是SD卡的7倍,更建议使用SSD)
顺便说一下如何实现SSD作为第一启动:

2.1格式化已安装的 SSD

打开NX,在菜单中搜索Disks并打开:
在这里插入图片描述
在这里插入图片描述
在红框里的目录中,选择format
在这里插入图片描述
按照如下格式选择进行格式化:
在这里插入图片描述
格式化后,点击下面红框里的小加号进行分区,我建议你选择16 GB的分区用作交换文件:
在这里插入图片描述
在这里插入图片描述
点击红框中的设置,给卷起个名字:
在这里插入图片描述
在这里插入图片描述
最后是这样:
在这里插入图片描述

2.2将NX自带SD卡上的全部存储内容复制到SSD中

执行下面命令:

git clone https://github.com/jetsonhacks/rootOnNVMe.git
cd rootOnNVMe
./copy-rootfs-ssd.sh

git clone的时候,报错

gnutls_handshake() failed: The TLS connection was non-properly terminated.

原因可能是代理出现错误,解决方案如下:

git config --global  --unset https.https://github.com.proxy 
git config --global  --unset http.https://github.com.proxy 

2.3设置SSD作为第一启动

执行下面命令:

./setup-service.sh

重启使设置生效。

3.安装和配置CUDA与CUDNN

pytorch和torchvision的使用需要CUDA和CUDNN支持。

在安装CUDA和CUDNN时,我参考了这篇教程
配置CUDNN时,我参考了这篇教程

查看CUDA版本命令:

nvcc --version

nvcc -V

如果没有安装NVCC,则使用下面命令:

cat /usr/local/cuda/version.txt

查看CUDNN版本命令:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

4.下载YOLO5模型

5.部署环境

这几步的流程和我之前在Xavier中部署YOLO5完全相同,可以参考这里

### 在 Jetson Xavier NX部署 YOLOv8 的方法 #### 准备工作 为了在 Nvidia Jetson Xavier NX 设备上成功部署 YOLOv8 模型,需完成以下准备工作: - 确保已安装最新版本的 JetPack SDK 和 CUDA 工具链[^1]。 - 使用 `jetson-stats` 软件包监控设备性能并配置交换文件以支持更大的内存需求。 #### 下载和准备 YOLOv8 模型 YOLOv8 是 Ultralytics 提供的一系列目标检测模型之一。可以通过官方仓库下载预训练权重或自行训练定制化模型。推荐将 PyTorch 权重转换为 ONNX 格式以便后续 TensorRT 优化[^2]。 ```bash pip install ultralytics yolo export model=yolov8n.pt format=onnx opset=12 ``` 上述命令会导出名为 `yolov8n.onnx` 的文件,其中 `-opset=12` 参数指定使用的 ONNX 版本应兼容 TensorRT 支持的操作集。 #### 构建 TensorRT 引擎 通过 NVIDIA 提供的 trtexec 实用程序可以快速生成针对硬件加速优化过的 TensorRT 引擎: ```bash trtexec --onnx=yolov8n.onnx --saveEngine=yolov8n.trt \ --workspace=512 --fp16 --shapes=input:1x3x640x640 ``` 此脚本中的参数解释如下: - `--onnx`: 输入的 ONNX 文件路径; - `--saveEngine`: 输出 TensorRT 引擎保存位置; - `--workspace`: 设置最大 GPU 内存分配大小 (单位 MB); - `--fp16`: 启用半精度浮点运算提升推理速度; - `--shapes`: 明确输入张量尺寸匹配网络结构要求。 #### 编写推理代码 最后一步是在 Python 中加载 TensorRT 引擎执行实时推断操作。下面给出一段简单的实现框架作为参考: ```python import tensorrt as trt import pycuda.driver as cuda import numpy as np from PIL import Image class HostDeviceMem(object): def __init__(self, host_mem, device_mem): self.host = host_mem self.device = device_mem def allocate_buffers(engine): inputs = [] outputs = [] bindings = [] stream = cuda.Stream() for binding in engine: size = trt.volume(engine.get_binding_shape(binding)) * engine.max_batch_size dtype = trt.nptype(engine.get_binding_dtype(binding)) # Allocate host and device buffers host_mem = cuda.pagelocked_empty(size, dtype) device_mem = cuda.mem_alloc(host_mem.nbytes) # Append the device buffer to device bindings. bindings.append(int(device_mem)) # Append to input or output list. if engine.binding_is_input(binding): inputs.append(HostDeviceMem(host_mem, device_mem)) else: outputs.append(HostDeviceMem(host_mem, device_mem)) return inputs, outputs, bindings, stream TRT_LOGGER = trt.Logger(trt.Logger.WARNING) with open("yolov8n.trt", "rb") as f, trt.Runtime(TRT_LOGGER) as runtime: engine = runtime.deserialize_cuda_engine(f.read()) context = engine.create_execution_context() inputs, outputs, bindings, stream = allocate_buffers(engine) image = Image.open('test.jpg').resize((640, 640)).convert('RGB') np_image = np.array(image).transpose([2, 0, 1]).astype(np.float32) / 255. # Copy data into memory region allocated on CPU side of first input variable cuda.memcpy_htod_async(inputs[0].device, np_image.ravel(), stream) # Run inference asynchronously context.execute_async_v2(bindings=bindings, stream_handle=stream.handle) # Transfer predictions back from GPU [cuda.memcpy_dtoh_async(out.host, out.device, stream) for out in outputs] stream.synchronize() print(outputs[0].host.reshape(-1, 7)) # Assuming each detection has class id, confidence score & bbox coordinates ``` 以上代码片段展示了如何利用 TensorRT API 加载序列化的引擎文件,并设置好必要的上下文环境来进行图像处理任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值