【论文导读】FormerReckoning Physics Inspired Transformer for Accurate Inertial Navigat

论文名称:FormerReckoning Physics Inspired Transformer for Accurate Inertial Navigation

会议:MOBICOM(移动计算与网络国际年会,CCF-A

时间:2024

这篇文章解决的是仅使用IMU进行自主定位(Dead Reckoning)的问题,特别是在没有外部传感器(如GNSSLiDAR、视觉)辅助 的情况下,如何提升定位精度并减少误差累积

数据集

KITTI Odometry Datasetwww.cvlibs.net/datasets/ki...

使用开源数据集,不是作者团队采集的

包含IMUGPSLiDAR、图像等多种传感器,但本文仅使用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%
相关推荐
THMAIL3 小时前
机器学习从入门到精通 - 模型部署落地:Docker+Flask构建API服务全流程
人工智能·python·算法·机器学习·docker·flask·逻辑回归
weixin_377634843 小时前
【sft技巧】模型微调技巧
人工智能·深度学习·机器学习
obroccolio3 小时前
【C++题解】关联容器
开发语言·数据结构·c++·算法
沐怡旸3 小时前
【算法--链表】25.K个一组翻转链表--通俗讲解
算法·面试
快去睡觉~3 小时前
力扣190:颠倒二进制位
数据结构·算法·leetcode
惯导马工4 小时前
【论文导读】CTIN: Robust Contextual Transformer Network for Inertial Navigation
算法
多恩Stone4 小时前
【3D 入门-7】理解 SDF(Signed Distance Field) 不是什么?与相对坐标的区别
人工智能·python·深度学习·3d·aigc
骑驴看星星a4 小时前
皮尔逊相关(Pearson)和斯皮尔曼相关(Spearman)显著性检验
算法·数学建模·回归·线性回归
MT_1254 小时前
大小端存储的理解与判断方法
数据结构·算法