传统的视频分析应用程序及其开发工作流通常基于固定功能且受限的模型构建,这些模型旨在仅检测和识别一组选定的预定义对象。
借助生成式 AI、NVIDIA NIM 微服务和基础模型,您现在可以使用更少的模型构建具有广泛感知和丰富语境理解的应用程序。
新型生成式 AI 模型即视觉语言模型 (VLM) 为视觉 AI 智能体提供支持,这些智能体可以理解自然语言提示并执行视觉问答。视觉 AI 智能体 解锁了完全的应用可能性,显著简化了应用开发工作流程,并提供了变革性的新感知功能,如图像或视频摘要、交互式视觉问答和视觉警报。
这些视觉 AI 智能体将部署在工厂、仓库、零售商店、机场、交通交叉路口等地。它们将帮助运营团队使用从自然交互中生成的更丰富的见解做出更明智的决策。
NVIDIA NIM 和 NVIDIA VIA 微服务旨在加速视觉 AI 代理的开发。在本文中,我们将向您展示如何使用这两种技术和一个摘要微服务无缝构建 AI 代理,以帮助处理大量视频,并使用 VLM 和 NIM 微服务生成精选摘要。
NVIDIA VIA 默认使用 OpenAI GPT-4o 模型作为默认的 VLM。
发布 NVIDIA VIA 微服务
NVIDIA VIA 微服务,是 NVIDIA Metropolis 微服务的扩展,是云原生构建块,可以加速由 VLM 和 NIM 提供支持的视觉 AI 代理的开发,无论部署在边缘还是云端。NVIDIA VIA 微服务已经在开发者预览版中提供下载。
NVIDIA VIA 为新用例构建视觉 AI 代理的机会无穷。这些模块化微服务使您能够灵活地构建视觉 AI 代理,并对其进行定制,以添加复杂的功能。
NVIDIA VIA 微服务提供模块化架构和可定制的模型支持。它支持录制的视频和直播,并具有可轻松集成到现有系统中的 REST API,以及用于快速试用的用户界面(UI)。
每个 NVIDIA VIA 微服务都是单个容器,无需依赖其他容器或微服务。NVIDIA VIA 可以轻松部署到独立机器、本地环境、云或任何云服务提供商(CSPs).
NVIDIA VIA 微服务集成与 NVIDIA NIM
NVIDIA VIA 微服务可轻松与 NVIDIA NIM 集成。您可以灵活地使用 NVIDIA API Catalog 中的模型预览 API 和可下载的 NVIDIA NIM 微服务中的任何 LLM 或 VLM 模型NVIDIA API Catalog。
默认情况下,NVIDIA VIA 使用 OpenAI GPT-4o 模型作为 VLM。在本文中,我们使用 NVIDIA VITA-2.0 模型作为 NGC 中提供的 VLM。
NVIDIA VIA 使用 NVIDIA 托管的 Llama 3 70B NIM 微服务作为 NVIDIA NeMo Guardrails 和 Context-Aware RAG (CA-RAG) 模块的 LLM。您可以从 API 目录中选择各种不同的 LLM 和 VLM,从 NVIDIA 托管或本地部署的选项中进行选择。
NVIDIA NIM 是一套微服务,包含行业标准的 API、特定于领域的代码、优化的推理引擎和企业运行时。它提供多个 Visual Language Models(VLM),用于构建视觉 AI 代理,该代理可以处理实时或存档的图像或视频,从而使用自然语言提取可行的见解。
Visual AI 代理使用 VIA 微服务构建用于汇总
如今,大多数 VLM 仅接受有限数量的帧,例如 8/10/100 帧。它们也无法为更长的视频准确生成字幕。例如,对于一小时的视频,采样帧可能相距 10 秒,甚至更长,这可能会导致某些细节被忽略或操作无法被识别。
此问题的解决方案是,从长视频中创建较小的数据块,使用 VLMs 单独分析数据块,然后汇总和聚合结果,为整个文件生成单个摘要。
摘要代理由以下组件组成:
- NVIDIA VIA 流处理程序:管理与其他组件(例如 NeMo Guardrails、CA-RAG、VLM 管线、chunking 和 Milvus Vector DB)的交互和同步。
- NeMo Guardrails:过滤掉无效的用户提示。它利用 LLM NIM 微服务的 REST API。
- VLM 工作流 – 对流处理程序生成的视频块进行解码,使用基于 NVIDIA Tensor RT 的视觉编码器模型为视频块生成嵌入,然后利用 VLM 为用户查询生成每块响应。它基于 NVIDIA DeepStream SDK。
- VectorDB:存储每个块的中间 VLM 响应。
- CA-RAG 模块:从每个块的 VLM 响应中提取有用信息,并将其聚合以生成单个统一摘要。CA-RAG (Context-Aware Retrieval-Augmented Generation) 使用 LLM NIM 微服务的 REST API。
NVIDIA VIA 微服务具有以下特点:
- 视频和直播摘要
- 多个 GPUs 上的最佳且高度可扩展的实现
- 借助 CA-RAG 模块实现更好的总结
- 支持对任何用例进行总结
视频和直播摘要
借助 NVIDIA VIA,您可以使用 REST API 轻松总结长视频文件和直播流。NVIDIA VIA 在提供大量可配置参数的同时,还处理所有繁重的工作。
对于文件摘要,NVIDIA VIA 会根据用户配置的 chunk 持续时间、chunk overlap 持续时间和文件持续时间,将输入文件拆分为 chunks。
例如,对于一个时长为 1 小时、块时长为 1 分钟的文件,它会生成 60 个 chunks。这些 chunks 由 VLM pipeline 并行处理。当所有 chunk captions 可用时,CA-RAG 会汇总和聚合这些 captions,以生成文件的单个最终摘要。
对于直播,流式传输工作流会从 RTSP 服务器接收串流数据。NVIDIA VIA 微服务会根据用户配置的 chunk 持续时间持续生成视频块片段。然后,VLM 工作流会为这些 chunk 生成字幕。
NVIDIA VIA 引擎会继续从 VLM 管道中收集字幕。当根据用户配置的摘要持续时间处理足够的块时,收集的块将发送到 CA-RAG 进行摘要和聚合。VIA 引擎会继续处理下一个块。摘要将使用 HTTP 服务器发送的事件流式传输到客户端。
在多个 GPUs 上实现高度可扩展的优化实现
您可以根据视频文件和直播流、视频内容和 VLM 模型的用例配置 chunking 参数。
视频文件
chunk_duration
:整个视频被划分为 chunk_duration
长度段,N 帧 (依赖于 VLM 的) 从该 chunk 中采样并发送到 VLM 进行 inference。The chunk duration 应该足够小,以便 N 帧可以捕获事件。
chunk_overlap
:如果事件发生在块的交叉路口,则采样帧可能无法捕获完整的事件,并且模型无法检测到它。VIA 通过使用滑动窗口方法来缓解此问题,其中 chunk_overlap
是块之间的 overlap duration。(Default: 0
)。
流
chunk_duration
:与视频文件类似,实时流被划分为多个 chunk_duration
片段,并发送到 VLM 进行推理, chunk_duration
应该足够小,以便 N 帧可以捕获事件。
summary_duration
:用户想要生成摘要的持续时间。这使用户能够控制应生成摘要的流的持续时间。例如,如果 chunk_duration
为 1 分钟,summary_duration
为 30 分钟,则将流划分为 1 分钟的块以进行 VLM 推理。然后,30 个块的 VLM 输出经过聚合,为用户提供 30 分钟的简洁摘要。
分块配置示例
tail-gating detection:
chunk_duration: 2 min
chunk_overlap: 15 sec
traffic violation (such as a wrong turn):
chunk_duration: 30 sec
chunk_overlap: 15 sec
适用于流的某些示例用例的分块配置示例,例如:streams:
sports summarization:
chunk_duration: 2 min
summary_duration: 15 min
robot control:
chunk_duration: 5 sec
summary_duration: 5 sec
这些只是指南,实际参数必须由用户根据其用例进行调整。这是准确性和性能之间的权衡。较小的 chunk sizes 会带来更好的描述,但处理时间更长。
NVIDIA VIA 在单个节点上支持多个 GPUs。它可以通过在多个 GPUs 上分配 chunks 并并行处理这些 chunks 来高效扩展。
对于 VITA-2.0,NVIDIA VIA 使用 TensorRT-LLM 加速以提高性能。它还可以利用单个 GPU 上的多个 NVIDIA DEC 引擎,从而加速视频文件的解码。通过在 NVIDIA VIA 上进行扩展,您可以在几分钟内处理一个小时的文件,具体取决于系统和 GPU 配置。
借助 Context-Aware RAG 模块实现更好的总结
NVIDIA VIA 包含 CA-RAG 模块,可提供更好的摘要结果。CA-RAG 负责从每个块的 VLM 标题中提取有用信息,并对其进行聚合和摘要。
您可以配置 CA-RAG 的各个方面:
- 总结方法
- 要使用的 LLM 模型及其参数
- LLM 会提示更改响应格式
- 等等
CA-RAG 基于 LangChain,可以扩展。
支持对任何用例进行总结
NVIDIA VIA 摘要微服务通过修改prompts
、models
、chunk parameters
等,为各种用例提供灵活的解决方案。这些prompts 分为两类:
- VLM 提示:用户可以指定要从视频块中提取的详细信息、事件或动作。
- LLM prompt: 用户可以指定如何组合生成的 VLM 响应以创建最终的摘要。
我们建议您尝试不同的 prompts 和 chunk lengths,以优化性能并获得最佳结果。
性能
图 2 显示了视频上传后不同长度视频的端到端汇总时间。这四个图形针对用于添加字幕的不同块大小 (越小越好)。使用 60s 的字幕块大小,50m 的汇总需要 50s。这里的汇总应用程序使用 NGC 上提供的 NVIDIA VITA-2.0 模型。
使用 NVIDIA VIA 微服务的视觉 AI 代理已在以下 NVIDIA GPUs 上进行验证:
- A100
- H100
- L40 和 L40
- A6000
它们还可以部署在采用 NVIDIA Ampere、NVIDIA Hopper 和 NVIDIA Ada Lovelace 架构的其他 GPU 平台上。
开始使用 NVIDIA VIA 微服务
使用 NVIDIA VIA 微服务和 NVIDIA NIM 构建基于 VLM 的强大 AI 代理。REST APIs 在现有客户应用中提供了轻松集成此工作流程和 VLM 的 ease。
有关更多信息,请参阅以下资源:
- NVIDIA VIA microservices,现在已经在开发者预览版中提供
- NVIDIA VIA 论坛
- 视觉 AI 代理解决方案页面
- 利用视觉 AI 智能体 Harnessing Large Language Model 和生成式 AI (GTC 会议)