rfbr / PDR_with_Deep_Learning

40 stars 12 forks source link

Deep learning based pedestrian dead reckoning using smartphone IMU

This project was part of my research internship at Kyushu University in Japan, supervised by professor Hideaki Uchiyama. It is based on above works:

https://github.com/jpsml/6-DOF-Inertial-Odometry https://www.mdpi.com/1424-8220/19/17/3777/pdf

Introduction

Selfsufficient running and independance from the outside environment give smarthpone built-in inertial sensors an important role in indoor navigation. This repository allows the creation of a mobile real-time indoor positioning system using a smart-phone held in hand. In order to achieve this, we will only use the Inertial Measurement Unit (IMU) present in the phone, gathering acceleration and angular velocity. The proposed method is based on 6-DOF odometry, computing relative sensor pose changes between two sequential moments using a neural network. The estimate will then be refined by a Bayesian filter, a particle filter, associated with a map-matching algorithm.

This repository contains only the 6-DOF odometry implementation using IMU data gathered with an android application (you can find the source code here), powered by a CNN-LSTM neural network. It allows to create a tflite model with the best trained model, ready to be used in our android application.

Global trajectory estimation

To estimate the pedestrian 3D world coordinates, we use our neural network to predict 6DOF relative coordinates (represented by a translation vector and a quaternion rotation vector) between two given timestamps separated by a constant step. Thus, by combining all relative poses, we can compute the global pose.

Data format

We use IMU data (acceleration and angular velocity) gathered by an android application via embedded accelerometer and gyroscope to estimate the ground truth position captured via ARCore.

The neural network

We tryed different architectures and kept the best one according to the validation loss (tracked with TensorBoard): lolz The architecture corresponding is the following: NN(1)

Our neural network can be divided into three main parts:

Project architecture

Prerequisite

Usage = I recommend you use Anaconda distribution to create a virtual environment as follow:

$ conda create -n tf_env python=3.7
$ conda activate tf_env
$ pip install tensorflow-gpu
$ pip install numpy-quaternion
$ pip install tfquaternion
$ pip install tqdm
$ conda install scikit-learn
$ conda install basemap
$ conda install pandas
$ conda install numba

This project was designed to be user friendly, just execute python -m pdr and follow the different instructions.

Results = You can find some results in the img folder. Here are some examples:

Concerning floor changing detection, data augmentation leads to bad results. Spherical linear interpolation for quaternions might not be the best or we may have done some mistakes: