论文名称:FormerReckoning Physics Inspired Transformer for Accurate Inertial Navigation
会议:MOBICOM(移动计算与网络国际年会,CCF-A)
时间:2024
这篇文章解决的是仅使用IMU进行自主定位(Dead Reckoning)的问题,特别是在没有外部传感器(如GNSS、LiDAR、视觉)辅助的情况下,如何提升定位精度并减少误差累积
数据集
KITTI Odometry Dataset,www.cvlibs.net/datasets/ki…
使用开源数据集,不是作者团队采集的
包含IMU、GPS、LiDAR、图像等多种传感器,但本文仅使用IMU数据进行实验(即IMU-only导航),不含GNSS或其他传感器辅助
主要工作
传统IMU导航(Dead Reckoning)在只使用低成本IMU(<$1000)时,误差会迅速累积,导致定位漂移。现有的AI方法虽然能提升精度,但往往是黑箱模型,输出不稳定、不可靠
提出FormerReckoning框架,将物理知识(如卡尔曼滤波结果、运动约束)嵌入到Transformer结构中,提升IMU-only导航的精度与稳定性
输入为IMU的加速度、角速度序列(滑动窗口),输出为速度(v)和位置(p)的估计值
通过物理提示(如横向/纵向速度为零的先验)约束神经网络输出,避免不合理轨迹
基于IMU的加速度和角速度,预测未来几秒内的速度和位置变化,在公开数据集上实现了0.72%的相对平移误差,显著优于传统滤波和现有AI方法
深度学习模型
整体使用Transformer(Encoder+Decoder)架构
输入嵌入为1D-CNN(空间特征)+LSTM(时间特征)
物理提示输入为卡尔曼滤波后的加速度、角速度+横向/纵向速度协方差
解码器使用 3 × 3 group convolution 提取局部上下文
输出头使用两个 MLP 分支,分别输出速度和位置
损失函数使用多任务高斯负对数似然损失(含不确定性建模)
输入嵌入(Input Embedding)
IMU采样频率为100Hz
滑动窗口长度m+2=11(即 0.1s×11=1.1s 的片段)
原始IMU通道数6(3轴加速度+3轴角速度)
原始输入张量 原始IMU片段 X^{0} ∈ ℝ^{B×11×6}
Spatial Embedding(空间嵌入)
1-D CNN(kernel=3,stride=1,padding=1)
R^{B×11×6} → Conv1D → R^{B×11×d_{s}};论文中 d_{s} = 64,同时注意卷积核是同时扫过6个通道的
把每个时间步上的6维IMU向量映射为更高维的空间特征,捕捉轴间耦合(例如 x 轴加速度与 y 轴角速度的物理关系)
Temporal Embedding(时间嵌入)
- 1层
LSTM(hidden_{size} = d_{t})在时间轴上跑LSTM,把11个时间步的依赖关系编码成时间特征,当成序列喂给LSTM,而不是把64维特征当序列 LSTM会依次处理 t = 0,1,2,…,10 共11个向量,每一步都输出一个隐藏状态 h_{t}(解决IMU噪声、漂移在时间上的累积效应)
把上一步得到的 R^{B×11×d_{s}} 按时间步喂给 LSTM,取最后一个时间步的隐藏状态,得到 R^{B×d_{t}} (论文中 d_{t} = 64)
LSTM处理完t=10后,会得到一个最终隐藏状态 h_{10},形状是 R^{B×64}
然后把 h_{10} repeat 11次 拼回时间维,变成 R^{B×11×d_{t}} ,每个时间步都拿到同样的“全局时间上下文”向量,以便与空间特征对齐
Prompt Embedding(物理提示嵌入)
物理提示有两类,分别被嵌入成向量后与上述嵌入拼接
-
卡尔曼滤波结果嵌入
(1)原始
IMU数据(a^{l}、ω^{l})(2)经过卡尔曼滤波,得到去噪/去偏后的加速度 a^{k}、角速度 ω^{k}(维度 R^{B×11×6})
(3)经
1-D CNN处理Z_{1} = Conv1D (kernel=3, out_{ch}=64)(a^{k}, ω^{k}),得到滤波后IMU数据的 64 维“物理提示”特征 R^{B×11×d_{p1}} -
速度协方差矩阵
(1)由滤波后的速度估计 v̂ 计算横向、纵向速度的协方差矩阵N
(2)仅取对角元素 σ^{2} - 横向, σ^{2} - 纵向 → 拼成 2 维向量,输入形状为 R^{B×11×2}
(3)经过1-D卷积层,公式为 Z_{2} = Conv1D (kernel=3, out_{ch}=64)(σ²_↔, σ²_↕)
(4)最终输出为速度不确定性(物理先验)的64维特征,R^(B×11×64)
最后将两条流水线得到的 Z_{1} 与 Z_{2}在特征维上拼接
[Z_{1}][Z_{2}] → R^{B×11×128}
再与 Spatial/Temporal Embedding 的 128 维特征一起送入 Transformer
Temporal Encoder(Transformer 编码器)
- 输入数据时间窗 T=11
- 隐藏维度 d_{model}=256(Prompt+Spatial+Temporal 拼接后的通道数)
- 多头注意力数 h=8(每头32维)
- Feed-Forward中间维度 d_{ff}=1024
- Batch_{size} = B
沿用标准Transformer Encoder:[Multi-Head Self-Attention] → [Add & Norm] → [Feed-Forward] → [Add & Norm] ,重复 N=2 层
多头自注意力(MHSA)
输入 R^{B×11×256}
- 线性映射生成Q、K、V,得到 Q=K=V=Linear(256 → 256)(X) (三个独立权重矩阵)
形状保持 R^{B×11×256}
-
切头:reshape到 (B×11×8×32) → 转置 → (B×8×11×32)
-
Scaled Dot-Product Attention
Attention(Q,K,V) = softmax(QKᵀ/√32) V
-
拼接+投影
concat → (B×11×256) → Linear(256→256) → R^{B×11×256}
Add & LayerNorm
残差连接+归一化
Y = LayerNorm (X + Attention(X)) 形状不变 R^{B×11×256}
Position-wise Feed-Forward
两层全连接
FFN(Y)=Linear(256→1024)(GELU(Linear(256→1024)(Y))) → 再 Linear(1024→256)
- 先把每个位置256维向量升维到1024(扩大表示能力,引入非线性)
- 经过 GELU 激活
- 再降维回256,保持与输入同纬度,便于残差相加
虽然处理前后的维度仍是 R^{B×11×256},但中间经历了 256→1024→256 的变换,目的类似于传统 CNN 里的 1×1 卷积瓶颈
- 先用高维空间提取更丰富的非线性特征
- 再压缩回原维,不破坏残差路径
第二层Encoder(重复一次)
把上述的3个步骤再跑一边,最终得到已融合时空上下文和物理先验的高阶特征
Z_{enc} = R^{B×11×256}
Spatial Decoder
时间窗长度T=11,特征维度 d_{model}=256,Batch=B
Spatial Decoder只做局部空间关联,没有跨时间步的自注意力
核心只有两步:
- 3 × 3 Group Convolution(局部空间卷积)
- Add &
LayerNorm(残差+归一化)
论文重复 N=2 次,与 Encoder 层数一致
3 × 3 Group Convolution
输入 R^{B×11×256},把256通道按group=8分组 → 每组32通道
3×3卷积核只在”时间×通道“平面滑动(即kernel=(3,3),stride=1,padding=1)
卷积后通道数不变
输出 R^{B×11×256}
Add & LayerNorm
残差连接 Y = LayerNorm(Z_{enc} + Conv(Z_{enc}))
维度保持 R^{B×11×256}
第二层Decoder(重复一次)
把上述2个步骤再跑一边,得到融合 局部时空上下文 + 物理先验 的最终特征
Z_{dec} = R^{B×11×256}
随后该张量后被送入 两条独立的MLP头(速度头 & 位置头)做最终回归
回归头(两条并行的MLP)
Z_{dec} 一次性同步分别送进 “速度头 MLP” 和 “位置头 MLP”两个分支,两条分支完全并行,结构相同,参数不共享
对每条MLP,把 Z_{dec} 的11个时间步视作11个独立样本,每个时间步的256维向量独立地跑 Linear(256→128) → GELU → Dropout → Linear(128→3)
输出结果:
- 速度头:11个 3 维速度 → 拼成 R^{B×11×3}
- 位置头:11 个 3 维位置 → 拼成 R^{B×11×3}
最后得到两个并行、同纬度、含义不同的张量
训练阶段额外输出
为了估计不确定性,每个头最后一层再并行输出一个 3 维 log-σ²(对数方差),因此最终输出
- 速度头:R^{B×T×6} (3 维均值 + 3 维 log-σ²)
- 位置头:R^{B×T×6}(同速度头)
推理阶段
去掉 log-σ²,只保留均值向量:
- 速度:R^{B×T×3}
- 位置:R^{B×T×3}
多任务损失
进入损失阶段之前的张量为:
- 速度头输出 得到预测速度均值 v̂,维度为 R^{B×T×3}
- 位置头输出 得到预测位置均值 p̂,维度为 R^{B×T×3}
- 速度头并行输出 得到预测速度的对数方差 logσ²_v,维度为 R^{B×T×3}
- 位置头并行输出 得到预测位置的对数方差 logσ²_p,维度为 R^{B×T×3}
构造高斯负对数似然(NLL)
论文中把两个回归任务视为异方差高斯分布,每个任务的似然函数为
p(y | f_{θ(x)}) = 𝒩(f_{θ(x)}, σ²)
于是多任务损失:
L = 1/(2σ²_{v}) · L_{v} + 1/(2σ²_{p}) · L_{p} + log σ_{v} + log σ_{p}
计算流程
v_{gt} ∈ R^{B×T×3} 为真值速度,p_{gt} ∈ R^{B×T×3} 为真值位置,
\hat{v}∈ R^{B×T×3} 为网络预测速度,\hat{p} ∈ R^{B×T×3} 为网络预测位置,
σ_{v}^{2} ∈ R^{B×T×3} 为网络预测的速度方差(σ_{v}^{2} = exp(logσ_{v}^{2})),
σ_{p}^{2} ∈ R^{B×T×3} 为网络预测的位置方差(σ_{p}^{2} = exp(logσ_{p}^{2})),
最后总损失L为
L=\frac{1}{2N}\sum_{b=1}^{B}\sum_{t=1}^{T}\sum_{k=1}^{3}\left[\frac{\left(v_{\mathrm{gt}}^{(b,t,k)}-\hat{v}^{(b,t,k)}\right)^{2}}{2\sigma_{v}^{(b,t,k)2}}+\log\sigma_{v}^{(b,t,k)}+\frac{\left(p_{\mathrm{gt}}^{(b,t,k)}-\hat{p}^{(b,t,k)}\right)^{2}}{2\sigma_{p}^{(b,t,k)2}}+\log\sigma_{p}^{(b,t,k)}\right]
其中 N = B·T·3
性能对比
| 对比方法 | 简介 | 是否使用AI | 结果对比(平均相对平移误差) |
|---|---|---|---|
KF | 传统卡尔曼滤波 | 否 | 16.12% |
AI-IMU [21] | CNN + IEKF(不变卡尔曼滤波) | 是 | 1.10% |
CTIN [14] | Transformer-based IMU导航 | 是 | 1.02% |
FormerReckoning(本文) | Transformer + 物理提示 | 是 | 0.72% ✅ |