一篇关于预测“未来”的教程:运行在 Intel AIxBoard™ 开发板上的 TDengine

news2024/11/16 19:34:54

英特尔数字化开发套件 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 预测的通行速度,绿色曲线是实际的通行速度。可以看出,使用本例中的简单模型进行推理得到的预测结果与实际数据还是比较接近的。

总结

本文通过模拟高速公路网通行速度采集与实时预测的案例,介绍了构建时间序列信号收集、存储和分析的基本流程以及所需工具,展示了运行在 Intel AIxBoard™ 上的 TDengine 便捷高效的数据收集、存储、查询和展示能力,以及 OpenVINO 基于深度学习进行时间序列信号分析的能力。阅读完本篇文章,你对时序数据处理和预测一定也有了更深的体会,如果你想要进行深度技术交流,可以添加小T vx:tdengine,申请加入 TDengine 技术交流群。

作者介绍: 冯伟,英特尔软件架构师,16 年软件研发经验,涵盖浏览器、计算机视觉、虚拟机等多个领域。2015 年加入英特尔,近年来专注于边缘计算、深度学习模型落地,以及时序数据分析等方向。

TDengine 简介

TDengine™ 是一款开源的云原生时序数据库,专为物联网(IoT)、连接汽车和工业物联网进行的设计和优化。它能够高效地进行海量数据实时写入、处理,监控一天内由数十亿个传感器和数据收集器产生的 PB 级别数据。许多用户将由物联网设备、汽车或 IT 基础设施生成的海量数据实时存储到 TDengine 中,并使用标准的 SQL 命令用 TDengine 进行数据查询——TDengine 支持过滤、分组、窗口、连接和许多聚合函数以帮助用户更好地查询数据。此外,TDengine 还能够在多种主流的硬件平台上运行,并提供和其他第三方软件工具集成的能力,以及便捷的数据接入、数据分析和数据展示等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/814732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客网Verilog刷题——VL48

牛客网Verilog刷题——VL48 题目答案 题目 在data_en为高期间,data_in将保持不变,data_en为高至少保持3个B时钟周期。表明,当data_en为高时,可将数据进行同步。本题中data_in端数据变化频率很低,相邻两个数据间的变化&…

字符串性能优化

String 对象作为 Java 语言中重要的数据类型,是内存中占据空间最大的一个对象。高效地 使用字符串,可以提升系统的整体性能。 来一到题来引出这个话题 通过三种不同的方式创建了三个对象,再依次两两匹配,每组被匹配的两个对象是否…

Eclipse使用Ctrl键导致程序卡死的解决方案

在Eclipse中,经常可以使用Ctrl鼠标单击,可以直接将编辑界面引导到相关的方法,属性,或者类。 这个功能确实非常好用,但是由于复制粘贴的功能快捷键也是Ctrl,以致我在快速进行操作的时候,Eclipse…

tinkerCAD案例:27. Build a Mobile Amplifier 构建移动放大器(2)

tinkerCAD案例:27. Build a Mobile Amplifier 构建移动放大器(2) 原文 step 1 Lesson Overview: 课程概述: Now we’re going to adapt the shape to your device! 现在,我们将根据您的设备调整形状! step 2 o create an in…

【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

浏览器安装selenium IDE插件并进行网页测试记录

Chrome开发者工具插件,谷歌浏览器开发者工具插件推荐下载_安装_教程-扩展迷 去官网直接搜索下载需要的插件就可。 插件下载安装-Chrome-扩展迷 下载好后解压: 打开Chrome谷歌浏览器: 设置>拓展程序>打开"开发者模式”>将下载好的seleni…

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力(CVPR2021)

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文:Aligning Bag of Regions for Open-Vocabulary Object Detection 代码:https://github.com/wusize/ovdet…

SciencePub学术 | 人工智能类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 人工智能类重点SCIE&EI征稿中!信息如下,录满为止: 一、期刊概况: 人工智能类重点SCIE&EI 【期刊简介】IF:6.5-7.0,JCR1区,中科院2区; 【出版社…

画架构图工具-haydn

Haydn解决方案数字化平台_海顿解决方案工具链-华为云 下图为haydn架构图示例 Haydn解决方案数字化平台_海顿解决方案工具链-华为云 1、vpc是一个很重要的元素,有网络隔离的作用。 2、OBS、CES、CTS,不需要画到vpc里面。 3、不在区域内的资源&#xf…

Panda 编译时原子化 CSS-in-JS 框架的跨平台方案

Panda 编译时原子化 CSS-in-JS 框架的跨平台方案 Panda 编译时原子化 CSS-in-JS 框架的跨平台方案 对编译时原子化CSS框架的思考编译时 CSS-in-JS 方案对比 LinariaPandacss总结 weapp-pandacss 介绍快速开始 pandacss 安装和配置 0. 安装和初始化 pandacss1. 配置 postcss2. …

Hbase pe 压测 OOM问题解决

说明:本人使用CDH虚拟机搭建了Hbase集群,但是在压测的时发现线程多个的时候直接回OOM,记录一下 执行命令 hbase pe --nomapred --oneContrue --tablerw_test_1 --rows1000 --valueSize100 --compressSNAPPY --presplit10 --autoFlushtrue randomWrite …

SDXL 1.0 介绍和优缺点总结

2023年7月26日:Stability. AI 发布SDXL 1.0,这是对其生成模型的又一次重大更新,带来了突破性的变化。 SDXL 1.0包括两种不同的模型: sdxml -base-1.0:生成1024 x 1024图像的基本文本到图像模型。基本模型使用OpenCLIP-ViT/G和CLIP-ViT/L进行文本编码。…

详解c++继承与多继承

目录 🚄什么是继承🚉继承的概念🚃继承的定义 🚇继承基类成员访问方式的变化🚆基类和派生类对象赋值转换🚐继承时的作用域🚗派生类的默认成员函数🚓继承、友元、静态成员&#x1f69a…

运维级影像归档与通信系统(PACS)源码

运维级医院PACS系统源码,带演示,带使用手册和操作说明书 ,带三维重建与还原功能,开发环境:VC MSSQL。 一、影像归档与通信系统(PACS)概述 PACS影像归档与通信系统”( Picture Archiving and C…

小型双轮差速底盘灭火功能的实现

1. 功能说明 灭火机器人是一种特殊的机器人,专门用于进行火灾扑救和灭火任务。它们通常具备以下功能和特点: ① 火灾侦测:灭火机器人配备了各种传感器和探测设备,可以检测烟雾、温度升高等火灾迹象。 ② 火灾扑救:灭火…

cadence virtuoso layout MOS串联线在layout中合并(merge)掉

如图,net10合并掉 解决办法: shiftE,取消勾选Abut server,save

第六章应用层

1.应用层概述 应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。 早期基于文本的应用(电子邮件、远程登录、文件传输、新闻组) 20世纪90年代将因特网带入千家万户的万维网www 当今流行的即时通信…

彻底解决IDEA输出中文乱码问题

本文一共有3种方法,针对的情况是输出中文乱码问题 问题描述 无法正确输出中文字符:(请正确分辨自己是哪一种乱码问题!) 解决方法 1、最容易想到 File -> Settings -> File Encodings下设置编码格式为UTF-8…

安卓:JzvdStd——网络视频播放器

目录 一、JzvdStd介绍 JzvdStd的特点和功能: JzvdStd常用方法: 二、JzvdStd使用 1、补充知识: 例子: MainActivity : VideoPageAdapter : activity_main: video_page: …

如何在C#中处理空值

在任何编程语言中开发应用程序时,经常会遇到空异常或空引用异常。空指针或空引用是指不引用有效的内存位置或对象的指针。这是一个困扰程序员已经很久的问题,自从程序员开始编写程序以来。空值是一个特殊的值,表示没有有效值可用。当将空值赋…