这是个非常有用的插件,是DeepStream 5.0添加的功能,对nvinfer(主检测器)和nvtracker附加的元数据执行分析,目前主要针对涉及感兴趣区域(ROI)的过滤、过度拥挤检测、方向检测和跨线统计等四大功能,如下表:
功能 |
说明 |
ROI过滤 |
此功能检测ROI中是否存在目标类别的对象,结果作为每个对象的元数据附加,以及每帧ROI中的对象总数。 |
拥挤检测 |
在“ROI过滤”的前提下,检测每帧对象总数是否处于过度拥挤的状态,就是检测ROI中的对象数量是否超过预先配置的阈值。 |
方向检测 |
使用对象位置历史记录和当前帧信息检查对象是否遵循预配置的方向。结果作为每个对象的元数据附加。 |
跨线统计 |
此功能检查对象是否遵循虚拟线的预配置方向,以及是否已越过虚拟线。当测线交叉时,结果将附加到对象上,同时还会附加帧元,其中累积计数与测线交叉的每帧计数一起附加。 |
可以看出这是NVIDIA经过实际项目的要求所增加的功能插件,主要就是针对视频内的我们所指定的“某个区块(兴趣区,ROI)”或“某条线(跨越线)”范围中的标的物件,进行“物件动向”的分析与统计(如下图)。大部分的使用场景是在道路流量分析的应用,但这也可以应用在營建工地、生产工厂、楼宇、校园、消防设施的危险区(danger zone)监控,实用性非常之高。
有经验的开发人员就会很清楚,如果缺少nvdsanalytics这个插件的时候,则开发者需要自行从nvtracker里面抽取相关数据,然后与兴趣区或跨越线进行持续比对,确认是否属于要列入统计数据的物件,至于“动向分析”功能,更需要大量的“前后帧”位置比对去进行判断,这些开发的工作量是相当艰辛、计算量是非常巨大的,如今在DeepStream里面只要轻松调用nvdsanalytics插件,就能轻松地完成很复杂的工作。
在DeepStream开发套件里的deepstream-nvdsanalytics-test是C/C++版本的范例代码,先前文章里带着大家安装过的deepstream_python_apps范例中,也提供Python版本的代码,在范例路径下面的deepstream-nvdsanalytics里面。
DeepStream一直令人赞赏的一个特色,就是将插件的接口做得十分简单,因此在开始执行范例代码之前,我们需要先对这个插件有个初步了解,请参考下面链接的原厂说明:https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvdsanalytics.html,下图是Gst-nvdsanalytics的基本工作原理图:
整个执行流程其实就是很简单的四个步骤:
这个插件伴随着NvDsAnalyticsFrameMeta与NvDsAnalyticsObjInfo两组元数据,可以在DeepStream开发包的sources/includes/nvds_analytics_meta.h找到完整的定义,也可以在https://docs.nvidia.com/metropolis/deepstream/sdk-api/Meta/analytics.html 找到使用说明。这里也简单说明一下,对于后面说明代码时会有帮助:
前面工作流最右边的输出,是以帧级的NvDsAnalyticsFrameMeta结构进行封装,想要调用是时就定义一个用户元,将meta_type设置为NVDS_USER_FRAME_META_NVDSANALYTICS。然后将用户元添加到NvDsFrameMeta的frame_user_meta_list成员。
分析(每个检测到的对象)的输出结果封装在NvDsAnalyticsObjInfo结构中,同样再定义定义一个用户元,将类型设置为NVDS_USER_OBJ_META_NVDSANALYTICS,然后将这个用户元添加到NvDsObjectMeta的obj_user_meta_list成员中。
上述步骤与数据结构,已经将大部分nvdsanalytics插件的工作都部署的差不多了,剩下就是启动并监听交互信息的部分。
这个范例的代码与前面几个范例的工作流程是一致的,只是这里接受多个输入源,包括H264/H265视频文件与RTSP视频流,因此需要建立多个队列(queue)作为缓冲来处理,至于nvanalytics_src_pad_buffer_probe部分与test1的osd_sink_pad_buffer_probe代码结构的逻辑也是相近的,因此请自行根据先前代码内容进行类比,这里就不花力气再重复那些冗余的内容。
不过这个项目里面的配置文件与前面的项目有比较大的不同之处,因此这里就花点时间探索这部分的细节。范例的配置文件为config_nvdsanalytics.txt,一共有5个配置组
这个插件一共有以下的5个配置组:
在[property]组里面的参数是大家比较熟悉的,其他组里面有几个用法比较特殊的参数,在这里挑出来说明
只有当物件“以符合要求的方向通过跨越线“,才算符合这里的统计要求,才会纳入这个视频分析的计数之中,这个功能定义的十分完善。
同样的,我们可以为每个视频流提供多组这种跨越线的配置。
以上是比较复杂的参数与用法的简单说明,如果需要所有参数的完整说明,请直接参考https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvdsanalytics.html 下方的“Configuration File Parameters”内容。
接下来就开始执行这个很有用处的范例,透过修改参数值来感受用途。
由于deepstream_nvdsanalytics.py这个代码可以接受多个视频输入,因此需要使用“file:///”格式给定输入文件完整路径,为了简化指令长度,我们在工作目录下使用软链接来提供视频文件路径:
ln -s ../../../../samples/streams/sample_720p.h264 ~/test.h264 python3 deepstream_nvdsanalytics.py file:///home/nvidia/test.h264 |
下面是这个范例的执行画面:
接下去看看所显现的数据代表什么意思,下面是我们截取第649帧图像的检测结果:
################################################## Object 503 moving in direction: North Object 499 moving in direction: North Object 526 roi status: ['RF'] Objs in ROI: {'RF': 1} Linecrossing Cumulative: {'Exit': 20} Linecrossing Current Frame: {'Exit': 0} Frame Number= 649 stream id= 0 Number of Objects= 7 Vehicle_count= 5 Person_count= 2 |
如何?这个插件的功能很棒吧,可以让你自由地设定要监控的区域,并且非常有效率地按照你所设定的要求,反馈对应的统计数据。《完》
好文章,需要你的鼓励
这项研究由浙江大学、复旦大学等机构联合完成,提出了ReVisual-R1模型,通过创新的三阶段训练方法显著提升了多模态大语言模型的推理能力。研究发现优化的纯文本冷启动训练、解决强化学习中的梯度停滞问题、以及分阶段训练策略是关键因素。ReVisual-R1在各类推理基准测试中超越了现有开源模型,甚至在某些任务上超过了商业模型,为多模态推理研究开辟了新途径。
这项研究提出了一种名为"批评式微调"的创新方法,证明仅使用一个问题的批评数据就能显著提升大语言模型的推理能力。研究团队对Qwen和Llama系列模型进行实验,发现这种方法在数学和逻辑推理任务上都取得了显著提升,平均提高15-16个百分点,而且只需要强化学习方法1/20的计算资源。这种简单高效的方法为释放预训练模型的潜在推理能力提供了新途径。
新加坡国立大学研究团队开发了名为IEAP的图像编辑框架,它通过将复杂编辑指令分解为简单原子操作序列解决了当前AI图像编辑的核心难题。研究发现当前模型在处理不改变图像布局的简单编辑时表现出色,但在需要改变图像结构时效果差。IEAP框架定义了五种基本操作,并利用思维链推理技术智能分解用户指令,实验证明其性能显著超越现有方法,尤其在处理复杂多步骤编辑时。
Character AI的研究者开发出TalkingMachines系统,通过自回归扩散模型实现实时音频驱动视频生成。研究将预训练视频模型转变为能进行FaceTime风格对话的虚拟形象系统。核心创新包括:将18B参数的图像到视频DiT模型改造为音频驱动系统、通过蒸馏实现无错误累积的无限长视频生成、优化工程设计降低延迟。系统可让多种风格的虚拟角色与人进行自然对话,嘴型与语音同步,为实时数字人交互技术开辟了新可能。