论文名称:A Transformer Encoder Approach for Localization Reconstruction During GPS Outages from an IMU and GPS-Based Sensor
开源项目地址:
期刊:Sensors
时间:2025
论文提出了一种基于 Transformer 编码器(Transformer Encoder)的“后处理”方法,用于在 GPS 信号弱或丢失的情况下,通过 IMU 和 GPS 数据进行定位重建
数据集
Alogo Move Pro 马匹运动数据集(作者自建),未开源,作者表示“原始数据将在请求后提供”,未提供公开链接或 GitHub/Gitee 地址
多传感器融合:IMU + GPS(GNSS),作者团队自行采集,使用 Alogo Move Pro 设备
采集场景为室外马术训练、比赛、越野等,共 53 个会话,约 29 小时
IMU:100Hz,GPS:5Hz,融合输出:100Hz
数据包含加速度、角速度、磁场、GPS 位置/速度、融合位置/速度/姿态等
主要工作
在 GPS 信号丢失(outage)的情况下,如何利用 IMU 数据进行事后(post-processing)定位补全,任务类型为轨迹重建 / 路径补全
使用 Transformer 模型预测 GPS 丢失期间的 速度(velocity),而非直接预测位置(position)
通过 双向积分(bidirectional integration)将速度转换为位置
使用 插值(interpolation)确保轨迹在 GPS 恢复处的平滑过渡
时间跨度:
- 短期预测:
GPS中断 10-20 秒(small outage) - 中期预测:
GPS中断 30 秒-2 分钟(medium outage)
非实时预测,而是 后处理(post-processing),允许使用未来数据
深度学习模型
输入为 IMU+GPS+融合数据的序列窗口(100Hz),输出为三轴速度(v_{x}, v_{y}, v_{z})
Transformer Encoder-only(BERT 风格),只用左侧Encoder堆栈- 使用双向
Transformer编码器,允许利用未来信息(非因果),非自回归 - 任务是重建被 mask 片段(类似 BERT、
MLM),输出与输入 等长 的三维速度序列
提供 10Hz 版本,输入序列长度缩短 10 倍,性能接近
原始传感器窗口 → 线性投影 → +PosEnc → N×EncoderLayer → 前馈头 → 3D 速度
输入张量 X
”session“为一次骑手-马匹从进入训练场到结束训练或比赛的完整连续记录,对应一个 .csv 文件,长度从 27 s 到 50 min 不等。这篇论文共有 53 个 session,总共 29h4min
- 每个 session 内部
100Hz连续采样,因此一条session就是一条 超长时间序列 - 输入张量来自于 1 次
session中截出的窗口
长度 Lseq(短时 2400 步 = 24 s;中时 12400 步 = 124 s),每步 26 维特征
Shape:(Lesq, 26)
- 其中 26 = 9(IMU) + 7(GPS) + 10(Fusion)
缺失 GPS/Fusion 时,人为把一段 GPS 信号设为”丢失“,位置用 -1 mask
线性投影 F_{proj}
为把 26 维升到模型维度 d_{model},d_{model}=32
W_{emb}: (26, d_{model}) ;b_{emb}: (d_{model}, )
- 随机初始化(赋一个随机的初始值)+端到端反向传播学习(训练时把”预测误差“通过链式法则一路回传,自动计算处每个参数该怎么改,让网络自己学会“如何把 26 维特征映射到 d_{model})
- 没有任何预训练权重,完全是训练时一起学出来的参数
- 使用标准 Xavier/Glorot 初始化(Transformer 默认如此)
- 训练时与所有注意力权重、
FFN权重一起,由Adam优化器更新
Z_{0} = X · W_{emb} + b_{emb}
线性投影后,得到每个时间步的初始“词向量”Z_{0}: (Lseq, d_{model}),其携带传感器各通道的“强度/模式” ,但没有时间顺序
可学习位置编码 PE
Transformer的自注意力本身是排列等变(permutation-equivariant)的: 把输入序列打乱顺序,输出也会跟着同样顺序打乱,因此不会自动知道“第 1 个时间步”和“第 10 个时间步”谁在前谁在后
为了让模型能够区分“这是 0.5 秒前的 IMU 值”还是“这是 5 秒前的 IMU 值”,必须把位置信息显式地注入进去
用于给 Transformer 提供顺序信息,所以加入 b_{pe},让注意力知道“我当前在和哪个时刻的数据做关联”
Z_{1} = Z_{0} + b_{pe}
- b_{pe}: (Lseq, d_{model}) 可学习
如果直接拿 Z_{0} 用,可以跑,但实验中通常会看到:
- 轨迹漂移变大(因为模型无法区分时间顺序,积分时误差累计更快)
- 训练收敛变慢
- 最终 ATE/RTE 指标变差
因此位置编码是时间序列任务里的“刚需” ,除非用别的方案(相对位置 RPE、卷积前置、Sinusoidal PE 等),否则不能省
输出 Z_{1}: (Lseq, d_{model})
- Lseq为时间步数(经典值为2400/12000)
- d_{model}为模型隐藏维度,32为论文中最优值
堆叠 N_encoder 个 Encoder Layer
N_{encoder}为层数,每个Layer顺序做:
多头自注意力(MHA)
- 输入:
Z_in:(Lseq, d_model) - 输出:
Z_attn:(Lseq, d_model)
Q = Z_in · W_Q # (Lseq, d_model//h)
K = Z_in · W_K
V = Z_in · W_V
head_i = softmax(Q·K^T / √d_k) · V
Z_attn = Concat(head_1…head_h) · W_O # (Lseq, d_model)
其中,W_Q、W_K、W_V 和 W_O 一样,都是 随机 Xavier 初始化 + 端到端反向传播学出来的可训练参数,没有任何预训练或人工设定
这里得到的 Z_{attn} 让当前时间步能“看到”整条序列里 哪些其他时刻对它最有用 的信息
- 加残差 &
LayerNorm:
得到真正传给下一层的特征Z_attn = LayerNorm(Z_in + Z_attn)
这里把原始信息 Z_{in} 直接加回来,防止梯度消失
由多头注意力刚算出的加权特征 Z_ff, 得到残差归一化后的稳定特征 Z_attn
前馈网络(FFN)
- 输入
Z_attn:(Lseq, d_model) - 输出
Z_ff:(Lseq, d_model)
Z_ff = ReLU(Z_attn · W1 + b1) · W2 + b2
这是在每个时间步独立做两次线性变换 + 非线性
W1:(d_model, d_hidden),d_{model}为FFN中间维度W2:(d_hidden, d_model)
(1)先进行线性升维,ReLU(Z_{attn} · W1 + b1),维度(Lseq, d_{model}) → (Lseq, d_{hidden}),扩展特征空间,增加非线性表达能力
(2)再进行线性降维,· W2 + b2,维度 (Lseq, d_{hidden}) → (Lseq, d_{model}),把维度压回原大小,保持残差可加
加残差 & LayerNorm:
Z_out = LayerNorm(Z_attn + Z_ff)
Z_out 是一个Encoder层的输入,再把它送进下一层、再下一层……共重复 N_encoder 次,最后那一层的输出才改名叫 Z_enc
- Z_{out}(layer=0) → Z_{out}(layer=1) → … → Z_{out}(layer=N_{encoder-1})
把 最后一层 的 Z_{out} 重新标记为 Z_{enc},维度仍是 (Lseq, d_{model})
经过 N_{encoder} 层后得到 Z_{enc}:(Lseq, d_{model})
最终前馈头(Velocity Head)
为把 d_{model} 映射到3维速度 (v_{x}, v_{y}, v_{z})
v_{pred} = ReLU(Z_{enc} · W'_1 + b'_1) · W'_2 + b'_2
- W'1:(d{model}, d_{hidden})
- W'2:(d{hidden}, 3)
线性 → 非线性 → 线性,但目的与 Transformer 内部的 FFN 完全不同
- 非线性的目的是让网络能学习复杂的、非线性的“上下文到速度”的映射关系
- 这只是一个任务特定的输出头(类似分类器),用两层
MLP把 32 维特征“解码”成 3 维速度;ReLU提供非线性能力,使模型可以近似任意连续函数
输出 v_{pred}: (Lseq, 3),即窗口内每10ms 的三轴速度预测值(单位 m/s,已反归一)
补充:Xavier/Glorot 初始化
使用于任何线性层/全连接层/卷积层的 权重矩阵 W
论文中的 W_{emb} 就是 (26, d_{model}) 的权重矩阵
计算公式
设权重矩阵 W ∈ R^{(fan_{in}, fan_{out})}
Xavier 均匀分布版本:
- limit = sqrt(6 / (fan_{in} + fan_{out}))
- W ~ Uniform(-limit, limit)
Xavier 正态分布版本
- std = sqrt(2 / (fan_{in} + fan_{out}))
- W ~ Normal(0, std)
本文实际数字
- fan_{in} = 26 输入维度特征
- fan_{out} = d_{model} 论文中提到的最优值
代入均匀版:
- limit = sqrt(6 / (26 + 32)) ≈ 0.321
- W_{emb[i,j]} 初始化为 -0.321 到 0.321 之间的均匀随机数
代码
import torch.nn as nn
linear = nn.Linear(26, 32)
# 内部已默认用 Xavier uniform
nn.init.xavier_uniform_(linear.weight)
偏置 b_{emb}
通常直接初始化为 0(Transformer 也是如此)
代码:nn.init.zeros_(linear.bias)
“随机初始化”指先用 Xavier 规则给 W_emb 填 -0.321~0.321 的随机数、b_emb 填 0;随后在整个训练过程中,通过反向传播自动微调这些值,让网络自己学会最佳映射。
补充:位置编码别的方案
Transformer的自注意力是排列等变的,把输入序列任意打乱,输出也跟着同样顺序打乱
- 如果不注入位置信息,模型完全不知道“第1步”和”第100步“谁在前谁在后,积分后误差会迅速累积
因此必须给模型某种“时间身份证” ,下面给出 4 种常见方案及其原理
| 方案 | 是否需参数 | 原理一句话 | 优点 | 缺点 |
|---|---|---|---|---|
| 不做位置编码 | ✅ 无 | 全靠注意力自己猜顺序 | 0 参数量 | 轨迹漂移爆炸,不可接受 |
| Sinusoidal PE | ❌ 固定 | 用不同频率正弦/余弦函数给每个位置一个唯一、可外推的向量 | 无需训练,可推广到更长序列 | 与内容无关,表达能力有限 |
| 可学习绝对 PE (本文用的 b_{pe}) | ✅ 训练 | 把位置当“词向量”直接学 | 与任务耦合,通常更准 | 只能处理训练见过的最大长度 |
| 相对位置编码 (RPE) | ✅ 训练 | 注意力计算时把“相对距离”直接加到注意力权重上,而非加到输入向量 | 对平移/裁剪更鲁棒,天然支持变长 | 实现稍复杂,参数稍多 |
| 卷积前置 | ✅ 训练 | 先用 1-D 卷积/因果卷积把局部时序模式编码进特征,再交给 Transformer | 卷积本身带局部顺序,可减弱或取代显式 PE | 卷积核大小决定感受野,长程依赖仍需 Transformer 补 |
补充:ATE/RTE/RDE评估指标
ATE(Absolute Trajectory Error)
把预测轨迹与真值轨迹逐点对齐后,计算所有时刻 欧氏距离的平均值
- 公式: ATE = (1/N) Σ_{n} ‖P(n) – P̂(n)‖_{2},单位:米(m)
特点:对漂移、累积误差非常敏感
RTE(Relative Trajectory Error)
只看起点-终点的相对位移误差,不关心中间路径
- 公式:RTE = | ‖P(N) – P(0)‖ – ‖P̂(N) – P̂(0)‖ | / ‖P(N) – P(0)‖
结果是无量纲比例(0=完美,>1 表示终点飘得很远)
特点:对长距离漂移最敏感
RDE(Relative Distance Error)
比较整条轨迹的总路程差异
- 公式:RDE = 1 – ( Σ_{n} ‖P̂(n) – P̂(n-1)‖ ) / ( Σ_{n} ‖P(n) – P(n-1)‖ )
无量纲,0 表示总路程预测完全正确
特点:对“绕远路”或“抄近路”最敏感
模型性能对比
| 对比维度 | 本文方法 | 同领域方法(如LSTM、CNN、TCN等) |
|---|---|---|
| 是否使用未来信息 | ✅ 是(双向) | ❌ 否(多数为实时、因果) |
| 是否直接预测位置 | ❌ 否(预测速度后积分) | ✅ 多数直接预测位置 |
| 数据类型 | 马匹(高速、高加速度) | 行人(低速、低加速度) |
ATE误差 | 3m(短期),12m(中期) | 4–9m(行人短期) |
RTE误差 | 0.2–0.7 | 0.9–6(行人) |
RDE误差 | 0.3(稳定) | 无统一报告 |
提出了一种基于Transformer Encoder的非实时轨迹重建方法,使用自建的马术IMU+GPS数据集,在GPS中断10–120秒的场景下,通过预测速度并积分实现高精度轨迹补全,优于现有基于LSTM/CNN的实时因果方法