AI 技术领域的一项令人兴奋的突破是视觉语言模型(VLM),它为视频分析提供了一种更动态、更灵活的方法。VLM 使用户能够使用自然语言与图像和视频输入进行交互,使技术更具可访问性和适应性。这些模型可以在 NVIDIA Jetson Orin 边缘 AI 平台上运行,也可以通过 NIM 在独立的 GPU 上运行。本文将探讨如何构建基于 VLM 的视觉 AI 代理,以便从边缘到云端运行。
什么是视觉 AI 智能体?
视觉 AI 智能体由 VLM 提供支持,在其中您可以使用自然语言提出各种问题,并在录制或直播视频中获得反映真实意图和上下文的见解。这些智能体可以通过易于使用的 REST API 进行交互,并与其他服务甚至移动应用集成。新一代视觉 AI 智能体具有多种功能,包括总结场景、创建各种警报,以及使用自然语言从视频中提取可行见解。
NVIDIA Metropolis 带来了视觉 AI 代理工作流,这些是参考解决方案,旨在加速由 VLM 驱动的 AI 应用程序的开发,以便从部署在边缘或云端的视频中提取具有上下文理解的见解。
对于云部署,开发者可以使用 NVIDIA NIM,这是一套推理微服务,包含行业标准 API、特定领域的代码、优化的推理引擎和企业运行时,以支持视觉 AI 代理。首先,访问 API 目录,以直接从浏览器中探索和试用基础模型。在 Metropolis NIM 工作流程 GitHub 页面 上,可以查看 NIM 驱动的视觉 AI 代理示例。
本博客文章重点介绍 Jetson Orin 上边缘用例的实现,我们将探索如何使用 NVIDIA JetPack SDK 的一项新功能,即 Jetson 平台服务,进行边缘部署。我们将构建一个生成式 AI 驱动的应用程序,能够检测用户在实时视频流中使用自然语言设置的事件,然后通知用户,如图 1 所示。
使用 Jetson 平台服务,在边缘构建视觉 AI 代理。
Jetson 平台服务是一套预构建的微服务,为在 NVIDIA Jetson Orin 上构建计算机视觉解决方案提供基本的开箱即用功能。这些微服务中包含 AI 服务,支持生成式 AI 模型,如零样本检测和先进的 VLM。要了解 Jetson 平台服务的功能亮点,请阅读这篇博客文章。
VLM 将大型语言模型与视觉 Transformer 相结合,可对文本和视觉输入进行复杂推理。这使得 VLM 能够用于各种用例。同时,这种灵活性也使得 VLM 可以通过调整提示来动态调整。
Jetson 上的首选视觉语言模型(VLM)是 VILA,因其通过优化每张图像的令牌而提供的 SOTA 推理能力和速度。VILA 的架构和基准测试性能概述如图 3 所示。
如需详细了解 VILA 及其在 Jetson 上的性能,请参阅《Visual Language Intelligence 和 Edge AI 2.0》博文。
虽然 VLM 在实验和启用输入图像的交互式对话方面很有趣,但是在实际场景中应用这项技术是至关重要的。
找到让大型语言模型执行有用任务并将其整合到大型系统中的方法非常重要。通过将 VLM 与 Jetson 平台服务相结合,我们可以创建一个基于 VLM 的视觉 AI 代理应用,该应用可以检测直播摄像头上的事件,并通过移动应用向用户发送通知。
该应用程序由生成式 AI 提供支持,并使用 Jetson 平台服务中的多个组件。这些组件如何协同工作以创建整个系统,图 4 说明了这一点。同时,该应用程序还可以与防火墙、物联网网关和云服务一起使用,以实现安全的远程访问。
构建基于 VLM 的视觉 AI 代理应用
以下部分将指导您使用 Jetson 平台服务构建视觉 AI 代理系统的高级步骤。该应用程序的完整源代码可以在 GitHub 上找到。
VLM AI 服务
第一步是围绕 VLM 构建一个微服务。
Jetson Orin 上的 VLM 支持由 nanoLLM 项目 提供。我们可以使用 nanoLLM 库,通过 Python API 在 Jetson 上下载、量化和运行 VLM,然后将其转变为微服务,如图 4 所示。
我们会执行以下步骤:
- 用易于调用的函数包装模型。
- 使用 FastAPI 添加 REST API 和 WebSocket。
- 使用 mmj_utils 添加 RTSP 流输入和输出。
- 将元数据输出到所需的通道中,例如输出到 Prometheus、Websocket 或 Redis。
然后,微服务具有一个主循环,该循环用于检索帧,从 REST API 更新提示,调用模型,然后输出结果。以下伪代码捕获了这一点。
# Add REST API
api_server = APIServer(prompt_queue)
api_server.start()
# Add Monitoring Metrics
prometheus_metric = Gauge()
prometheus.start_http_server()
# Add RTSP I/O
v_input = VideoSource(rtsp_input)
v_output = VideoOutput(rtsp_output)
# Load Model
Model = model.load()
While True:
#Update Image & Prompt
image = v_input.capture()
prompt = prompt_queue.get()
# Inference Model
model_output = predict(image, prompt)
# Generate outputs
metadata = generate_metadata(image, model_output)
overlay = generate_overlay(image, model_output)
# Output to Redis, Monitoring, RTSP
redis_server.xadd(metadata)
Prometheus_metric.set(metadata)
v_output.render(overlay)
我们提供了一个实用程序库,以作为在 GitHub 上集成许多常见组件和完整参考示例的起点。
提示工程
VLM 的提示包含三个主要组件:系统提示、用户提示和输入帧,如图 5 所示。我们可以调整 VLM 的系统和用户提示,教会它如何在直播警报中进行评估,并将结果输出为结构化格式,该格式可以被解析并与其他服务集成。
在本示例中,我们使用系统提示来解释模型的输出格式和目标。系统提示可以被告知用户提供了一份警报列表,该提示将对每个警报在输入帧中进行评估,判断其为真或假,并将结果输出为 JSON 格式。
然后,可以通过 REST API 提供用户提示。系统会公开一个端点,用于支持查询和警报输入。用户输入与系统提示相结合,然后与来自输入实时流的帧一起提供给 VLM。接着,VLM 会评估帧上的完整提示并生成响应。
此响应会被解析并作为 JSON 提供,我们使用它与警报监控服务和 WebSockets 集成,以跟踪并向移动应用程序发送警报。
与 Jetson 平台服务及移动应用程序的集成
完整的端到端系统现在可以组合在一起,并与移动应用集成,以构建由 VLM 提供支持的视觉 AI 智能体。图 6 显示了 VLM、Jetson 平台服务、云和移动应用的架构图。
要获取 VLM 的视频输入,Jetson 平台服务的网络服务和 VST 会自动发现并提供连接到网络的 IP 摄像头。然后,这些摄像头将通过 VST 的 REST API 自动提供给 VLM 服务和移动应用程序。
移动应用可以通过 API 网关访问 VST 和 VLM 服务公开的 API。然后,移动应用可以使用 VST API 获取直播列表,并在应用的主屏幕上向用户展示直播的预览。
然后,用户可以在该应用程序中使用自然语言为其所选直播设置自定义警报,例如“Is there a fire”。提交后,应用程序将调用 VLM 服务的流控制 API,告诉它使用哪个直播摄像头作为输入。然后,它将调用 alert API 为 VLM 设置警报规则。一旦收到这两个请求,VLM 将开始对直播流评估警报规则。
当 VLM 确定警报为 True 时,它会在连接到移动应用程序的 WebSocket 上输出警报状态。这将在移动设备上触发弹出通知,用户可以单击该通知进入聊天模式,并提出后续问题。
如图 7 所示,用户可以与 VLM 进行实时聊天,讨论输入直播流,并且可以直接在应用程序中使用 VST 中的 WebRTC 查看直播流。
借助 VLM、Jetson 平台服务和移动应用,现在您可以为连接到 Jetson 的直播摄像头设置任何自定义警报,并实时接收通知。
结束语
本博客文章讨论了如何将 VLM 与 Jetson 平台服务相结合,以构建视觉 AI 智能体。要开始使用,请前往 Jetson 平台服务产品页面。我们提供了两个预构建的项目:一个用于启动 VLM AI 服务的容器,以及一个适用于 Android 的预构建移动应用 APK。
您可以在 GitHub 上获取 VLM AI 服务的完整源代码。这是一个了解如何使用 VLM 和构建您自己的微服务的绝佳参考资源。若您有技术问题,请访问 论坛。
如需了解更多信息,请访问: