Linear Algebra
2️⃣

RoNIN 읽어보기

ronin
Sachini

Abstract

data-driven 방식의 IMU 센서를 이용한 inertial navigation 방법을 다룬다.
IMU 센서를 이용해 얻은 sequence만을 이용하여 움직이는 물체의 PositionOrientation을 구한다.
100명의 사람들이 직접 스마트폰을 들고 다니며 얻은 40시간 가량의 IMU 센서 데이터를 이용한다.

Introduction

IMU(Inertial Measurement Unit)은 accelerometers, gyroscopes 그리고 magnetometers로 이루어진 센서입니다. 이러한 IMU를 이용하여 VR, AR, SLAM 등등 수많은 task에서 활용되고 있습니다. 이 센서는 또한 에너지 효율적이고, 24시간 동작 가능하며, 주머니 속에서도 동작하고 보통 스마트폰에 포함되어 접근성이 좋습니다.
이러한 센서를 이용해 navigation을 하는 데 있어, 기존의 알고리즘들은 현실에서 사용하기 힘든 가정들을 이용하고 있습니다. (heuristic 하다)
Zero Speed Update : IMU를 발에 부착시킴으로써 발이 땅에 닿을 때 마다 기기의 속도를 0으로 추정하는 방법
Step Counting : IMU를 몸에 지니고 보행자로 하여금 앞으로만 걷게 만들어 움직임의 방향을 고정시켜 놓은 뒤 추정하는 방법
이러한 제한조건들을 없애기 위해 Data-driven 방식의 접근이 최근에 제시되고 있습니다. IMU 센서 데이터GT motion Trajectory 데이터Supervised Learning을 사용하여 움직임에 관련한 파라미터(ex. velocity vector)를 추정합니다.

Contribution

42.7시간 가량의 방대한 IMU data / GT 3D Motion data로 이루어져 있다. 이 데이터들은 실제 사람들이 생활에서 스마트폰을 들고 다니면서 하는 행동을 그대로 하도록 하였다.
Neural Architecture를 이용하여 Challenging한 움직임에 잘 대응하도록 하였다.

Datasets

Inertial Navigation Datasets이 가져야 할 중요 요소 3가지

Scale - 총 42.7시간의 IMU-motion 데이터 - 3개의 빌딩에서 276개의 sequence를 가진다.
Diversity - 100명 정도의 실험자들의 움직임 모션을 활용하였다.
Fidelity - 실험자들은 일상생활과 동일하게 스마트폰을 움직이게 하고 실험을 진행하였다. (ex. 스마트폰을 가방에 넣는다던가, 주머니에 넣거나, 손에 쥐고 다니는 것 등)

데이터셋의 주요 특징

2개의 디바이스( 3D tracking Phone, IMU Phone)를 활용하여 데이터를 취득한다.
Position GT 는 몸에 단단히 고정시킨 3D tracking phone을 사용하여 구한다. 이를 통해 body trajectory를 구한다!
body Heading을 따로 추정한다 → body와 IMU 는 다른 Coordinates를 가지기 때문이다. 몸에 부착된 tracking phone의 방향과 GT Body 방향이 동일하다고 가정한다. harness의 misalignment로 인해 일어나는 offset에 대해서 나중에 보정을 해준다.
총 100명의 사람들 중 85명train, test, validation을 위해 사용되고, 나머지 15명의 경우 보여지지 않은 사람들로 처리하여 generalization 성능을 평가한다.
IMU data와 3D pose data는 200hz의 속도로 얻어졌으며, magnetometer와 barometer 의 값 또한 측정에 이용하였다.

Model Description

Backbone Structure : ResNet, LSTM, TCN 이 3가지를 사용한다.
Task : (Supervised) IMU sensor history of k frames (Xik:i)(X_{i-k: i}) Velocity 2D vector yi\vec{y}_i
Position EstimationBody Heading Estimation은 나누어서 진행한다.

1. Coordinate frame Normalization

IMU phone의 경우, 사용자가 어떻게 쥐고 있느냐에 따라 같은 움직임을 행하더라도 velocity는 완전히 달라지게 됩니다. 이는 device coordinate가 매 프레임 바뀌기 때문입니다. 이 장치로부터 우리는 계속 데이터를 얻어야 하는데 프레임이 달라지면 정확한 포즈 추정이 불가능해집니다. 따라서 이를 방지하기 위해 이동방향과 상관없는 프레임을 이용하여 표현합니다.
이것이 바로 HACF (heading-agnostic coordinate frame) 입니다. 이 프레임은 항상 z축이 중력방향과 정렬되어 있습니다.
device CF에서의 IMU Sensor data accelerationadev\vec{a}_{\mathrm{dev}} 로 표현한다면, Training중에는 각 epoch마다 gt trajectory를 수평면으로 회전시키는 RzR_z를 이용하여 random HACF를 사용합니다. 이에 맞추어 IMU data도 같은 HACF로 변환하기 위해 device orientation RgrvR_{\mathrm{grv}} 와 같은 수평면 회전 RzR_z 를 수행합니다.
ahacf=RzRgrvadev\vec{a}_{\mathrm{hacf}}=R_z R_{\mathrm{grv}} \vec{a}_{\mathrm{dev}}
Test중에는, Android에서 제공하는 device orientation을 이용한 coordinate frame을 이용합니다. 이는 ZZ 축이 중력방향과 align되어 있습니다.
ahacf=Rgrvadev\vec{a}_{\mathrm{hacf}}=R_{\mathrm{grv}} \vec{a}_{\mathrm{dev}}

2. Network Architecture

RoNIN은 크게 3가지의 모델을 사용합니다.
1.
RoNIN ResNet
1D 버전으로 변형된 ResNet-18 아키텍쳐 + 512개의 units로 이루어진 하나의 FC layer
yi=fResNet (Xi200:i)\vec{y}_i=f_{\text {ResNet }}\left(X_{i-200: i}\right)
2.
RoNIN LSTM
쌓인 단방향 LSTM을 이용하며, bilinear layer의 출력을 연결함으로써 input feature를 강화한다
3개의 layer로 이루어져 있는데, 각각 100개의 units로 이루어져 있다.
yik:i=fLSTM(Xik:i)\vec{y}_{i-k: i}=f_{L S T M}\left(X_{i-k: i}\right)
3.
RoNIN TCN
TCN은 dilated causal convolution을 이용하는 many-to-many recurent 아키텍쳐입니다.
6개의 residual block을 이용합니다. (16, 32, 64, 128, 72, 36 채널을 가집니다.)
yik:i=fTCN(Xik:i)\vec{y}_{i-k: i}=f_{T C N}\left(X_{i-k: i}\right)

3. Robust Velocity Loss

1.
Latent velocity Loss RoNIN LSTM / TCN 의 출력이 yik:i\vec{y}_{i-k: i} 이 합쳐지고 이 값을 gt positional difference와 비교하여 loss를 구한다. 이 때 pi\vec{p}_iii 번째 프레임에서의 position이다. (수평면에 존재)
 loss =L2(pipikikiydt)\text { loss }=L_2\left(\vec{p}_i-\vec{p}_{i-k}-\int_{i-k}^i \vec{y} d t\right)
2.
Strided velocity loss RoNIN ResNet에 대한 Loss이다.
 loss =MSE(pipik,yi)\text { loss }=\operatorname{MSE}\left(\vec{p}_i-\vec{p}_{i-k}, \quad \vec{y}_i\right)

4. RoNIN body Heading Network

사용자가 움직이지 않는 상태에서는 Orientation을 추정하기는 쉽지 않다. 예를 들어 사용자가 30초 간 의자에 앉아 있는다면, IMU data는 어떠한 값도 나타내지 않게 되고, Orientation을 추정하기 위해서는 30초 전의 IMU 센서 정보를 얻어야 한다.
이에 대응하기 위해서는 long memory를 잘 저장할 수 있는 모델 아키텍쳐가 필요하며, 아까 사용하였던 RoNIN LSTM에서 Integration Layer를 뺀 구조를 사용한다. Output은 각 프레임의 body Heading Angle의 sinsincoscos 값을 2D vector (a,b)(a,b)로 나타낸다.
θi\theta_i 는 GT Body heading angle을 의미한다. λ\lambda 는 normalization loss로써 1aj2bj2\left\|1-a_j^2-b_j^2\right\| 이다.
 loss =j=ikiMSE((sinθj,cosθj),(aj,bj))+λ\text { loss }=\sum_{j=i-k}^i M S E\left(\left(\sin \theta_j, \cos \theta_j\right), \quad\left(a_j, b_j\right)\right)+\lambda
이용자가 움직이지 않는다면 Orientation을 추정하는데 문제가 있으므로 얻은 시퀀스의 velocity의 절대값이 0.1[m/s] 보다 클 때만 네트워크의 파라미터를 업데이트 한다.

Evaluation

1. Position Evaluation

사용하는 metric
ATE : 추정치와 GT Trajectory 사이의 RMSE 값
RTE : 기준 시간동안의 평균 RMSE 값 → 여기 논문에선 1분

2. Body Heading Evaluation

사용하는 metric
MSE, MAE

Conclusion

device Orientation으로 부터 얻는 데이터에 대한 의존성이 크다. device의 성능이 안좋아지면 모델의 성능 또한 낮아진다.