作者:冯伟

本案例适用于x86以上英特尔平台

 简介

经过5年的发展,Intel OpenVINO已经在人工智能视觉分析领域获得了广泛的应用。近年来,基于深度学习和神经网络的人工智能在视觉,音频,自然语言等多个领域取得了广泛成功。在时间序列信号分析方面,深度学习也体现出优于传统分析方法特性。

本文希望通过模拟高速公路网的通行速度实时预测的案例,介绍如何基于OpenVINO和英特尔开发套件搭建时间序列信号收集,存储和分析的解决方案。

 英特尔开发套件

英特尔开发套件

 英特尔开发套件是一款IA架构的人工智能嵌入式开发板,体积小巧功能强大,可以在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。它是一款面向专业创客、开发者的功能强大的小型计算机,借助OpenVINO工具套件,CPU、iGPU都具备强劲的AI推理能力。

本文介绍的方案将全部运行在英特尔开发套件上。

数据集

本文使用的数据集来自加州交通部的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官方Docker镜像构建数据收集模块。使用EMQX作为MQTT broker,接受模拟传感器发布的速度数据。通过规则引擎配置,使EMQX将接收到的速度数据转发给TDengine进行存储。

数据存储

本例中我们采用了时序数据库[TDengine](taosdata.com)的官方Docker镜像进行数据存储。TDengine是一款开源、云原生的时序数据库,专为物联网、工业互联网、金融、IT运维监控等场景设计并优化。

只需经过简单配置,即可通过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] <https://arxiv.org/abs/1709.04875> "Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting"

[2] <https://keras.io/examples/timeseries/timeseries_traffic_forecasting/> “Traffic forecasting using graph neural networks and LSTM”

[3] <https://docs.openvino.ai/cn/2022.1/openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html> "使用模型优化器转换模型"

[4] <https://grafana.com/docs/grafana/latest/administration/provisioning> "Provision Grafana"

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐