【深度学习】【STWave】时空图预测,车流量预测,Efficient Spectral Graph Attention Network

Spatio-Temporal meets Wavelet: Disentangled Traffic Flow Forecasting via Efficient Spectral Graph Attention Network

代码:https://github.com/LMissher/STWave
论文:https://arxiv.org/abs/2112.02740

帮助:
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

模型结构:

在这里插入图片描述

一、数据

在这里插入图片描述

二、环境

conda create -n MAE python=3.9 -y
conda activate MAE
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia -ypip install -r requirements.txt

requirements.txt:

easy_torch==1.2.12
easydict==1.10
numpy==1.21.5
positional_encodings==6.0.1
scikit_learn==1.0.2
scipy==1.13.1
setproctitle==1.3.2
sympy==1.10.1
timm==0.6.11
torch==1.13.1
torch_summary==1.4.5
tvm==1.0.0

pip install fastdtw PyWavelets  -i https://pypi.tuna.tsinghua.edu.cn/simple

三、训练


mkdir -p ./cpt/PeMSD8
mkdir -p ./log/PeMSD8
python main.py --config config/PeMSD8.conf

在这里插入图片描述

在这里插入图片描述

四、论文

摘要

交通流量预测对于公共安全和资源优化至关重要,但面临三大挑战:1) 当前工作大多在一个模型中利用复杂的时序模式(如短期雷阵雨和长期日常趋势),无法在不同模式下准确捕捉时空依赖性;2) 图位置编码的探索不足限制了全图注意力网络中空间信息的提取;3) 全图注意力的二次复杂度引入了沉重的计算需求。为实现有效的交通流量预测,我们提出了一种高效的谱图注意力网络,该网络包含解耦的交通序列。

具体而言,利用离散小波变换从交通序列中获得低频和高频成分,这些成分能反映长短期模式的时序特征。精心设计的双通道时空编码器准确捕捉了不同尺度时序模式下的时空依赖性。此外,我们还提出了一种融合注意力来聚合双尺度时序模式的潜在表示,并实施多监督以预测未来低频成分序列,这与交通流量预测并行进行。在空间维度上,为了提升全GAT在交通流量预测中的性能,我们提出了一个高效谱图注意力网络,它是自注意力的一种变体,具有O(NlogN)的复杂度。新颖的基于小波的图位置编码和查询抽样策略被引入到我们的注意力机制中,用以指导信息传递并稀疏化自注意力查询中的节点。

本论文的核心技术贡献是精心设计了一个名为STWave的模型,它同时在时空维度上利用图和离散小波。在四个真实世界数据集上的实验结果显示,STWave在交通流量预测方面显著优于当前最优方法。

Introduction

根据观测到的交通状况和底层道路网络,交通流量预测旨在预测未来一段时间的交通流量,这对日常出行和交通管理都有很大的好处。尽管其重要性显而易见,交通预测却极具挑战性,因为它涉及复杂的时空依赖性。近年来,数据驱动算法在这一领域受到了广泛关注。其中,循环神经网络(RNN)、时间卷积网络(TCN)和基于Transformer的方法被广泛采用来单独捕捉每条道路的时间依赖性【Zhou等,2021;Xu等,2021;Sutskever等,2014;Lv等,2018;Elmi,2020】。尽管上述方法通过单变量模型进行交通流量预测,它们在单个模型中利用了纠缠的时间模式(例如,使用序列模型来提取车祸和流行病中流量增加和减少的相反影响),但未能准确提取不同模式下的时空信息。

最近,图卷积网络(GCNs)的采用解决了交通预测中捕捉空间相关性的问题。DCRNN【Li等,2018】和STGCN【Yu等,2018】使用GCN来建模相邻道路的相互作用。后续工作如Graph WaveNet、AGCRN、STFGNN和STGODE【Wu等,2019;Bai等,2020;Li和Zhu,2021;Fang等,2021】提出了多种GCN变体,通过扩展空间感受野来提高性能。然而,基于GCN的方法忽略了道路网络图中边的权重随时间不断变化的事实。ST-CGA【Zhang等,2020】和LSGCN【Huang等,2020】使用图注意力网络(GAT)及其变体来学习每个时间步相邻道路之间的权重。ST-GRAT【Park等,2020】和GMAN【Zheng等,2020】进一步利用完全GAT进行交通速度预测,取消了原始GAT中的输入图以减轻硬归纳偏差的影响并捕捉全局空间依赖性。尽管完全基于GAT的工作在其他交通预测任务中表现出了良好的性能,但它们大多存在两个局限性:1)忽略了完全注意力的学习效率,即著名的自注意力的时间和空间复杂度为O(N²),这引入了巨大的计算需求;2)原始GAT的中心问题在于输入图将空间感受野限制在邻居中,而完全GAT缺乏结构信息来有效指导信息传递。

为了解决上述限制,我们提出了一种新的高效光谱图注意力网络,用于具有解耦交通序列的交通流量预测。在时间维度上,为了单独建模复杂的时间模式,我们首先利用离散小波变换从交通序列中获得低频和高频成分,其中低频和高频成分可以反映长期和短期模式的时间特征。然后我们精心设计了一个双通道时空编码器来表示不同的双尺度时间模式。此外,我们提出了一种融合注意力来聚合双尺度时间模式的潜在表示,并执行多重监督以预测一系列未来的低频成分,这与交通流量预测并行。在空间维度上,为了提高完全GAT在交通流量预测中的性能,我们提出了一种高效的光谱图注意力网络,这是自注意力的一种变体,复杂度仅为O(NlogN)。我们在注意力机制中引入了新颖的小波基图位置编码和查询采样策略,以指导信息传递并稀疏自注意力查询中的节点。本文的关键技术贡献是一个精心设计的模型,名为STWave,该模型同时利用图和离散小波在时空维度上的特性。四个真实数据集上的实验结果表明,STWave在交通流量预测方面显著优于现有的最先进方法。

五、效果

PeMSD8 交通流预测数据集,介绍。这里还有中文论文介绍这个数据集:https://image.hanspub.org/Html/20-1542336_46800.htm。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

C++STL---vector模拟实现

通过上篇文章,我们知道vector的接口实际上和string是差不多的,但是他俩的内部结构却大不一样,vector内有三个成员变量:_start、_finish、_endofstorage: _start指向容器的头元素,_finish指向有效元素末尾的元素&#x…

Vue2 + Element UI 封装 Table 递归多层级列表头动态

1、在 components 中创建 HeaderTable 文件夹&#xff0c;在创建 ColumnItem.vue 和 index.vue。 如下&#xff1a; 2、index.vue 代码内容&#xff0c;如下&#xff1a; <template><div><el-table:data"dataTableData"style"width: 100%"…

OSM历史10年(2014-2024)全国数据下载(路网、建筑物、POI、水系、地表覆盖利用······)

点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 零、前沿 这次向大家介绍一下OSM&#xff08;OpenStreetMap&#xff09;十年历史数据&#xff08;2014—2014&#xff09;的下载方法。当然我们也下载好分享给大家&#xff…

JAVA web期末复习总结

C/S结构与B/S结构区别&#xff1a; 在C/S结构中&#xff0c;客户端通常是一个独立的应用程序&#xff0c;需要在用户的计算机上安装和运行。而在BS结构中&#xff0c;客户端是一个Web浏览器&#xff0c;用户只需要通过浏览器打开网页&#xff0c;不需要安装额外的应用程序。 C…

python正则表达式中的分组功能

在Python的re模块中&#xff0c;group()方法是用于从一个匹配的对象&#xff08;例如&#xff0c;re.match或re.search返回的对象&#xff09;中提取匹配的字符串。 当你使用正则表达式进行匹配时&#xff0c;匹配对象会包含原始字符串中与模式匹配的部分。group()方法可以用来…

Reactive 踩坑

vue 响应式踩坑 let questionInfo reactive([ , ]) api.getQuestions( id ).then(function (response){// 这里用法有问题questionInfo response.data.data.questions;concole.log(questionInfo) })响应式数据本身是个函数&#xff0c;&#xff08;不然咋帮你动态变化页面…

k8s_设置dns

配置k8s dns 在 Kubernetes 集群中&#xff0c;CoreDNS 是默认的 DNS 服务器&#xff0c;它负责处理集群内所有的 DNS 请求。 kubectl edit cm coredns -n kube-system (此命令修改coredns 配置) kubectl describe cm coredns -n kube-system&#xff08;此命令查看coredns 配…

程序员上岸指南

如果你还在996&#xff0c;大小周&#xff0c;感觉身体被掏空&#xff0c;那么你可以看看下面这篇文章&#xff0c;我特意搜集了一些苦逼程序员的上岸教程。 人生真的就是做几道选择题&#xff0c;选错了&#xff0c;忙也是瞎忙。选对了&#xff0c;躺着都能赢。总的来说&#…

良心推荐:什么软件能够监控公司电脑,就这5款软件能监控公司电脑

用软件监控员工电脑在大多数国家是非法的&#xff0c;不过在中国&#xff0c;企业在办公场所安装监控设备以监控员工工作&#xff0c;在遵循一定限制和条件的前提下&#xff0c;是合法的。以下是一些符合这些条件&#xff0c;并且广泛被企业采用的员工电脑监控软件的良心推荐&a…

Linux 命令操作技巧

Linux命令行界面提供了丰富的快捷键来提高操作效率&#xff0c;以下是一些常用的Linux终端快捷键&#xff0c;主要基于Bash shell&#xff1a; Tab - 自动补全&#xff1a;输入命令、文件名、目录名或命令选项的开头部分&#xff0c;然后按Tab键&#xff0c;系统会自动补全剩余…

C++:儿童节快乐呀!

六一快乐&#xff01;~ 今天我来宣布一个 ——————Cookie Maker工作室成立了&#xff01;—————— 目前参与人数&#xff1a;7 人名列单&#xff1a; 真实姓名 联系方式以及用户名 ZINCFFO CSDN&#xff08;ZINCFFO&#xff09; &…

使用 Scapy 库编写 IP 地址欺骗攻击脚本

一、介绍 1.1 概述 IP地址欺骗&#xff08;IP Spoofing&#xff09;是一种网络攻击技术&#xff0c;攻击者伪造其数据包的源IP地址&#xff0c;使其看起来像是从其他合法地址发送的。这种技术常用于各种攻击中&#xff0c;例如DDoS攻击、Man-in-the-Middle&#xff08;MITM&a…

buidldroot musl uclib库 编译

buildroot 修改 编译工具链 原本编译器相关信息&#xff1a; Incorrect selection of the C library buidroot编译 注意相关选项&#xff0c;后续使用CUSTOM TOOLCHAIN 时对应 UCLIB 能将生成IMAGE 从2.9K变为2.3K MUSL 能将生成IMAGE 从2.9K变为2.7K 变大了 arm-linux-…

阻塞、非阻塞、同步、异步

通信中有常见的4种机制&#xff1a;阻塞和非阻塞&#xff0c;同步和异步。 通过一个工作中领导给下级安排工作的例子来理解和区分这 4 个概念。例子中的领导相当于用户线程&#xff0c;下级相当于要访问的数据&#xff0c;领导给下级安排工作相当于代码中调用 read(), write()…

c++的string一键介绍

前言&#xff1a; 这篇文章旨在帮助读者回忆如何使用string&#xff0c;并提醒注意事项。它不是一篇详细的功能介绍&#xff0c;而是一篇润色文章。 先展示重载函数&#xff0c;如果该函数一笔不可带过&#xff0c;就先展示英文原档&#xff08;附带翻译&#xff09;&#xf…

教你搞一个比较简单的计时和进度条装饰器

教你搞一个比较简单的计时和进度条装饰器 什么是装饰器为啥要用装饰器呢&#xff1f;上代码&#xff01;如何使用装饰器效果 什么是装饰器 装饰器的英文是&#xff1a;Decorator。装修的英文是&#xff1a;Decoration。顾名思义就是我们要用装饰器在函数func()上搞点儿事儿&am…

CSS动画效果(鼠标滑过按钮动画)

1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa5SXiaicFfsrcric7TJmGO6YddqC4wFPdM7PGzPHuFgvtDS7MIvnLHB4WFaKia0Qh8VCyUaoyHMc2Zltg/640?wx_fmtgif&fromappmsg&tpwebp&wxfrom5&wx_lazy1&wx_co1 网页设计中的按钮不仅是用户交互的桥梁&#…

Vue + Nodejs + socket.io 实现聊天

Vue 代码 // 安装 socket.io-clientnpm i socket.io-clientimport io from socket.io-client;mounted () {// * location.origin 表示你的 socket 服务地址// * /XXXX/socket.io 表示 你的 socket 在服务器配置的 访问地址let socket io(location.origin, {path: "/XX…

抓包工具实战

Npcap下载&#xff1a; https://npcap.com/#download 安装抓包数据&#xff1a; WinPcap Download python抓包&#xff1a; from scapy.all import * if __name__ __main__:filterstr "tcp || udp"pr sniff(filterfilterstr, count4)

原生APP开发和Flutter开发的比较

原生APP开发和Flutter开发各有优缺点&#xff0c;适用于不同的场景和需求。下面是两者的详细比较&#xff0c;从开发语言、性能、开发效率、维护和更新、社区和支持等多个方面进行分析。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…