Deepstream提供了nvinfer plugin供封装调用模型使用, Deepstream的sample代码deepstream app里实现调用多个模型时是针对一主多从的使用方案,也就是一个主模型(primary inference engine),一个或者多个次要从属模型(secondary inference engine),因为模型使用前都转换成了TensorRT的engine文件,所以一般叫engine。下面是典型的基于Deepstream的调用多个模型推理的app的结构:

各部分的plugin的功能的简要说明如下:

Samples里的deepstream-app里使用了四个模型(对应创建了四个nvinfer plugin),一个主模型(由下图中的左侧的nvinfer plugin负责封装调用),三个次要模型(由下图中右侧的三个nvinfer plugin负责调用),主模型用来识别车,三个次要从属模型分别用来识别车的颜色、种类、厂商。

模型文件位于/opt/nvidia/deepstream/deepstream/samples/models/下,主模型和次要从属模型的分工完全是由配置文件来配置的,封装调用它们的nvinfer plugin是相同的,运行deepstream app时指定config文件为/opt/nvidia/deepstream/deepstream/samples/config/deepstream-app/source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
cd/opt/nvidia/deepstream/deepstream/samples/config/deepstream-app
deepstream-app -c source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
即可将四个模型跑起来。
四个nvinfer plugin 和tracker plugin以及tee和4个queue element的结构组成如下:

最左侧的是primary inference engine对应的plugin,挨着的是tracker plugin,再往右边是一个tee element用于视频流的复制分叉,和tee直连的是用于缓冲的4个queue element,上面三个queue element分别连对应的三个secondary inference engine

本文详细介绍了Deepstream如何实现多个模型的并行推理,包括主从模型配置、同步控制及优化。通过分析配置文件、模型调用、内存管理以及同步代码,揭示了在JetsonNano上并行推理可能遇到的性能问题和解决方案,强调了在特定情况下串行调用模型可能优于并行调用。同时,讨论了如何处理模型间协作、视频流复制和跟踪效果的影响因素。
最低0.47元/天 解锁文章
1075

被折叠的 条评论
为什么被折叠?



