详细内容或原文请订阅后点击阅览
为 NVIDIA DeepStream 构建自定义 GStreamer 插件
为什么要在 DeepStream 中进行自定义推理?为 NVIDIA DeepStream 构建自定义 GStreamer 插件一文首先出现在 Towards Data Science 上。
来源:走向数据科学用于多流视频分析的生产就绪管道:硬件加速解码、跟踪、屏幕显示和消息代理,全部通过 GStreamer 连接。对于导出到 TensorRT 的标准检测模型,nvinfer 可以处理一切。
然而,常见情况有局限性。视觉语言模型、自定义后处理、旋转边界框或运行时热插拔模型的需要,这些都是 nvinfer 的假设不成立的地方。有时,您的团队有一个成熟的 PyTorch 推理堆栈,并且您希望 DeepStream 调用它,而不是在配置文件中重新实现它。
值得注意的是,特别是对于 YOLO 系列模型,Marcos Luciano 的 DeepStream-Yolo 已经在 C++ 中实现自定义后处理方面做出了出色的工作。如果 C++ 已经摆在桌面上,那就从那里开始。本文采用不同的角度:完全在 Python 中实现相同的结果,使用自定义 GStreamer 插件和 pyservicemaker,而不牺牲吞吐量。
使这成为可能的关键见解:nvtracker、nvdsosd 和 nvmsgconv 等下游元素并不关心哪个元素生成检测元数据。正确写入 DeepStream 的元数据结构,生态系统的其余部分就会正常工作,就好像 nvinfer 从未出现在图中一样。
DeepStream 元数据
流经 DeepStream 管道的每个缓冲区都不仅仅携带像素数据。从帧通过 nvstreammux 的那一刻起,每个 GstBuffer 都附加了一个 NvDsBatchMeta 结构。层次结构很简单,可以在官方文档中找到。
NvDsBatchMeta
