利用 YOLOv8 和 NVIDIA JetPack 6.0 生成交通洞察

2024-07-12 16:03:15·  来源:NVIDIA英伟达企业解决方案  
 


智能交通系统 (ITS) 在现代城市环境中的应用正变得越来越有价值和普遍。使用 ITS 应用的优点包括:


提高交通效率:通过分析实时交通数据,ITS 可以优化交通流、缓解拥堵并缩短行车时间。

提高安全性:ITS 可以检测潜在危险、监视交通违法行为,并更有效地管理突发事件,从而使道路变得更加安全。

提高环境可持续性:高效的交通管理可减少燃油消耗与尾气排放,促进环境的可持续发展。


重要的是,这些系统需要在边缘处理信息,以实现可靠的带宽、保护隐私、进行实时分析等更多功能。


本文将介绍如何使用 NVIDIA JetPack 6.0 中的全新 Jetson 平台服务,来构建一个适用于边缘的端到端交通分析解决方案。该系统集成了多个功能:使用视频存储工具包 (VST) 服务进行视频数据的接收与存储;借助 YOLOv8 和 DeepStream AI 感知服务实现实时目标检测和车辆追踪;车辆移动的时空分析。在构建好这一流程后,将利用 API 生成分析报告。


Jetson 平台服务的优势


利用 Jetson 平台服务与 NVIDIA Jetpack 构建和部署的 AI 应用具有以下优势:


快速、高效这一丰富且经过优化的 API 驱动的微服务集合,可以显著缩短解决问题的时间。

可扩展该微服务架构实现了各种组件的独立扩展,根据需求优化资源利用率。

模块化将应用拆分为更小、更易管理的服务,简化了更新、维护和故障排除的过程。

灵活性这些服务能以多种方式进行配置和部署,为智能交通系统 (ITS) 提供定制化解决方案,针对交通监控、交叉路口管理以及行人安全保障等方面。


应用概述


ITS 应用主要采用了三项核心服务:视频存储工具包 (VST)、AI 感知和 AI 分析。此外,它还运用 Redis 消息总线、API 网关、IoT 网关等几项基础服务。


图片

图 1. ITS 应用的服务和连接


VST 是视频数据的入口。它能在基于 Jetson 的平台上高效地管理摄像头和视频流,提供从多个视频源进行的硬件加速视频解码、流式传输和存储。在该设置中,视频输入文件通过 RTSP 协议流式传输到 VST。有关使用 VST 和添加 RTSP 流的更多信息,请参见 VST 文档:

https://docs.nvidia.com/moj/VST_Toc.html


接下来,视频数据流进入利用 NVIDIA DeepStream SDK 的 AI 感知服务,其先采用 YOLOv8 物体检测模型实现高吞吐量,随后使用 NvDCF 追踪器进行物体追踪。该流程基于 NVIDIA Metropolis 架构生成元数据,捕获场景中检测到的各种物体的类别和坐标信息。


紧接着生成的元数据和事件被发布到 Redis 消息总线,该总线是系统内部消息传递的骨干。AI 分析服务订阅了该总线,接收执行详细交通分析所需的信息。


这种基于服务的架构确保从视频输入到分析的数据流畅且高效,充分利用了 NVIDIA Jetson 设备的处理能力。该方法提高了处理速度和响应能力,非常适合需要实时数据解释和即时行动的 ITS 应用。


用于物体检测的 YOLOv8


YOLOv8 作为最先进的物体检测模型脱颖而出,以其无与伦比的速度和准确性著称。其轻量级架构特别适合部署在 NVIDIA Jetson 等边缘设备上。在 ITS 应用中,YOLOv8 能够实时检测和分类车辆、行人、交通标志等对象。这为管理和优化交通流量、加强道路安全以及支持自动化交通系统提供关键数据。有关各种 YOLO 模型的更多信息,请参阅计算机视觉中的 YOLO 架构综述:


https://arxiv.org/abs/2304.00501


下载和准备 YOLOv8


开始使用前,请先在 GitHub 的 ultralytics 资源库下载 YOLOv8 模型。本文使用 YOLOv8 发布版本所训练的 COCO 数据集中轿车、公交车和卡车三类作为示例。请注意,用户有责任验证每个数据集许可证是否符合预定用途。


接下来,需要将该模型转换成 NVIDIA TensorRT 执行引擎,以针对 NVIDIA Jetson 的硬件能力对其进行优化。DeepStream 微服务容器附带的脚本可帮助简化这一转换过程。


要运行 YOLOv8 安装脚本,首先要确保您已按照 Jetson 平台服务文档中的“快速入门”部分所述的步骤安装了微服务、参考应用以及 NVStreamer。此时,您还可以配置 NVStreamer 以通过 RTSP 传输以下文件,该文件将作为输入使用。

opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4


要执行脚本,请运行针对您的硬件提供的以下命令。


Jetson AGX Orin:



Jetson Orin NX16:



设置脚本执行的任务包括:

  1. 硬件特定配置:根据 NVIDIA 硬件(AGX 或 NX16)调整诸如批量大小等参数,以优化性能。

  2. 依赖性管理:下载 YOLOv8 模型文件和 COCO 数据集,安装所需库,并准备用于量化的校准图像。

  3. INT8 校准:将浮点模型量化为 INT8,以获得最佳推理性能。

  4. 模型转换:将模型从 PyTorch 转换成 onNX 格式,并生成 TensorRT 引擎。

这个过程大约需要 15 到 30 分钟,并生成部署 YOLO 所需的以下文件:

  • ./yolov8s/calib.table

  • ./yolov8s/model_b4_gpu0_int8.engine 或 (依据设备类型的不同)

    ./yolov8s/model_b8_gpu0_int8.engine

  • ./yolov8s/yolov8s-dependencies/yolov8s.onnx


自定义 AI 感知服务


用于 AI 感知的 DeepStream 容器还集成了一个程序库。该库包含自定义函数,用于从 YOLOv8 模型中创建优化后的 NVIDIA TensorRT 引擎,并解析该模型输出结果。这个转换脚本和程序库均来自 GitHub 上的 marcoslucianops/DeepStream-Yolo 资源库(遵循 MIT 许可):

https://github.com/marcoslucianops/DeepStream-Yolo


这些自定义函数用于配置 DeepStream 推理插件:




运行应用程序


设置完成后,就可以运行应用了。AI-NVR 堆栈中包含了该应用程序的 Docker Compose 配置。请使用下方提供的与您硬件配置相匹配的命令来运行。


Jetson AGX Orin:



Jetson Orin NX16:



利用 AI 分析服务进行车辆数据分析


利用 AI 分析服务的绊线(或越线)和轨迹功能进行车流量分析。您可以通过 REST API 配置这些分析功能,包括:


1. 在给定的时间范围内统计穿越预设线段的车辆总数(包括轿车、公交车和卡车)。

2. 在给定时间范围内的车流量趋势分析,可缩短时间窗口进行深入研究。

3. 在给定时间范围内的车流量热力图展示。


概念


绊线(或越线)是指在摄像头平面上绘制的虚拟线条,用于统计双向穿越该线条的物体数量。


轨迹指车辆实际行驶的路径,由系统逐帧追踪并记录。AI 感知服务会为每辆车分配一个唯一 ID。系统中的“轨迹”概念代表车辆行驶的总路径。


API 规范


有关以下部分中提到的 API 详细信息,请参阅 AI 分析服务规范:

https://docs.nvidia.com/jetson/jps/emdx_API/index.html


绊线配置


绊线分析可以针对给定的传感器,通过以下 API 进行配置。请注意,下面使用的值应与通过 sensor/add API 向 VST 添加流时设置的 name 相同。可以使用 cURL 或 Postman 等工具发出 HTTP post 请求。


HTTP POST 请求端点:


http://{jetson-device-ip}:30080/api/emdx/api/config/tripwire?sensorId=


请注意,必须将 jetson-device-ip 替换为 Jetson 设备正确的 IP 地址。


请求:




生成绊线时间序列分析


可通过绊线计数 API 检索给定时间范围内不同车辆类型(由 YOLOv8 模型检测)的总穿越次数。


一旦绊线创建完成,您可以使用以下示例查询来检索在 2024 年 5 月 15 日格林威治时间上午 11 点至中午 12 点期间,传感器 ID ExpressWay 上配置的 ID 为 road-tw 的绊线处各类物体的总穿越次数。此外,该查询还请求对轿车、公交车和卡车这三类对象的穿越次数进行细分。


HTTP GET 查询:




请注意,与前面一样,必须将 jetson-device-ip 替换成 Jetson 设备正确的IP地址。


响应:




交通趋势直方图可视化


还可以使用绊线计数直方图 API 将之前的总计数汇总到更小的时间窗口中。

使用以下示例查询来检索在格林威治标准时间 2024 年 5 月 15 日上午 11 点到中午 12 点之间,传感器 ID 为 ExpressWay 上配置的 ID 为 road-tw 的绊线处物体(所有类型)穿越次数的直方图,并将其细分到 1 分钟的时间窗口。


HTTP GET 查询:




这将转储每个 1 分钟间隔的 JSON 输出与 1 分钟窗口中的汇总计数。您可以将这些信息绘制成堆叠直方图,以表示计数随时间变化的趋势(图 2)。


图片

图 2. 以 1 分钟为间隔的交通流量计数直方图


车辆轨迹热力图可视化


本部分将介绍如何使用 AI 分析服务中的行为 API 生成热力图。热力图是通过累积运动轨迹并将它们映射到区域空间中生成的,它提供了一种可视化方式帮助呈现交通流随时间的变化趋势。




图 3. 移动交通热力图


热力图生成逻辑


根据给定时间范围内所有物体的轨迹行为坐标 [x, y],通过  numpy.histogram2d. 计算出直方图。然后应用高斯滤波器对结果进行平滑处理。请访问 GitHub 上的 NVIDIA-AI-IOT/jetson-platform-services 资源库,查看与此逻辑相关的函数笔记。使用 VST API 获取传感器图像快照。在图 3 中,平滑后的直方图被可视化成热力图。


GitHub:

https://github.com/NVIDIA-AI-IOT/jetson-platform-services/tree/main/notebooks/traffic-analytics


VST API:

https://docs.nvidia.com/moj/vst_API/index.html#/v1/getLiveStreamPicture


使用下面的示例,查询检索传感器 ID ExpressWay 在给定时间内对象类型为轿车、公交车和卡车的轨迹行为。

HTTP GET 查询:



响应:



响应了一个给定对象随时间变化的轨迹项数组,其中每个项都是由两个元素构成的。第一个元素是以毫秒为单位的视频帧时间戳(1708598580297,Unix 时间),第二个元素是位置坐标数组 [x,y],例如 [291, 590],表示该图像平面上 x=291,y=590。


交通分析文件


请访问 GitHub 上的 NVIDIA-AI-IOT/jetson-platform-services 资源库,并下载文件在您的本地系统上运行。请按照步骤说明尝试使用您自己的视频文件或摄像头进行操作。


总结


本文介绍了如何使用 NVIDIA JetPack 6.0 中的 Jetson 平台服务和 YOLOv8 物体检测模型来构建智能交通应用。Jetson 平台服务是一组功能丰富的微服务,可用于边缘构建 AI 应用。开发者可以使用这些 API 快速、高效地开发应用,并生成车辆计数、交通热力图等洞察。这些微服务具有可替换性,并且可以扩展到多种边缘 AI 应用中。

分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号