英特尔数字化开发套件 AIxBoard 是一款 AI 架构的人工智能嵌入式开发板,体积小巧功能强大,可以在时序数据预测、图像分类、目标检测分割和语音处理等应用中并行运行多个神经网络。作为一款面向专业创客、开发者的功能强大的小型计算机,借助开源人工智能工具套件 OpenVINO ,AIxBoard 能够让 CPU、iGPU 都具备强劲的 AI 推理能力。
如果时序数据库(Time Series Database,TSDB)TDengine 高效的存储查询特性和开放易用的生态集成能力,叠加上 AIxBoard/OpenVINO 的人工智能分析能力,这一强强组合将可以帮助用户更简单快速地开发出一个强大的时序数据人工智能分析系统。 本文将为大家介绍 Intel 团队如何在 AIxBoard 开发套件上运行 TDengine、OpenVINO 和其他软件,搭建时序数据收集、存储、分析和展示的解决方案,模拟实现高速公路网的通行速度实时预测功能。
方案架构
本方案采用了微服务架构,每个模块都有各自的 Docker 镜像,所有微服务均使用 docker compose 管理,代码仓库位于 https://github.com/wayfeng/traffic_prediction。数据采集模块
本方案使用的数据集来自加州交通部的 PeMS 交通数据库——包含在加州的高速公路上收集的大量真实数据。我们模拟传感器 sensor 应用 MQTT 协议发布通行速度数据,其中模拟数据来自 PeMSD7 数据集的测试部分,模拟模块根据系统时间提取数据集对应的当时速度,再加上少量随机分布的误差,作为整个系统的输入。通过 MQTT broker,我们能够接收到模拟传感器发布的速度数据,随后将这部分数据转发给 TDengine 进行存储。数据存储模块
数据存储使用 TDengine 的官方 Docker 镜像进行。借助 TDengine 丰富的生态协作能力,只需经过简单配置,即可通过 MQTT broker 将数据写入 TDengine,并通过 Grafana 对 TDengine 存储的数据进行展示。数据分析模块
分析模块(gcrnn)集成了 OpenVINO 和 TDengine 客户端。在每一次分析过程中,我们使用 TDengine 客户端查询已经存入的各路段通行速度,并使用 TDengine 的数据聚合函数获取过去一小时的每 5 分钟均值,将生成的张量作为 OpenVINO Runtime 的输入,然后使用 TDengine 客户端将 OpenVINO Runtime 推理输出——也就是模型预测的未来通行速度——写入TDengine。定时重复这一过程,即可实时预测各个路段未来的通行速度。数据展示
数据展示模块使用了 Grafana 官方提供的 Docker 镜像。TDengine 官方支持 data source plugin,可以轻松为 Grafana 提供数据。为了避免重复配置数据源和 Dashboard,这里可以使用 Grafana 的 Profiling 功能,通过配置文件使 Grafana 容器在启动时将 TDengine 设置为默认数据源,同时也可以加载准备好的 Dashboard。 相关资料参见 Provision Grafana:https://grafana.com/docs/grafana/latest/administration/provisioning方案效果
本文本例中采用的 PeMSD7 子集,其中包含了加州第七区 (District 7) 的高速公路网中设置的 228 个速度传感器采集到的 44 个工作日的数据,这些传感器每 30 秒采集一次所在路段的通过速度,最终的数据则是通行速度每 5 分钟的平均值。下图为随机挑选的 3 个传感器采集的三天通行速度曲线。图中纵坐标为通行速度,单位是 km/h。横坐标是时间,每个点代表 5 分钟。从图中很容易看出每个传感器所在路段的通行速度随一天时间变化都有比较明显的规律,但不同路段各自的规律又有明显的差别。 对某一个或多个变量,基于过去一段时间观察到的值来预测未来一段时间内可能可能发生的值,属于典型的时序数据预测问题。在本案例中,我们希望通过每个路段过去一段时间的通行速度,来预测未来一段时间的通行速度。
模型训练
此前传统统计模型(例如 ARIMA 模型及其各个变种模型)在时间序列预测问题取得了显著成果,但这类传统模型往往受限于数据平稳性假设,在处理多个变量时,变量间关系也无法体现在模型中。比如本例中,各个传感器所在路段在地理上的关联就在传统模型中被忽略掉了。 相关资料参见 Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting:https://arxiv.org/abs/1709.04875 本文采用了上方参考资料中介绍的图卷积(graph convolution)加 LSTM 的简化模型。模型首先需要根据传感器间的距离构建一张无向图,并使用图卷积作为模型的第一层,配合 LSTM 层可以使模型同时学习空间和时间的信息。我们提取了 PeMSD7 数据集中的 26 个传感器的数据,并按照训练(50%),验证(20%),和测试(30%)对其进行了分割,部分测试数据用来作为数据模拟模块的输入。 具体模型训练的细节参见 Traffic forecasting using graph neural networks and LSTM:https://keras.io/examples/timeseries/timeseries_traffic_forecasting/
模型转换
OpenVINO 自带的模型优化器能够将 PyTorch、TensorFlow 等多种框架训练得到的模型转换为 OpenVINO Runtime 需要的中间格式(IR)。具体转换方法在 OpenVINO 官方文档中有详细解释。 详细信息可见《使用模型优化器转换模型》:https://docs.openvino.ai/cn/2022.1/openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html展示效果
经过一段时间运行,可以观察到类似下图的效果。图中第一列是随机选取的几个传感器发送的实时数据和使用 gcrnn 模块推理得到的一小段时间之后的预测值。上面的 4 个折线图中,黄色曲线是 gcrnn 预测的通行速度,绿色曲线是实际的通行速度。可以看出,使用本例中的简单模型进行推理得到的预测结果与实际数据还是比较接近的。