DeepStream-Yolo多模型部署指南:同时运行多个YOLO检测器的完整方案
【免费下载链接】DeepStream-YoloNVIDIA DeepStream SDK 8.0 / 7.1 / 7.0 / 6.4 / 6.3 / 6.2 / 6.1.1 / 6.1 / 6.0.1 / 6.0 / 5.1 implementation for YOLO models项目地址: https://gitcode.com/gh_mirrors/de/DeepStream-Yolo
DeepStream-Yolo是NVIDIA DeepStream SDK的YOLO模型实现方案,支持从5.1到8.0的多个DeepStream版本。本文将详细介绍如何在DeepStream-Yolo中部署多个YOLO模型,实现同时运行多个检测器的高级应用场景。
多模型部署的基本概念
在DeepStream框架中,GIE(GPU Inference Engine)是负责模型推理的核心组件。根据DeepStream的限制,deepstream-app不支持多个主GIE(primary GIE),只能将一个YOLO模型作为主GIE,其他模型作为次级GIE(secondary GIE)运行,次级GIE会对主GIE检测到的对象进行进一步推理。
如果需要将两个或更多YOLO模型都作为主GIE运行,则需要使用自定义代码实现。本文将重点介绍次级GIE的配置方法,这是最常用且易于实现的多模型部署方案。
多GIE目录结构设计
成功部署多个YOLO模型的第一步是创建合理的目录结构。以下是推荐的多GIE部署目录树:
图:DeepStream-Yolo多GIE部署的推荐目录结构,展示了主GIE和次级GIE的文件组织方式
目录设置步骤
克隆项目仓库
git clone https://gitcode.com/gh_mirrors/de/DeepStream-Yolo cd DeepStream-Yolo创建GIE文件夹为每个GIE创建独立的文件夹(如gie1、gie2等),并将DeepStream-Yolo的核心文件复制到每个文件夹中。
配置标签文件将类别名称文件复制到每个GIE文件夹,并将其重命名为
labels.txt。准备模型文件将每个模型的ONNX文件或CFG和权重文件复制到相应的GIE文件夹中。
修改YoloLayer插件版本
为避免多个GIE之间的插件冲突,需要为每个GIE设置唯一的YoloLayer插件版本:
编辑每个GIE文件夹中
nvdsinfer_custom_impl_Yolo目录下的yoloPlugins.h文件(第53行)。将默认版本:
const char* YOLOLAYER_PLUGIN_VERSION {"1"};修改为不同的版本号:
const char* YOLOLAYER_PLUGIN_VERSION {"2"};注意:gie2使用版本2,gie3使用版本3,依此类推,确保每个GIE的版本号唯一。
编译GIE库文件
为每个GIE单独编译库文件,步骤如下:
设置CUDA版本
根据您的DeepStream版本和硬件平台设置CUDA_VER环境变量:
x86平台
DeepStream 8.0 = 12.8 DeepStream 7.1 = 12.6 DeepStream 7.0 / 6.4 = 12.2 DeepStream 6.3 = 12.1 DeepStream 6.2 = 11.8 DeepStream 6.1.1 = 11.7 DeepStream 6.1 = 11.6 DeepStream 6.0.1 / 6.0 = 11.4 DeepStream 5.1 = 11.1Jetson平台
DeepStream 8.0 = 13.0 DeepStream 7.1 = 12.6 DeepStream 7.0 / 6.4 = 12.2 DeepStream 6.3 / 6.2 / 6.1.1 / 6.1 = 11.4 DeepStream 6.0.1 / 6.0 / 5.1 = 10.2设置命令示例:
export CUDA_VER=12.2编译命令
对每个GIE文件夹执行编译命令,替换gie1为相应的GIE文件夹名称:
make -C gie1/nvdsinfer_custom_impl_Yolo clean && make -C gie1/nvdsinfer_custom_impl_Yolo配置推理参数文件
每个GIE需要独立的推理配置文件,根据使用的模型类型(YOLOv8、YOLOv5、YOLOv4等)进行编辑。
模型路径配置
Darknet YOLO示例(gie1)
custom-network-config=gie1/yolo.cfg model-file=yolo.weightsDarknet YOLO示例(gie2)
custom-network-config=gie2/yolo.cfg model-file=yolo.weightsONNX模型示例(gie1)
onnx-file=yolo.onnxONNX模型示例(gie2)
onnx-file=yolo.onnxGIE唯一ID设置
为每个GIE分配唯一ID:
gie1配置
gie-unique-id=1gie2配置
gie-unique-id=2处理模式设置
主推理引擎(primary GIE)
process-mode=1次级推理引擎(secondary GIE)次级GIE会对主GIE检测到的对象进行推理:
process-mode=2对于次级GIE,还需要指定它依赖的主GIE ID:
operate-on-gie-id=1如果需要仅对特定类别的对象进行次级推理,可以添加:
operate-on-class-ids=0;1;2批处理大小设置
主推理引擎
batch-size=1次级推理引擎
batch-size=16编辑DeepStream应用配置文件
修改deepstream_app_config.txt文件,配置多个GIE的协同工作。
添加次级GIE配置
在主GIE配置之后添加次级GIE配置:
1个次级GIE示例(共2个推理引擎)
[secondary-gie0] enable=1 gpu-id=0 gie-unique-id=2 operate-on-gie-id=1 operate-on-class-ids=0 nvbuf-memory-type=0 config-file=gie2/config_infer_primary.txt2个次级GIE示例(共3个推理引擎)
[secondary-gie0] enable=1 gpu-id=0 gie-unique-id=2 operate-on-gie-id=1 operate-on-class-ids=0 nvbuf-memory-type=0 config-file=gie2/config_infer_primary.txt [secondary-gie1] enable=1 gpu-id=0 gie-unique-id=3 operate-on-gie-id=1 operate-on-class-ids=0 nvbuf-memory-type=0 config-file=gie3/config_infer_primary.txt更新主GIE配置
确保主GIE配置指向正确的GIE文件夹:
修改前:
[primary-gie] enable=1 gpu-id=0 gie-unique-id=1 nvbuf-memory-type=0 config-file=config_infer_primary.txt修改后:
[primary-gie] enable=1 gpu-id=0 gie-unique-id=1 nvbuf-memory-type=0 config-file=gie1/config_infer_primary.txt运行多模型推理
完成所有配置后,使用以下命令启动DeepStream应用:
deepstream-app -c deepstream_app_config.txt注意:测试过程中,引擎文件将在DeepStream-Yolo文件夹中生成。构建完成后,请将每个GIE的引擎文件移动到相应的GIE文件夹(gie1、gie2等)中。
通过以上步骤,您可以在DeepStream-Yolo中成功部署多个YOLO模型,实现复杂场景下的多目标检测与分析。这种方案特别适用于需要同时检测不同类型对象或对同一对象进行多级别分析的应用场景。
【免费下载链接】DeepStream-YoloNVIDIA DeepStream SDK 8.0 / 7.1 / 7.0 / 6.4 / 6.3 / 6.2 / 6.1.1 / 6.1 / 6.0.1 / 6.0 / 5.1 implementation for YOLO models项目地址: https://gitcode.com/gh_mirrors/de/DeepStream-Yolo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考