【论文导读】Robust Neural Inertial Navigation in the Wild

615 阅读11分钟

论文名称:Robust Neural Inertial Navigation in the Wild

会议:ICRA

时间:2020

这篇论文围绕“基于智能手机 IMU 传感器的鲁棒惯性导航”展开,核心任务是从智能手机 IMU 数据中估计人体在真实复杂场景下的水平轨迹(2D 位置)与身体朝向(heading)。论文没有发明 ResNetLSTMTCN 这些 backbone 本身,而是 围绕惯性导航任务设计了一套新的网络“外壳” (输入处理、损失函数、坐标系归一化、输出后处理)。这套外壳被无缝“套”在 ResNet/LSTM/TCN 之上,因此论文把它们分别称作 RoNIN-ResNetRoNIN-LSTMRoNIN-TCN

模型(Model)指 ResNet-18LSTM 这类“骨头”。架构(Architecture)指把骨头、输入表示、损失函数、坐标变换、后处理等拼起来的“整只动物”。论文贡献的是后者,它让传统模型在 IMU 导航任务上表现大幅提升。

让任何 backbone(ResNet/LSTM/TCN)都能直接吃到“归一化后的 IMU 序列”,并输出“可直接积分的位置/朝向”。解决传统 IMU 导航中的坐标漂移、奇异姿态、真值噪声三大痛点。

数据集

RoNIN Dataset(Robust Neural Inertial Navigation Dataset),作者团队自行采集并开源

ronin.cs.sfu.ca/

仅用 IMU 传感器(加速度计+陀螺仪),未使用 GNSS 或视觉,42.7 小时 IMU 数据,100 名被试,276 条轨迹

主要工作

这篇论文通过构建大规模真实场景 IMU 数据集 RoNIN,并提出鲁棒神经网络架构ResNet/LSTM/TCN),显著提升了 仅依赖 IMU 的惯性导航 在自然复杂手机使用场景下的 轨迹与朝向预测精度,优于传统方法和现有数据驱动模型

从智能手机 IMU 数据(加速度+角速度)中,预测人体在水平面上的相对位移轨迹与身体朝向,无需 GPS、视觉或地图信息。

属于惯性导航(Inertial Navigation),是短期到中期的相对路径预测(几分钟内),而非长期全局定位。

解决“自然使用手机”场景下的导航问题(如手机在口袋、包里、手中切换),传统方法在此失效。

  • 提出新数据集 RoNIN
  • 设计鲁棒神经网络架构;
  • 提出坐标系归一化与鲁棒速度损失函数。

深度学习模型:RoNIN 架构

RoNIN-ResNet

1DResNet-18,输入 200 帧 IMU 数据(200×6),输出 2D 速度向量,用于轨迹预测

坐标变换

在原始 IMU 数据输入网络之前需要经过坐标变换(Heading-Agnostic Coordinate Frame, HACF),用 Game Rotation Vector(测试期)随机水平旋转矩阵(训练期) 将“手机自身坐标系”下的 (acc_raw, gyro_raw)转换到 HACF 下的 (acc_hacf, gyro_hacf),再把它们拼成 (B, 200, 6) 送进网络。

输入为 200 帧(时间步)未校准 IMU 数据,Tensor:(B,200,6),B 为一次喂给网络多少条轨迹。旋转矩阵是 3×3,分别作用于 3 维向量的 accgyroacc_hacf = R · acc_rawgyro_hacf = R · gyro_raw。坐标变化前后的 维度不变。其中,acc 为 3 轴加速度 (x, y, z),gyro 为 3 轴角速度 (x, y, z)。

训练器的“随机水平旋转”用于数据增强。人在水平面里朝任何方向走路,本质物理规律一样。训练时每次随机把整条轨迹在水平面旋转 θ∈[0,2π),让网络学会 朝向无关 的通用表示,提高泛化能力。

而测试期不再随机旋转,而使用 Game Rotation Vector 是因为 推理时必须确定一个坐标轴。Game Rotation Vector 是 Android API 提供的 3D 旋转四元数,能把手机局部坐标系的 Z 轴对齐重力方向(即 HACF)。这样可以消除设备姿态的影响,同时保证测试时结果可重复(不再随机)。

  • Game Rotation Vector

    Android 官方传感器融合输出的一种“无磁”方向估计。只用加速度计 + 陀螺仪,比以来磁强计,室内磁场干扰大时也能比较稳定。给出手机当前相对于“重力对齐”坐标系的旋转四元数。

模型计算流程

  • 初始 1D 卷积层(Conv1D

Conv1D (kernel=7, stride=1, pad=3, out_channels=64) → (B, 200, 64)

作用:把时间维度的局部 7 帧 6 通道特征映射到 64 通道。

  • 批归一化 + ReLU

BatchNorm1D + ReLU → (B, 200, 64) (维度不变)

  • 最大池化(可选,很多 1D ResNet 实现里这一步被省掉)

MaxPool1D (kernel = 3, stride = 1, pad = 1) → (B, 200, 64) (若 stride = 2 则变 100,论文实现保持 200)

  • 残差组(ResNet-18 的 4 组 BasicBlock

每组包含若干 BasicBlock,每个 BasicBlock 的结构为 Conv1D(3×k) → BN → ReLU → Conv1D(3×k) → BN → +shortcut → ReLU

块数通道数 / 步长输出形状备注
Group12 块64, stride = 1(B, 200, 64)保持时间长度
Group22 块128, stride = 2(B, 100, 128)时间减半
Group32 块256, stride = 2(B, 50, 256)时间再减半
Group42 块512, stride = 2(B, 25, 512)时间再减半

stride = 2 只在每个 group 的第一个 block 执行;其余 block stride = 1。 残差连接维度不匹配时使用 1×1 Conv 调整通道。

全局平均池化

全局平均池化(Global Average Pooling)沿时间维度做平均 → (B, 512)

把(25, 512)向量在时间轴上取平均,得到 512 维全局特征。

全连接层(FC

Linear(512 → 2) → (B, 2)

输出 1 秒窗口内的 2D 位移增量 (Δx, Δy),单位:米。

损失计算(训练阶段)

Strided Velocity Loss

L=|\Sigma\Delta x_{pred},\Delta y_{pred}-(x_{gt-end}-x_{gt-start},y_{gt-end}-y_{gt-start})|_2

推理时每 5 帧取一次预测,积分得到整条轨迹。

RoNIN-LSTM

3 层 LSTM(每层 100 单元),输入 400 帧,输出 2D 速度向量,用于轨迹预测

原始输入为 400 帧(≈ 2sIMU 数据,坐标变化同 RoNIN-ResNet,Tensor:(B, 400, 6)

预嵌入层(Bilinear Embedding)

把 6 维 IMU 先映射到 32 维,减少 LSTM 参数量并融合 acc & gyro

操作:1×1 卷积(等价全连接,沿时间轴共享权重)

Conv1D (in_channels = 6, out_channels = 32, kernel_size = 1, stride = 1, padding = 0)

输入:(B, T, 6) 输出:(B, T, 32)

三层折叠 LSTM(unidirectional)

LSTM 层数为 3,hidden_size: 100(每层),dropout: 0.2(层间), batch_first = True(输入形状 B×T×F)

输入维度: (B, T, 32)

LSTM = 1 输出维度: (B, T, 100) ;LSTM = 1 输出维度: (B, T, 100) ;LSTM = 1 输出维度: (B, T, 100)

每层只把 hidden_size 设置为 100,时间长度 T 保持不变。

全连接回归头

Linear(in_features = 100, out_features = 2)

对每个时间步独立映射,输入: (B, T, 100) 输出: (B, T, 2)

每帧预测的 2D 瞬时速度(v_{x},v_{y}),单位 m/s

积分层(仅在训练期)

把 400 帧速度累加 → 400 帧位移

输入: (B, T, 2) 输出: (B, 2) 一条轨迹一个位移向量

与真值做 L2 损失(Latent Velocity Loss)

推理期(不含积分层)

直接取最后一帧速度,或每帧速度积分成整条轨迹

RoNIN-LSTM 先把 400×6 的 IMU 序列通过 1×1 卷积升到 400×32,再经 3 层 100 单元 LSTM 得到 400×100,最后每帧回归 2D 速度 400×2,训练时用“整段积分位移”做监督推理时逐帧积分 即可。

RoNIN-TCN

6 层膨胀卷积 TCN,感受野 253 帧,输出 2D 速度向量,用于轨迹预测

时间步长固定为 400,通道维度随层加深而变化

网络输入

经 Heading-Agnostic Coordinate Frame 作用,IMU_HACF 维度(B, 400, 6)

预嵌入层

Conv1D (in = 6, out = 16, kernel = 1),1×1 Conv = 全连接共享映射

输入:(B, 400, 6) 输出:(B, 400, 16) 把 6 维 IMU 映射到 16 维,减少后续 TCN 计算量

6 个残差块(Dilated Causal Conv1D

给出每一块的输入/输出通道数、膨胀率(dilation)、感受野增长,以及时间维长度变化(所有块 kernel_size = 3,stride = 1,时间维保持 400 不变)。

Block输入通道输出通道膨胀率输出形状备注
Res-116161(B, 400, 16)3×1 卷积,残差直连
Res-216322(B, 400, 32)通道 ×2,膨胀 ×2
Res-332644(B, 400, 64)通道 ×2,膨胀 ×4
Res-4641288(B, 400, 128)通道 ×2,膨胀 ×8
Res-51287216(B, 400, 72)通道降维
Res-6723632(B, 400, 36)进一步降维
  • 每个残差块内部:

    3×1 ConvBNReLUDropout3×1 ConvBN+shortcut 残差连接 → ReLU

    • 膨胀率(dilation)逐块翻倍(1,2,4,8,16,32),其余超参(kernel = 3, dropout_rate = 0.1~0.2)保持一致。所有卷积保持 causal padding,确保不泄露未来信息。
    • 这里 shortcut 前的“+”表示残差加法,当通道数或时间长度改变时,shortcut 上会增加一个 1×1 Conv 做维度匹配,称为 projection shortcut

高通道数只在中间层短暂出现,减少整体参数量。在 Res-4 输出 128 维丰富特征后,通过 Res-5/6 逐步压缩,迫使网络保留最关键信息,类似信息“瓶颈”结构(Bottleneck)。膨胀卷积把感受野扩大到 253 帧,高通道数不再是必须;降维可显著 降低后续计算量,同时几乎不损失精度。

回归头(逐时间步独立)

Conv1D (in = 36, out = 2, kernel = 1)

输入:(B, 400, 36) 输出:(B, 400, 2) 每帧输出一个 2D 瞬时速度 (v_x, v_y)。

积分层(仅训练期)

把 400 帧速度求和 → 位移

输入: (B, 400, 2) 输出: (B, 2) 与真值位移做 L2 损失(Latent Velocity Loss)

推理期

不使用积分层,直接对 (B, 400, 2) 逐帧积分得到轨迹。

RoNIN-TCN400×6IMU 序列经 1×1 卷积升到 16 维,再串 6 个膨胀残差块逐步提取 36 维时序特征,每帧回归 2D 速度 400×2,训练时用整段积分位移监督,推理时逐帧积分 即可。

RoNIN-Heading

RoNIN-LSTM 去掉积分层,输出 2D 单位向量表示身体朝向,只用于身体朝向预测

网络输入(坐标变化后)

输入 IMU_HACF 维度 (B, T, 6) T = 1000 帧(≈5 s) 6 = [acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z]

预嵌入(Bilinear Embedding)

Conv1D (in = 6, out = 32, kernel = 1)

输入: (B, 1000, 6) 输出: (B, 1000, 32) 把 6 维 IMU 映射到 32 维,减少后续 LSTM 参数量

三层堆叠单向 LSTM

hidden_size=100,层数=3,无积分层,无 dropout,时间维度保持 1000 不变。

层号输入形状输出形状备注
LSTM-1(B, 1000, 32)(B, 1000, 100)hidden=100
LSTM-2(B, 1000, 100)(B, 1000, 100)hidden=100
LSTM-3(B, 1000, 100)(B, 1000, 100)hidden=100

全连接回归头

Linear (in=100, out=2)

输入: (B, 1000, 100) 输出: (B, 1000, 2) 每帧输出一个 2D 单位向量 (cosθ, sinθ),表示身体朝向

训练期损失

把 (cosθ, sinθ) 与真值朝向做MSE,加正则项 λ(1−x²−y²) 保证单位长度。

RoNIN-Heading 把 1000×6 的 IMU 序列经 1×1 卷积升到 1000×32,再经 3 层 100 单元的 LSTM 得到 1000×100,最后每帧输出 1000×2 的单位向量表示身体朝向,无积分层,训练用角度 MSE

关键设计技巧

  • 坐标系归一化(Heading-Agnostic Coordinate Frame) :避免设备姿态变化对训练的影响。
  • 鲁棒速度损失函数(Robust Velocity Loss) :解决 IMU 高频噪声问题,通过积分真值位移来监督速度预测。

模型效果对比

对比方法简介效果对比(RoNIN 数据集)
NDI(Naive Double Integration)传统 IMU 双重积分完全失效,误差巨大
PDR(Pedestrian Dead Reckoning)步数+步长+方向估计在简单场景有效,复杂场景失效
RIDI数据驱动的 IMU 双积分(SVRRoNIN 上表现一般,无法处理自然手机使用
IONetLSTM 预测速度与方向变化RoNIN 上误差较大,无法适应复杂场景