本全面指南提供了一个详细的步骤,用于在NVIDIA Jetson设备上使用DeepStream SDK和TensorRT部署UltralyticsYOLOv8。这里使用TensorRT来最大化Jetson平台上的推理性能。
本指南已在以下设备上进行测试:
预计它将适用于所有NVIDIA Jetson硬件系列,包括最新的和旧的设备。
NVIDIA的DeepStream SDK是一个基于GStreamer的完整流分析工具包,用于AI驱动的多传感器处理、视频、音频和图像理解。它非常适合构建IVA(智能视频分析)应用程序和服务的视觉AI开发者、软件合作伙伴、初创公司和OEM。现在,可以创建包含神经网络和其他复杂处理任务(如跟踪、视频编码/解码和视频渲染)的流处理管道。这些管道使得视频、图像和传感器数据的实时分析成为可能。DeepStream的多平台支持为提供了一种更快、更简单的方式,在本地、边缘和云端开发视觉AI应用程序和服务。
在开始本指南之前,请访问文档《NVIDIA Jetson与UltralyticsYOLOv8快速入门指南》,设置NVIDIA Jetson设备以使用Ultralytics YOLOv8。
根据JetPack版本安装DeepStream SDK:
提示:本指南中使用了Debian软件包方法将DeepStream SDK安装到Jetson设备上。也可以访问DeepStream SDK on Jetson(存档)以获取DeepStream的旧版本。
在这里使用marcoslucianops/DeepStream-Yolo GitHub仓库,该仓库包括对YOLO模型的NVIDIA DeepStream SDK支持。感谢marcoslucianops的贡献!
安装依赖项:
pip install cmake
pip install onnxsim
克隆以下仓库:
git clone https://github.com/marcoslucianops/DeepStream-Yolo
cd DeepStream-Yolo
从YOLOv8发布版本中下载选择的Ultralytics YOLOv8检测模型(.pt)。这里使用yolov8s.pt。
wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
注意:也可以使用自定义训练的YOLOv8模型。
将模型转换为ONNX:
python3 utils/export_yoloV8.py -w yolov8s.pt
传递以下参数到上述命令:
根据安装的JetPack版本设置CUDA版本:
export CUDA_VER=10.2
export CUDA_VER=11.4
编译库:
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
编辑config_infer_primary_yoloV8.txt文件以适应模型(对于具有80个类别的YOLOv8s):
[[property]]
onnx-file=yolov8s.onnx
num-detected-classes=80
编辑deepstream_app_config文件:
[primary-gie]
config-file=config_infer_primary_yoloV8.txt
还可以在deepstream_app_config文件中更改视频源。这里加载了一个默认的视频文件:
[source0]
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
运行推理:
deepstream-app -c deepstream_app_config.txt
注意:在开始推理之前,生成TensorRT引擎文件可能需要很长时间。因此请耐心等待。
提示:如果想将模型转换为FP16精度,只需在config_infer_primary_yoloV8.txt中设置model-engine-file=model_b1_gpu0_fp16.engine和network-mode=2。
如果想使用INT8精度进行推理,需要按照以下步骤操作:
设置OPENCV环境变量:
export OPENCV=1
编译库:
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
对于COCO数据集,下载val2017,解压缩并移动到DeepStream-Yolo文件夹。
为校准图像创建一个新目录:
mkdir calibration
运行以下命令从COCO数据集中选择1000张随机图像进行校准:
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000);
do cp $jpg calibration/;
done
注意:NVIDIA建议至少使用500张图像以获得良好的准确性。在这个示例中,选择了1000张图像以获得更好的准确性(更多图像=更高精度)。可以从head -1000中设置。例如,对于2000张图像,head -2000。这个过程可能需要很长时间。
创建一个包含所有选定图像的calibration.txt文件:
realpath calibration/*jpg > calibration.txt
设置环境变量:
export INT8_CALIB_IMG_PATH=calibration.txt
export INT8_CALIB_BATCH_SIZE=1
注意:更高的INT8_CALIB_BATCH_SIZE值将导致更高的准确性和更快的校准速度。根据GPU的内存进行设置。
更新config_infer_primary_yoloV8.txt文件:
model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table
network-mode=0
更改为:
model-engine-file=model_b1_gpu0_int8.engine
int8-calib-file=calib.table
network-mode=1
运行推理:
deepstream-app -c deepstream_app_config.txt
要在单个deepstream应用程序下设置多个流,可以对deepstream_app_config.txt文件进行以下更改:
更改行和列以构建网格显示,根据流数量。例如,对于4个流,可以添加2行和2列。
[[tiled-display]]
rows=2
columns=2
设置num-sources=4并添加所有4个流的uri:
[source0]
enable=1
type=3
uri=<path_to_video>
uri=<path_to_video>
uri=<path_to_video>
uri=<path_to_video>
num-sources=4
运行推理:
deepstream-app -c deepstream_app_config.txt
下表总结了YOLOv8s模型在NVIDIA Jetson Orin NX 16GB上不同TensorRT精度级别的性能,输入尺寸为640x640。
模型名称 | 精度 | 推理时间 (ms/im) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
YOLOv8s | FP16 | 7.94 | 126 |
YOLOv8s | INT8 | 5.53 | 181 |
这些基准测试结果强调了在NVIDIA Jetson硬件上使用TensorRT优化的YOLOv8模型的效率和能力。有关更多详细信息,请参见基准测试结果部分。
本指南最初由朋友Seeed Studio的Lakshantha和Elaine创建。
如何在NVIDIA Jetson设备上设置Ultralytics YOLOv8?
要在NVIDIA Jetson设备上设置Ultralytics YOLOv8,首先需要安装与JetPack版本兼容的DeepStream SDK。按照快速入门指南中的逐步指南配置NVIDIA Jetson以部署YOLOv8。
在NVIDIA Jetson上使用TensorRT与YOLOv8有什么好处?
在NVIDIA Jetson上使用TensorRT与YOLOv8可以优化模型进行推理,显著降低延迟并提高吞吐量。TensorRT通过层融合、精度校准和内核自动调优提供高性能、低延迟的深度学习推理。这导致执行速度更快、效率更高,特别适用于视频分析和自主机器等实时应用程序。
可以在不同的NVIDIA Jetson硬件上运行DeepStream SDK与Ultralytics YOLOv8吗?
是的,部署Ultralytics YOLOv8与DeepStream SDK和TensorRT的指南与整个NVIDIA Jetson系列兼容。这包括像Jetson Orin NX 16GB这样的设备,运行JetPack 5.1.3,以及像Jetson Nano 4GB这样的设备,运行JetPack 4.6.4。请参阅DeepStream配置YOLOv8部分的详细步骤。
如何将YOLOv8模型转换为ONNX以用于DeepStream?
要将YOLOv8模型转换为ONNX格式以用于DeepStream部署,请使用DeepStream-Yolo仓库中的utils/export_yoloV8.py脚本。
这是一个示例命令:
python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify
有关模型转换的更多详细信息,请查看模型导出部分。
YOLO在NVIDIA Jetson Orin NX上的性能基准测试如何?
YOLOv8模型在NVIDIA Jetson Orin NX 16GB上的性能会根据TensorRT精度级别而有所不同。例如,YOLOv8s模型实现: