【jetson】yolo8+DeepStream测试
📅 2026/7/17 19:56:28
👁️ 阅读次数
📝 编程学习
本文档记录了在 Jetson Orin Nano(JetPack 6.0 + DeepStream 7.x)平台,基于 DeepStream-Yolo 开源仓库完成 YOLOv8n 模型从 PyTorch 到 ONNX 再到 TensorRT FP16 引擎的转换、自定义推理插件编译与配置调优的全流程
一、基础环境
- 硬件:Jetson Orin Nano
- 系统:JetPack 6.0 (CUDA 12.6)+DeepStream 7.1.0
- 运行环境:Jetson 设备连接显示器,在本地执行
二、获取 DeepStream-Yolo 官方仓库
操作:
mkdir~/yolo_testcd~/yolo_test# 克隆官方开源仓库(GitHub)gitclone https://github.com/marcoslucianops/DeepStream-Yolo.gitcdDeepStream-Yolo三、模型转换(YOLOv8n.pt → ONNX → TensorRT 引擎)
3.1 准备 YOLOv8 模型
将yolov8n.pt放到~/yolo_test/下(可从 Ultralytics 下载)。
3.2 安装依赖
# 检查已安装的包pip3 list|grep-iE"onnx|torch|ultralytics"# 缺失则安装pip3installonnx ultralytics遇到的问题:安装 ultralytics 后 numpy 被升级到 2.x,导致 PyTorch 2.8 无法运行。
解决:
pip3install"numpy<2"--force-reinstall3.3 运行转换脚本
cd~/yolo_test/DeepStream-Yolo/utils python3 export_yoloV8.py-w../../yolov8n.pt在 yolov8n.pt 同级目录下生成文件:
yolov8n.onnx— ONNX 模型labels.txt— 类别标签(COCO 80 类)
将上面两个文件到项目目录中:
mv../../yolov8n.onnx../mv../../labels.txt../四、编译自定义 YOLO 插件
4.1 确认 CUDA 版本并修改 Makefile
nvcc--version# 显示 12.6cd~/yolo_test/DeepStream-Yolo/nvdsinfer_custom_impl_YoloCUDA_VER=12.6make-j44.2 编译
makecleanmake-j4编译成功后在nvdsinfer_custom_impl_Yolo/下生成libnvdsinfer_custom_impl_Yolo.so。
五、配置文件修改
5.1 推理配置文件(YOLOv8 专用)
原始模板config_infer_primary_yoloV8.txt已存在。
只需修改 3 个关键项(其他保持原样):
[property] onnx-file=yolov8n.onnx network-mode=2 num-detected-classes=80network-mode=2→ FP16 加速- 引擎文件名可改为
model_b1_gpu0_fp16.engine(与 FP16 匹配,非必须但推荐)
5.2 主应用配置文件
先备份原文件:
cd~/yolo_test/DeepStream-Yolocpdeepstream_app_config.txt deepstream_app_config.txt.bak编辑deepstream_app_config.txt,关键修改:
① 推理部分:
[primary-gie] config-file=config_infer_primary_yoloV8.txt② 视频源(先用视频文件测试):
[source0] enable=1 type=2 uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4 num-sources=1 gpu-id=0 cudadec-memtype=0 [tests] file-loop=1 # 循环播放,避免窗口闪退③ 显示 sink(根据环境选择):
[sink0] enable=1 type=2 # xvimagesink,X11 环境 sync=0 gpu-id=0 qos=0若遇到 Wayland 或显示问题可改用:
type=5→ fakesink(无画面测试,实际运行报错,原因未知)
六、运行测试
6.1 确保 X11 显示可用
exportDISPLAY=:1# 根据实际环境gst-launch-1.0 videotestsrc!xvimagesink# 验证6.2 首次运行(构建引擎)
cd~/yolo_test/DeepStream-Yolo deepstream-app-cdeepstream_app_config.txt过程:
- 若引擎文件
model_b1_gpu0_fp16.engine不存在,会自动构建 TensorRT 引擎,耗时约 6 分钟(仅一次)。 - 构建成功后引擎文件保存于项目根目录。
- 引擎文件名不匹配会导致每次重建 → 把
config_infer_primary_yoloV8.txt中的model-engine-file改为model_b1_gpu0_fp16.engine。
6.3 验证推理效果
- 日志输出:
serialize cuda engine to file: .../model_b1_gpu0_fp16.engine successfully Load new model:...config_infer_primary_yoloV8.txt sucessfully PERF: 60.10 (58.77) - 画面:视频窗口带检测框循环播放。
七、切换到 USB 摄像头实时检测
7.1 查看摄像头设备
ls/dev/video* v4l2-ctl --list-devices v4l2-ctl-d/dev/video0 --list-formats-ext本例为 USB 摄像头,设备节点/dev/video0,支持 MJPG 1280x720@30fps。
7.2 修改主配置文件
[source0] enable=1 type=1 device=/dev/video0 camera-width=640 camera-height=480 camera-fps-n=30 camera-fps-d=1 num-sources=1 gpu-id=0 [streammux] live-source=1 width=640 height=480 [tests] file-loop=1 #可改为 0(实时摄像头不需要循环)7.3 运行实时检测
deepstream-app-cdeepstream_app_config.txt预期:窗口显示摄像头实时画面,带 YOLOv8 检测框,帧率约 30 fps(受摄像头帧率限制)。
八、最终文件结构(关键文件)
~/yolo_test/ ├── yolov8n.pt ├── DeepStream-Yolo/ │ ├── yolov8n.onnx │ ├── labels.txt │ ├── model_b1_gpu0_fp16.engine (自动生成) │ ├── config_infer_primary_yoloV8.txt │ ├── deepstream_app_config.txt │ ├── nvdsinfer_custom_impl_Yolo/ │ │ └── libnvdsinfer_custom_impl_Yolo.so │ └── ...九、总结
- 核心步骤:模型转换 → 编译插件 → 修改配置 → 运行。
- 引擎首次构建需数分钟,后续启动仅加载(约 5-10 秒)。
- 通过
v4l2-ctl -d /dev/video0 --list-formats-ext可查询摄像头原生支持分辨率、帧率、编码格式,保证配置参数与硬件能力匹配。
编程学习
技术分享
实战经验