searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

视频推理系统及优化

2023-08-17 05:41:02
48
0

1. 背景

NVIDIA Deepstream SDK是基于开源GStreamer多媒体框架的流分析工具包,它加快了视觉AI应用程序的开发速度,使开发人员更容易构建核心深度学习网络,而不必从头开始设计端到端应用程序。一个典型的deepstream pipeline包括视频解码,预处理,批处理帧,推理,目标跟踪,可视化等。

2. 方案

基于DeepStream的视频分析框架如下:任务调度管理模块接收云端下发的视频分析任务;算法调度管理将对应的视频分析任务转化成对应的pipeline分析任务,并根据相应的调度算法下发至合适的分析节点;DeepStream视频分析模块支持对多路流同时分析,结果聚合模块将DeepStream分析结果聚合,达到一定去重的效果;算法监控监控算法任务是否执行异常,对于视频流中段的情况,可以等待视频流正常后将pipeline重新拉起。

 

3. 生成应用程序构件图

通过生成应用程序Pipeline构建图,有助于定位Pipeline异常情况。

3.1 安装dot:

sudo apt-get install graphviz

3.2 设置.dot生成的文件存放位置:

export GST_DEBUG_DUMP_DOT_DIR=/tmp

3.3 生成dot

在创建并链接完pipeline element的位置添加宏调用

gst_debug_bin_to_dot_file (GstBin * bin,

                           GstDebugGraphDetails details,

                           const gchar * file_name)

 

GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN (appCtx->pipeline.pipeline),GST_DEBUG_GRAPH_SHOW_ALL,"ds-app-playing");

 

3.4 将dot转化成pdf或者png

dot -Tpdf abc.dot > abc.pdf

dot -Tpdf abc.dot > abc.png

 

4. 优化

要达到低延迟的目标,常见的办法是降低处理数据量,可以只对关键帧做处理,丢弃B帧,P帧。DeepStream提供了只处理关键帧的方法,在Gst-nvnideo4linux2插件里设置参数skip-frames=2可以只解码关键帧。

DeepStream Pipeline里任何一个element同步计算耗时过长超过源端视频帧的发送间隔的话,会导致整个pipeline里的视频数据流动速度下降从而产生帧累积,如果没有主动丢弃的话,使得延时越来越长。针对该情况,可以在解码decode模块主动丢帧或者使用videorate限制帧率,推荐后一种方案,将framerate设置到较低的值,让帧间隔大于inference等下游插件的同步计算所耗费的最大时间,从而实现视频稳定的无累积延时播放。

 

0条评论
作者已关闭评论
李****萍
4文章数
0粉丝数
李****萍
4 文章 | 0 粉丝
原创

视频推理系统及优化

2023-08-17 05:41:02
48
0

1. 背景

NVIDIA Deepstream SDK是基于开源GStreamer多媒体框架的流分析工具包,它加快了视觉AI应用程序的开发速度,使开发人员更容易构建核心深度学习网络,而不必从头开始设计端到端应用程序。一个典型的deepstream pipeline包括视频解码,预处理,批处理帧,推理,目标跟踪,可视化等。

2. 方案

基于DeepStream的视频分析框架如下:任务调度管理模块接收云端下发的视频分析任务;算法调度管理将对应的视频分析任务转化成对应的pipeline分析任务,并根据相应的调度算法下发至合适的分析节点;DeepStream视频分析模块支持对多路流同时分析,结果聚合模块将DeepStream分析结果聚合,达到一定去重的效果;算法监控监控算法任务是否执行异常,对于视频流中段的情况,可以等待视频流正常后将pipeline重新拉起。

 

3. 生成应用程序构件图

通过生成应用程序Pipeline构建图,有助于定位Pipeline异常情况。

3.1 安装dot:

sudo apt-get install graphviz

3.2 设置.dot生成的文件存放位置:

export GST_DEBUG_DUMP_DOT_DIR=/tmp

3.3 生成dot

在创建并链接完pipeline element的位置添加宏调用

gst_debug_bin_to_dot_file (GstBin * bin,

                           GstDebugGraphDetails details,

                           const gchar * file_name)

 

GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN (appCtx->pipeline.pipeline),GST_DEBUG_GRAPH_SHOW_ALL,"ds-app-playing");

 

3.4 将dot转化成pdf或者png

dot -Tpdf abc.dot > abc.pdf

dot -Tpdf abc.dot > abc.png

 

4. 优化

要达到低延迟的目标,常见的办法是降低处理数据量,可以只对关键帧做处理,丢弃B帧,P帧。DeepStream提供了只处理关键帧的方法,在Gst-nvnideo4linux2插件里设置参数skip-frames=2可以只解码关键帧。

DeepStream Pipeline里任何一个element同步计算耗时过长超过源端视频帧的发送间隔的话,会导致整个pipeline里的视频数据流动速度下降从而产生帧累积,如果没有主动丢弃的话,使得延时越来越长。针对该情况,可以在解码decode模块主动丢帧或者使用videorate限制帧率,推荐后一种方案,将framerate设置到较低的值,让帧间隔大于inference等下游插件的同步计算所耗费的最大时间,从而实现视频稳定的无累积延时播放。

 

文章来自个人专栏
个人随笔
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
1
1