本方案说明来自:
人工智能 (AI) 越来越多地用于所有主要行业的各种用途,包括但不限于医疗保健、零售、金融、房地产和运输。在交通领域,特斯拉、通用汽车、福特、Alphabet、苹果和英伟达等公司已经开始投资开发自动驾驶汽车技术。此外,一些自动驾驶卡车初创公司和美国铁路协会已经制定了自动驾驶汽车的指导方针。
一项新技术,主动列车控制 (Positive Train Control,PTC),已在 100% 的 1 类 PTC 路线英里网络范围内成功部署和实施。该系统使用 GPS、WiFi 和无线电传输在列车和异地计算机之间发送数据,以帮助防止碰撞和脱轨。如果检测到潜在威胁或违规,系统会使用列车速度和当前速度限制等数据自动停止列车。然而,该解决方案并不太先进,无法提供端到端的自动化,而且操作员必须控制列车。
在这篇博文中,我们介绍了一种用于货运列车自动驾驶车辆的概念验证端到端解决方案,并解释了它是如何实施和部署的。我们首先描述了我们如何使用 TensorFlow 和 TensorRT 框架训练和优化一组模型,以检测铁路上的入侵者,并识别铁路标志和标记。然后,我们深入探讨在边缘设备(NVIDIA Jetson Xavier AGX)上部署模型所面临的挑战,该解决方案使用的软件架构和设计原则以及端到端推理延迟基准测试。
解决方案简介
我们开发了一种端到端解决方案,通过检测铁轨上的闯入者、识别信号及其相应含义以在运输过程中为操作员提供帮助,从而提高货运列车的安全性。
我们的解决方案部署在 NVIDIA Jetson Xavier AGX 上——这是一款外形小巧的计算设备,针对能效进行了优化,同时为运行端到端应用程序提供了强大的硬件堆栈。该设备拥有 512 核 Volta GPU 和 Tensor Cores、32 GB RAM、2 个深度学习加速器、1 个视觉加速器,并支持基于硬件的视频编码和解码。您可以在此处获取有关设备规格的更多信息。
为了帮助开发者入门,NVIDIA 提供了许多 SDK,例如 DeepStream 以及对 CUDA 和 TensorRT 的支持。DeepStream SDK是一个构建在 GStreamer 之上的框架,它允许开发人员构建复杂的 AI 管道。但是,我们没有在这个用例中使用 DeepStream SDK,因为它更适合生产环境,而我们构建端到端解决方案的主要工作是在原型设计阶段。
该TensorRT框架,如下图所示是用于高性能深度学习优化模型的SDK。它提供优化,例如降低混合精度和层融合,以减少延迟并提高模型吞吐量。
问题陈述
我们试图解决的主要挑战是通过帮助列车操作员监控环境来提高安全性,尤其是在较长的运输时间期间。火车经过的环境很复杂,因为它可能包括不可预测的事件,例如侵入者或轨道上的物体。此外,操作员还必须了解各种交通规则,例如闪烁的信号或靠近信号的特定字母向操作员传达附加信息。
图 2. 端到端解决方案旨在满足如图所示的要求。检测和跟踪信号、任何相关的字母或数字标记,然后将其映射到信号规则以提供其含义的信息。此外,系统还必须识别侵入者,并在识别出入侵者时发出警报。
这带来了许多挑战,因为解决方案必须能够跨时间范围检测和跟踪人员以及信号。该解决方案还应确定检测到的人员是现场工作人员还是入侵者,以及相关信号及其含义。我们将我们的解决方案构建为一组模块以整合这些功能。
图 3. 端到端解决方案需要使用机器学习模型来识别铁路信号和人员。
解决方案要求
为了检测和监控人员和信号,我们需要将端到端解决方案部署在单个 Jetson Xavier AGX 设备上,端到端延迟不低于 10 FPS 以及 Web-基于 UI 的可视化和分析目的。
因此,我们必须考虑许多权衡——选择用于对象检测的深度学习模型,例如 MobileNet 而不是 ResNet50,它允许更小的内存占用,显着降低推理延迟,但以降低准确性为代价。此外,深度学习模型在处理大量数据时表现异常出色,但另一个挑战是收集足够的数据。在以下部分中,我们将详细介绍我们如何应对这些挑战。
图 4. 在构建解决方案时,客户面临以上限制,这在构建和部署解决方案时带来了额外的挑战。
软件架构和设计原则
显示每个模块之间信息流的高级软件架构如图 5 所示。信息流从 RTSP 流或视频文件的输入图像开始,该图像被传递到第一级检测器。为了保持模块化,我们设计了关于输入和输出应该是什么样子的规范,下面的代码块 1 给出了一个例子。
代码语言:javascript复制{ 'object_detector': { 'input': [ { 'name' : 'image', 'shape': (batch_size, 1280, 720, 3), 'dtype': np.float32 } ], 'output': [ { 'name' : 'bbox', 'shape': (batch_size, num_objs, 4), 'dtype': np.float32 }, { 'name' : 'class', 'shape': (batch_size, num_objs), 'dtype': np.float32 }, { 'name' : 'scores', 'shape': (batch_size, num_objs), 'dtype': np.float32 } ], }}
代码块 1. 为了确保模块化,我们设计了每个模块的输入和输出应该是什么样子的规范,以确保更改内部算法或模型不会影响管道的功能。上面的代码块显示了第一阶段检测器的输入和输出的示例。
由于 Python 的全局解释器锁 (GIL) 施加的限制,为了确保每个模块都是非阻塞的,我们为所有模块使用了单独的进程。
使用对象跟踪模块跟踪对象后,使用预处理逻辑为每个后续模块分离对象。例如,只有检测到的人会被传递到侵入者分类模块,而检测到的信号会被传递到交通灯检测器。信号修改器分类器检测交通灯的颜色以及信号上相应的数字或字母代码。
由于在任何给定帧中都可能有许多不同的交通信号(参见图 2),因此使用启发式算法将正确的交通信号与带有信号轨道关联模块的火车轨道相关联。交通信号算法和业务逻辑获取此信息,识别信号是否闪烁,检测到任何侵入者,并输出相应的规则代码,操作员可以解释该代码以做出进一步决策。此信息通过MQTT Message Broker传递给操作员。
图 5. 软件架构显示了作为系统一部分的不同模块。左侧:每个模块都是一个 python 类或函数。右侧:构建应用程序时使用的设计原则。
ML 模型 – 优化和基准测试
图 6 突出显示了图 5 中每个相应 Python 模块的网络架构、分辨率和推理速度。我们为第一阶段检测器选择了 ResNet50 主干网,因为需要一个准确的对象检测器。由于 GPU 内存和端到端延迟限制,后续模块使用了更轻的主干。
为 FP32 和 FP16 精度模式列出的推理速度适用于使用 TensorRT 框架转换的模型。由于 TensorRT 不支持某些操作,我们使用了混合 TensorFlow-TensorRT 模型。这允许在 TensorFlow 中运行不受支持的操作时优化 TensorRT 支持的操作。由于精度显着下降和较大的初始化时间,未使用 INT8 精度模式。
图 6. 我们管道中使用的 ML 模型的推理基准(见图 5)。使用 FP16 精度模式可以显着减少推理时间,同时对精度的影响最小。
图 7 显示了每个 ML 模型的 FPS 和相应的端到端 FPS。尽管部署了大量模型,但我们实现的 FPS 高于客户要求的最低 FPS。
图 7. 每个 ML 模型的平均延迟和 FPS 以及相应的端到端 FPS。
下一步是什么?
通过在 NVIDIA Jetson AGX Xavier 设备上训练并部署在机上的大规模计算机视觉系统,人工智能正在将货运行业转变为更高效、更环保、更安全的运营方式,使铁路更接近于实现自动化。
我们提出了一个构建为一组 Python 模块的解决方案,为各种对象检测、跟踪和分类机器学习模型提供服务,这些模型经过训练,然后使用 TensoRT 框架使用 FP16 精度和层融合等策略进行优化部署。我们还表明,尽管在边缘设备上部署大量模型存在挑战,但我们能够在客户端设定的限制范围内实现超过 10 FPS 的端到端推理速度。
本文翻译自:
https://quantiphi.com/deploying-edge-on-ai-to-improve-railroad-safety/