点击蓝字
关注我们,让开发变得更有趣
文章作者:冯伟 英特尔应用软件架构师
简介
经过5年的发展,OpenVINO™ 工具套件已经在人工智能视觉分析领域获得了广泛的应用。近年来,基于深度学习和神经网络的人工智能在视觉,音频,自然语言等多个领域取得了广泛成功。在时间序列信号分析方面,深度学习也体现出优于传统分析方法特性。
本文希望通过模拟高速公路网的通行速度实时预测的案例,介绍如何基于 OpenVINO™ 和 AIxBoard 开发套件搭建时间序列信号收集,存储和分析的解决方案。
英特尔开发者套件爱克斯板(复制到浏览器打开)
https://www.intel.cn/content/www/cn/zh/developer/topic-technology/edge-5g/hardware/lan-wa-aixboard-edge-dev-kit.html
英特尔数字化开发套件 AIxBoard 是一款 IA 架构的人工智能嵌入式开发板,体积小巧功能强大,可以在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。它是一款面向专业创客、开发者的功能强大的小型计算机,借助 OpenVINO™ 工具套件,CPU、iGPU 都具备强劲的 AI 推理能力。
本文介绍的方案将全部运行在 AIxBoard 上。
数据集
本文使用的数据集来自加州交通部的 PeMS 交通数据库。这个数据库包含了在加州的高速公路上收集的大量真实数据。本例中采用的 PeMSD7 子集,其中包含了加州第七区 (District 7) 的高速公路网中设置的228个速度传感器采集到的44个工作日的数据。这些传感器每30秒采集一次所在路段的通过速度。最终的数据则是通行速度每5分钟的平均值。
California District 7
下图为随机挑选的3个传感器采集的三天的通行速度曲线。图中纵坐标为通行速度,单位是 km/h。横坐标是时间,每个点代表5分钟。从图中很容易看出每个传感器所在路段的通行速度随一天时间变化都有比较明显的规律。但不同路段各自的规律又有明显的差别。
Speed data samples
对某一个或多个变量,基于过去一段时间观察到的值来预测未来一段时间内可能可能发生的值,属于典型的时序数据预测问题。在本案例中,我们希望通过每个路段过去一段时间的通行速度,来预测未来一段时间的通行速度。
Time-series Data Forecasting
模型训练
传统统计模型,例如 ARIMA 模型及其各个变种模型在时间序列预测问题取得了显著成果。但这类传统模型往往受限于数据平稳性假设。在处理多个变量时,变量间关系也无法体现在模型中。比如本例中,各个传感器所在路段在地理上的关联在传统模型中就被忽略掉了。[1]
本文采用了[2]中介绍的图卷积 (graph convolution) 加 LSTM 的简化模型。模型首先用根据传感器间的距离构建一张无向图,并使用图卷积作为模型的第一层,配合 LSTM 层可以使模型同时学习空间和时间的信息。
model
我们提取了 PeMSD7 数据集中的26个传感器的数据,并按照训练 (50%),验证 (20%),和测试 (30%) 对其进行了分割。部分测试数据用来作为数据模拟模块的输入。
具体模型训练的细节可以参考[2]。
模型转换
OpenVINO™ 自带的模型优化器能够将 pytorch, tensorflow 等多种框架训练得到的模型转换为 OpenVINO™ Runtime 需要的中间格式 (IR)。具体转换方法在 OpenVINO™ 官方文档中有详细解释。[3]
方案架构
本方案采用了微服务架构,每个模块都有各自的 Docker镜像。所有微服务使用 docker compose 管理。
Software solution
数据模拟
模拟传感器 sensor 向 EMQX 模块发布模拟通行速度数据。模拟数据来自 PeMSD7 数据集的测试部分。模拟模块根据系统时间提取数据集对应的当时速度,再加上少量随机分布的误差,作为整个系统的输入。
数据收集
作为大规模分布式 MQTT 消息服务器,使用 [EMQX] (emqx.io) 可以高效可靠地连接海量物联网设备,实时处理分发消息与事件流数据,助力构建关键业务的物联网与云应用。
了解 EMQX 请见下方地址(复制到浏览器浏览):
https://www.emqx.io/
我们直接使用 EMQX 官方 Docker 镜像构建数据收集模块。使用 EMQX 作为 MQTT broker,接受模拟传感器发布的速度数据。通过规则引擎配置,使 EMQX 将接收到的速度数据转发给 TDengine 进行存储。
数据存储
本例中我们采用了时序数据库 [TDengine](taosdata.com)的官方 Docker 镜像进行数据存储。TDengine 是一款开源、云原生的时序数据库,专为物联网、工业互联网、金融、IT 运维监控等场景设计并优化。
了解 TDengine 请见下方地址(复制到浏览器浏览):
https://www.taosdata.com/
只需经过简单配置,即可通过 EMQX 将数据写入 TDengine,也可以使用 Grafana 对 TDengine 存储的数据进行展示。
分析模块
分析模块 (gcrnn) 集成了 OpenVINO™ 和 TDengine 客户端。在每一次分析过程中,我们使用 TDengine 客户端查询已经存入的各路段通行速度,并使用 TDengine 的数据聚合函数获取过去一小时的每5分钟均值,将生成的张量作为 OpenVINO™ Runtime 的输入。然后使用 TDengine 客户端将 OpenVINO™ Runtime 推理输出——也就是模型预测的未来通行速度——写入 TDengine。定时重复这一过程,即可实时预测各个路段未来的通行速度。
数据展示
数据展示模块直接使用了 Grafana 官方提供的 Docker 镜像。为了避免重复配置数据源和 Dashboard,这里可以使用 Grafana 的 Profiling 功能,通过配置文件使 Grafana 容器在启动时设置 tdengine 作为默认数据源,同时也可以加载准备好的 Dashboard。[4]
经过一段时间运行,可以观察到类似下图的效果。
Grafana Dashboard
图中第一列是随机选取的几个传感器发送的实时数据和使用 gcrnn 模块推理得到的一小段时间之后的预测值。下面的4个折线图中,黄色曲线是 gcrnn 预测的通行速度,绿色曲线是实际的通行速度。可以看出,使用本例中的简单模型进行推理得到的预测结果与实际数据还是比较接近的。
总结
本文通过模拟高速公路网通行速度采集与实时预测的案例,介绍了构建时间序列信号收集,存储和分析的基本流程和工具,同时展示了 OpenVINO™ 基于深度学习进行时间序列信号分析的能力。
参考资料:
[1]"Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting"
[2]"Traffic forecasting using graph neural networks and LSTM"
[3]"使用模型优化器转换模型"
[4]"Provision Grafana"
--END--
你也许想了解(点击蓝字查看)⬇️
➡️ OpenVINO™ DevCon 2023重磅回归!英特尔以创新产品激发开发者无限潜能
➡️ 5周年更新 | OpenVINO™ 2023.0,让AI部署和加速更容易
➡️ OpenVINO™5周年重头戏!2023.0版本持续升级AI部署和加速性能
➡️ OpenVINO™2023.0实战 | 在 LabVIEW 中部署 YOLOv8 目标检测模型
➡️ 开发者实战系列资源包来啦!
➡️
以AI作画,祝她节日快乐;简单三步,OpenVINO™ 助你轻松体验AIGC
➡️
还不知道如何用OpenVINO™作画?点击了解教程。
➡️
几行代码轻松实现对于PaddleOCR的实时推理,快来get!
➡️
使用OpenVINO 在“端—边—云”快速实现高性能人工智能推理
➡️
图片提取文字很神奇?试试三步实现OCR!
➡️
【Notebook系列第六期】基于Pytorch预训练模型,实现语义分割任务
➡️
使用OpenVINO™ 预处理API进一步提升YOLOv5推理性能
扫描下方二维码立即体验
OpenVINO™ 工具套件 2023.0
本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。