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.

novel deep learning research works with PaddlePaddle

Research 发布基于飞桨的前沿研究工作,包括CV、NLP、KG、STDM等领域的顶会论文和比赛冠军模型。 目录 计算机视觉(Computer Vision) 自然语言处理(Natrual Language Processing) 知识图谱(Knowledge Graph) 时空数据挖掘(Spa

1.5k Dec 29, 2022
Official Implementation of DE-CondDETR and DELA-CondDETR in "Towards Data-Efficient Detection Transformers"

DE-DETRs By Wen Wang, Jing Zhang, Yang Cao, Yongliang Shen, and Dacheng Tao This repository is an official implementation of DE-CondDETR and DELA-Cond

Wen Wang 41 Dec 12, 2022
Implementation of fast algorithms for Maximum Spanning Tree (MST) parsing that includes fast ArcMax+Reweighting+Tarjan algorithm for single-root dependency parsing.

Fast MST Algorithm Implementation of fast algorithms for (Maximum Spanning Tree) MST parsing that includes fast ArcMax+Reweighting+Tarjan algorithm fo

Miloš Stanojević 11 Oct 14, 2022
Make your own game in a font!

Project structure. Included is a suite of tools to create font games. Tutorial: For a quick tutorial about how to make your own game go here For devel

Michael Mulet 125 Dec 04, 2022
HMLLDB is a collection of LLDB commands to assist in the debugging of iOS apps.

HMLLDB is a collection of LLDB commands to assist in the debugging of iOS apps. 中文介绍 Features Non-intrusive. Your iOS project does not need to be modi

mao2020 47 Oct 22, 2022
My solution for the 7th place / 245 in the Umoja Hack 2022 challenge

Umoja Hack 2022 : Insurance Claim Challenge My solution for the 7th place / 245 in the Umoja Hack 2022 challenge Umoja Hack Africa is a yearly hackath

Souames Annis 17 Jun 03, 2022
A framework for using LSTMs to detect anomalies in multivariate time series data. Includes spacecraft anomaly data and experiments from the Mars Science Laboratory and SMAP missions.

Telemanom (v2.0) v2.0 updates: Vectorized operations via numpy Object-oriented restructure, improved organization Merge branches into single branch fo

Kyle Hundman 844 Dec 28, 2022
Code for Reciprocal Adversarial Learning for Brain Tumor Segmentation: A Solution to BraTS Challenge 2021 Segmentation Task

BRATS 2021 Solution For Segmentation Task This repo contains the supported pytorch code and configuration files to reproduce 3D medical image segmenta

Himashi Amanda Peiris 6 Sep 15, 2022
Luminaire is a python package that provides ML driven solutions for monitoring time series data.

A hands-off Anomaly Detection Library Table of contents What is Luminaire Quick Start Time Series Outlier Detection Workflow Anomaly Detection for Hig

Zillow 670 Jan 02, 2023
AutoDeeplab / auto-deeplab / AutoML for semantic segmentation, implemented in Pytorch

AutoML for Image Semantic Segmentation Currently this repo contains the only working open-source implementation of Auto-Deeplab which, by the way out-

AI Necromancer 299 Dec 17, 2022
Satellite labelling tool for manual labelling of storm top features such as overshooting tops, above-anvil plumes, cold U/Vs, rings etc.

Satellite labelling tool About this app A tool for manual labelling of storm top features such as overshooting tops, above-anvil plumes, cold U/Vs, ri

Czech Hydrometeorological Institute - Satellite Department 10 Sep 14, 2022
3D2Unet: 3D Deformable Unet for Low-Light Video Enhancement (PRCV2021)

3DDUNET This is the code for 3D2Unet: 3D Deformable Unet for Low-Light Video Enhancement (PRCV2021) Conference Paper Link Dataset We use SMOID dataset

1 Jan 07, 2022
The official TensorFlow implementation of the paper Action Transformer: A Self-Attention Model for Short-Time Pose-Based Human Action Recognition

Action Transformer A Self-Attention Model for Short-Time Human Action Recognition This repository contains the official TensorFlow implementation of t

PIC4SeRCentre 20 Jan 03, 2023
A Comprehensive Study on Learning-Based PE Malware Family Classification Methods

A Comprehensive Study on Learning-Based PE Malware Family Classification Methods Datasets Because of copyright issues, both the MalwareBazaar dataset

8 Oct 21, 2022
Computer Vision application in the web

Computer Vision application in the web Preview Usage Clone this repo git clone https://github.com/amineHY/WebApp-Computer-Vision-streamlit.git cd Web

Amine Hadj-Youcef. PhD 35 Dec 06, 2022
Notebooks em Python para Métodos Eletromagnéticos

GeoSci Labs This is a repository of code used to power the notebooks and interactive examples for https://em.geosci.xyz and https://gpg.geosci.xyz. Th

Victor Cezar Tocantins 1 Nov 16, 2021
SPTAG: A library for fast approximate nearest neighbor search

SPTAG: A library for fast approximate nearest neighbor search SPTAG SPTAG (Space Partition Tree And Graph) is a library for large scale vector approxi

Microsoft 4.3k Jan 01, 2023
LibMTL: A PyTorch Library for Multi-Task Learning

LibMTL LibMTL is an open-source library built on PyTorch for Multi-Task Learning (MTL). See the latest documentation for detailed introductions and AP

765 Jan 06, 2023
official implemntation for "Contrastive Learning with Stronger Augmentations"

CLSA CLSA is a self-supervised learning methods which focused on the pattern learning from strong augmentations. Copyright (C) 2020 Xiao Wang, Guo-Jun

Lab for MAchine Perception and LEarning (MAPLE) 47 Nov 29, 2022