10th place solution for Google Smartphone Decimeter Challenge at kaggle.

Overview

Under refactoring

10th place solution for Google Smartphone Decimeter Challenge at kaggle.

Google Smartphone Decimeter Challenge

Global Navigation Satellite System (GNSS) provides raw signals, which the GPS chipset uses to compute a position.
Current mobile phones only offer 3-5 meters of positioning accuracy. While useful in many cases,
it can create a “jumpy” experience. For many use cases the results are not fine nor stable enough to be reliable.

This competition, hosted by the Android GPS team, is being presented at the ION GNSS+ 2021 Conference.
They seek to advance research in smartphone GNSS positioning accuracy
and help people better navigate the world around them.

In this competition, you'll use data collected from the host team’s own Android phones
to compute location down to decimeter or even centimeter resolution, if possible.
You'll have access to precise ground truth, raw GPS measurements,
and assistance data from nearby GPS stations, in order to train and test your submissions.
  • Predictions with host baseline for highway area(upper figure) are really good, but for downtown area(lower figure) are noisy due to the effect of Multipath. input_highway input_downtown

Overview

  • Predicting the Noise, Noise = Ground Truth - Baseline, like denoising in computer vision
  • Using the speed latDeg(t + dt) - latDeg(t)/dt as input instead of the absolute position for preventing overfitting on the train dataset.
  • Making 2D image input with Short Time Fourier Transform, STFT, and then using ImageNet convolutional neural network

image-20210806172801198 best_vs_hosbaseline

STFT and Conv Network Part

  • Input: Using librosa, generating STFT for both latDeg&lngDeg speeds.
    • Each phone sequence are split into 256 seconds sequence then STFT with n_tft=256, hop_length=1 and win_length=16 , result in (256, 127, 2) feature for each degree. The following 2D images are generated from 1D sequence.

image-20210806174449510

  • Model: Regression and Segmentation
    • Regression: EfficientNet B3, predict latDeg&lngDeg noise,
    • Segmentation: Unet ++ with EfficientNet encoder(segmentation pyroch) , predict stft noise
      • segmentation prediction + input STFT -> inverse STFT -> prediction of latDeg&lngDeg speeds

      • this speed prediction was used for:

        1. Low speed mask; The points of low speed area are replaced with its median.
        2. Speed disagreement mask: If the speed from position prediction and this speed prediction differ a lot, remove such points and interpolate.
      • prediction example for the segmentation. segmentation segmentation2

LightGBM Part

  • Input: IMU data excluding magnetic filed feature
    • also excluding y acceleration and z gyro because of phone mounting condition
    • adding moving average as additional features, window_size=5, 15, 45
  • Predict latDeg&lngDeg noise

KNN at downtown Part

similar to Snap to Grid, but using both global and local feature. Local re-ranking comes from the host baseline of GLR2021

  • Use train ground truth as database
  • Global search: query(latDeg&lngDeg) -> find 10 candidates
  • Local re-ranking: query(latDeg&lngDeg speeds and its moving averages) -> find 3 candidates -> taking mean over candidates

Public Post Process Part

There are lots of nice and effective PPs in public notebooks. Thanks to the all authors. I used the following notebooks.

score

  • Check each idea with late submissions.
  • actually conv position pred part implemented near deadline, before that I used only the segmentation model for STFT image.
status Host baseline + Public PP conv position pred gbm speed mask knn global knn local Private Board Score
1 day before deadline 3.07323
10 hours before deadline 2.80185
my best submission 2.61693
late sub 5.423
late sub 3.61910
late sub 3.28516
late sub 3.19016
late sub 2.81074
late sub 2.66377

How to run

environment

  • Ubuntu 18.04
  • Python with Anaconda
  • NVIDIA GPUx1

Data Preparation

First, download the data, here, and then place it like below.

../input/
    └ google-smartphone-decimeter-challenge/

During run, temporary cached will be stored under ../data/ and outputs will be stored under ../working/ through hydra.

Code&Pacakage Installation

# clone project
git clone https://github.com/Fkaneko/kaggle_Google_Smartphone_Decimeter_Challenge

# install project
cd kaggle_Google_Smartphone_Decimeter_Challenge
conda create -n gsdc_conv python==3.8.0
yes | bash install.sh
# at my case I need an additional run of `yes | bash install.sh` for installation.

Training/Testing

3 different models

  • for conv training, python train.py at each branch. Please check the src/config/config.yaml for the training configuration.
  • for LightGBM position you need mv ./src/notebook/lightgbm_position_prediction.ipynb ./ and then starting juypter notebook.
model branch training test
conv stft segmentation main ./train.py ./test.py
conv position conv_position ./train.py ./test.py
LightGBM position main ./src/notebook/lightgbm_position_prediction.ipynb included training notebook

Testing

10th place solution trained weights

I've uploaded pretrained weights as kaggle dataset, here. So extract it on ./ and you can see ./model_weights. And then running python test.py yields submission.csv. This csv will score ~2.61 at kaggle private dataset, which equals to 10th place.

your trained weights

For conv stft segmentation please change paths at the config, src/config/test_weights/compe_sub_github.yaml, and then run followings.

# at main branch
python test.py  \
     conv_pred_path="your conv position prediction csv path"\
     gbm_pred_path="your lightgbm position prediction path"

Regarding, conv_pred_path and gbm_pred_path, you need to create each prediction csv with the table above before run this code. Or you can use mv prediction results on the same kaggle dataset as pretrained weights.

License

Code

Apache 2.0

Dataset

Please check the kaggle page -> https://www.kaggle.com/c/google-smartphone-decimeter-challenge/rules

pretrained weights

These trained weights were generated from ImageNet pretrained weights. So please check ImageNet license if you use pretrained weights for a serious case.

This repository contains an overview of important follow-up works based on the original Vision Transformer (ViT) by Google.

This repository contains an overview of important follow-up works based on the original Vision Transformer (ViT) by Google.

75 Dec 02, 2022
This repository collects 100 papers related to negative sampling methods.

Negative-Sampling-Paper This repository collects 100 papers related to negative sampling methods, covering multiple research fields such as Recommenda

RUCAIBox 119 Dec 29, 2022
A benchmark dataset for emulating atmospheric radiative transfer in weather and climate models with machine learning (NeurIPS 2021 Datasets and Benchmarks Track)

ClimART - A Benchmark Dataset for Emulating Atmospheric Radiative Transfer in Weather and Climate Models Official PyTorch Implementation Using deep le

21 Dec 31, 2022
基于Pytorch实现优秀的自然图像分割框架!(包括FCN、U-Net和Deeplab)

语义分割学习实验-基于VOC数据集 usage: 下载VOC数据集,将JPEGImages SegmentationClass两个文件夹放入到data文件夹下。 终端切换到目标目录,运行python train.py -h查看训练 (torch) Li Xiang 28 Dec 21, 2022

Official repo for AutoInt: Automatic Integration for Fast Neural Volume Rendering in CVPR 2021

AutoInt: Automatic Integration for Fast Neural Volume Rendering CVPR 2021 Project Page | Video | Paper PyTorch implementation of automatic integration

Stanford Computational Imaging Lab 149 Dec 22, 2022
Space-invaders - Simple Game created using Python & PyGame, as my Beginner Python Project

Space Invaders This is a simple SPACE INVADER game create using PYGAME whihc hav

Gaurav Pandey 2 Jan 08, 2022
An Ensemble of CNN (Python 3.5.1 Tensorflow 1.3 numpy 1.13)

An Ensemble of CNN (Python 3.5.1 Tensorflow 1.3 numpy 1.13)

0 May 06, 2022
Multi-query Video Retreival

Multi-query Video Retreival

Princeton Visual AI Lab 17 Nov 22, 2022
(SIGIR2020) “Asymmetric Tri-training for Debiasing Missing-Not-At-Random Explicit Feedback’’

Asymmetric Tri-training for Debiasing Missing-Not-At-Random Explicit Feedback About This repository accompanies the real-world experiments conducted i

yuta-saito 19 Dec 01, 2022
A simple, clean TensorFlow implementation of Generative Adversarial Networks with a focus on modeling illustrations.

IllustrationGAN A simple, clean TensorFlow implementation of Generative Adversarial Networks with a focus on modeling illustrations. Generated Images

268 Nov 27, 2022
PyTorch implementation of Wide Residual Networks with 1-bit weights by McDonnell (ICLR 2018)

1-bit Wide ResNet PyTorch implementation of training 1-bit Wide ResNets from this paper: Training wide residual networks for deployment using a single

Sergey Zagoruyko 122 Dec 07, 2022
Megaverse is a new 3D simulation platform for reinforcement learning and embodied AI research

Megaverse Megaverse is a new 3D simulation platform for reinforcement learning and embodied AI research. The efficient design of the engine enables ph

Aleksei Petrenko 191 Dec 23, 2022
QAHOI: Query-Based Anchors for Human-Object Interaction Detection (paper)

QAHOI QAHOI: Query-Based Anchors for Human-Object Interaction Detection (paper) Requirements PyTorch = 1.5.1 torchvision = 0.6.1 pip install -r requ

38 Dec 29, 2022
A Python library for generating new text from existing samples.

ReMarkov is a Python library for generating text from existing samples using Markov chains. You can use it to customize all sorts of writing from birt

8 May 17, 2022
Implementation for Simple Spectral Graph Convolution in ICLR 2021

Simple Spectral Graph Convolutional Overview This repo contains an example implementation of the Simple Spectral Graph Convolutional (S^2GC) model. Th

allenhaozhu 64 Dec 31, 2022
Code in conjunction with the publication 'Contrastive Representation Learning for Hand Shape Estimation'

HanCo Dataset & Contrastive Representation Learning for Hand Shape Estimation Code in conjunction with the publication: Contrastive Representation Lea

Computer Vision Group, Albert-Ludwigs-Universität Freiburg 38 Dec 13, 2022
[ICCV 2021] A Simple Baseline for Semi-supervised Semantic Segmentation with Strong Data Augmentation

[ICCV 2021] A Simple Baseline for Semi-supervised Semantic Segmentation with Strong Data Augmentation

CodingMan 45 Dec 12, 2022
Extension to fastai for volumetric medical data

FAIMED 3D use fastai to quickly train fully three-dimensional models on radiological data Classification from faimed3d.all import * Load data in vari

Keno 26 Aug 22, 2022
Improved Fitness Optimization Landscapes for Sequence Design

ReLSO Improved Fitness Optimization Landscapes for Sequence Design Description Citation How to run Training models Original data source Description In

Krishnaswamy Lab 44 Dec 20, 2022
This project is a loose implementation of paper "Algorithmic Financial Trading with Deep Convolutional Neural Networks: Time Series to Image Conversion Approach"

Stock Market Buy/Sell/Hold prediction Using convolutional Neural Network This repo is an attempt to implement the research paper titled "Algorithmic F

Asutosh Nayak 136 Dec 28, 2022