Self-supervised Deep LiDAR Odometry for Robotic Applications

Overview

DeLORA: Self-supervised Deep LiDAR Odometry for Robotic Applications

Overview

This is the corresponding code to the above paper ("Self-supervised Learning of LiDAR Odometry for Robotic Applications") which is published at the International Conference on Robotics and Automation (ICRA) 2021. The code is provided by the Robotics Systems Lab at ETH Zurich, Switzerland.

** Authors:** Julian Nubert ([email protected]) , Shehryar Khattak , Marco Hutter

title_img

Copyright IEEE

Python Setup

We provide a conda environment for running our code.

Conda

The conda environment is very comfortable to use in combination with PyTorch because only NVidia drivers are needed. The Installation of suitable CUDA and CUDNN libraries is all handle by Conda.

  • Install conda: link
  • To set up the conda environment run the following command:
conda env create -f conda/DeLORA-py3.9.yml

This installs an environment including GPU-enabled PyTorch, including any needed CUDA and cuDNN dependencies.

  • Activate the environment:
conda activate DeLORA-py3.9
  • Install the package to set all paths correctly:
pip3 install -e .

ROS Setup

For running ROS code in the ./src/ros_utils/ folder you need to have ROS installed (link). We recommend Ubuntu 20.04 and ROS Noetic due to its native Python3 support. For performing inference in Python2.7, convert your PyTorch model with ./scripts/convert_pytorch_models.py and run an older PyTorch version (<1.3).

ros-numpy

In any case you need to install ros-numpy if you want to make use of the provided rosnode:

sudo apt install ros-<distro>-ros-numpy

Datasets and Preprocessing

Instructions on how to use and preprocess the datasets can be found in the ./datasets/ folder. We provide scripts for doing the preprocessing for:

  1. general rosbags containing LiDAR scans,
  2. and for the KITTI dataset in its own format.

Example: KITTI Dataset

LiDAR Scans

Download the "velodyne laster data" from the official KITTI odometry evaluation ( 80GB): link. Put it to <delora_ws>/datasets/kitti, where kitti contains /data_odometry_velodyne/dataset/sequences/00..21.

Groundtruth poses

Please also download the groundtruth poses here. Make sure that the files are located at <delora_ws>/datasets/kitti, where kitti contains /data_odometry_poses/dataset/poses/00..10.txt.

Preprocessing

In the file ./config/deployment_options.yaml make sure to set datasets: ["kitti"]. Then run

preprocess_data.py

Custom Dataset

If you want to add an own dataset please add its sensor specifications to ./config/config_datasets.yaml and ./config/config_datasets_preprocessing.yaml. Information that needs to be added is the dataset name, its sequences and its sensor specifications such as vertical field of view and number of rings.

Deploy

After preprocessing, for each dataset we assume the following hierarchical structure: dataset_name/sequence/scan (see previous dataset example). Our code natively supports training and/or testing on various datasets with various sequences at the same time.

Training

Run the training with the following command:

run_training.py

The training will be executed for the dataset(s) specified in ./config/deployment_options.yaml. You will be prompted to enter a name for this training run, which will be used for reference in the MLFlow logging.

Custom Settings

For custom settings and hyper-parameters please have a look in ./config/.

By default loading from RAM is disabled. If you have enough memory, enable it in ./config/deployment_options.yaml. When loading from disk, the first few iterations are sometimes slow due to I/O, but it should accelerate quite quickly. For storing the KITTI training set entirely in memory, roughly 50GB of RAM are required.

Continuing Training

For continuing training provide the --checkpoint flag with a path to the model checkpoint to the script above.

Visualizing progress and results

For visualizing progress we use MLFlow. It allows for simple logging of parameters, metrics, images, and artifacts. Artifacts could e.g. also be whole TensorBoard logfiles. To visualize the training progress execute (from DeLORA folder):

mlflow ui 

The MLFlow can then be visualized in your browser following the link in the terminal.

Testing

Testing can be run along the line:

run_testing.py --checkpoint <path_to_checkpoint>

The checkpoint can be found in MLFlow after training. It runs testing for the dataset specified in ./config/deployment_options.yaml.

We provide an exemplary trained model in ./checkpoints/kitti_example.pth.

ROS-Node

This ROS-node takes the pretrained model at location <model_location> and performs inference; i.e. it predicts and publishes the relative transformation between incoming point cloud scans. The variable <dataset> should contain the name of the dataset in the config files, e.g. kitti, in order to load the corresponding parameters. Topic and frame names can be specified in the following way:

run_rosnode.py --checkpoint <model_location> --dataset <dataset> --lidar_topic=<name_of_lidar_topic> --lidar_frame=<name_of_lidar_frame>

The resulting odometry will be published as a nav_msgs.msg.Odometry message under the topic /delora/odometry .

Example: DARPA Dataset

For the darpa dataset this could look as follows:

run_rosnode.py --checkpoint ~/Downloads/checkpoint_epoch_0.pth --dataset darpa --lidar_topic "/sherman/lidar_points" --lidar_frame sherman/ouster_link

Comfort Functions

Additional functionalities are provided in ./bin/ and ./scripts/.

Visualization of Normals (mainly for debugging)

Located in ./bin/, see the readme-file ./dataset/README.md for more information.

Creation of Rosbags for KITTI Dataset

After starting a roscore, conversion from KITTI dataset format to a rosbag can be done using the following command:

python scripts/convert_kitti_to_rosbag.py

The point cloud scans will be contained in the topic "/velodyne_points", located in the frame velodyne. E.g. for the created rosbag, our provided rosnode can be run using the following command:

run_rosnode.py --checkpoint ~/Downloads/checkpoint_epoch_30.pth --lidar_topic "/velodyne_points" --lidar_frame "velodyne"

Convert PyTorch Model to older PyTorch Compatibility

Converion of the new model <path_to_model>/model.pth to old (compatible with < PyTorch1.3) <path_to_model>/model_py27.pth can be done with the following:

python scripts/convert_pytorch_models.py --checkpoint <path_to_model>/model

Note that there is no .pth ending in the script.

Time The Network

The execution time of the network can be timed using:

python scripts/time_network.py

Paper

Thank you for citing DeLORA (ICRA-2021) if you use any of this code.

@inproceedings{nubert2021self,
  title={Self-supervised Learning of LiDAR Odometry for Robotic Applications},
  author={Nubert, Julian and Khattak, Shehryar and Hutter, Marco},
  booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
  year={2021},
  organization={IEEE}
}

Dependencies

Dependencies are specified in ./conda/DeLORA-py3.9.yml and ./pip/requirements.txt.

Tuning

If the result does not achieve the desired performance, please have a look at the normal estimation, since the loss is usually dominated by the plane-to-plane loss, which is impacted by noisy normal estimates. For the results presented in the paper we picked some reasonable parameters without further fine-tuning, but we are convinced that less noisy normal estimates would lead to an even better convergence.

Owner
Robotic Systems Lab - Legged Robotics at ETH Zürich
The Robotic Systems Lab investigates the development of machines and their intelligence to operate in rough and challenging environments.
Robotic Systems Lab - Legged Robotics at ETH Zürich
Official implementation for the paper "Attentive Prototypes for Source-free Unsupervised Domain Adaptive 3D Object Detection"

Attentive Prototypes for Source-free Unsupervised Domain Adaptive 3D Object Detection PyTorch code release of the paper "Attentive Prototypes for Sour

Deepti Hegde 23 Oct 17, 2022
An Open-Source Package for Information Retrieval.

OpenMatch An Open-Source Package for Information Retrieval. 😃 What's New Top Spot on TREC-COVID Challenge (May 2020, Round2) The twin goals of the ch

THUNLP 439 Dec 27, 2022
DumpSMBShare - A script to dump files and folders remotely from a Windows SMB share

DumpSMBShare A script to dump files and folders remotely from a Windows SMB shar

Podalirius 178 Jan 06, 2023
YKKDetector For Python

YKKDetector OpenCVを利用した機械学習データをもとに、VRChatのスクリーンショットなどからYKKさん(もとい「幽狐族のお姉様」)を検出できるソフトウェアです。 マニュアル こちらから実行環境のセットアップから解説する詳細なマニュアルをご覧いただけます。 ライセンス 本ソフトウェア

あんふぃとらいと 5 Dec 07, 2021
Industrial knn-based anomaly detection for images. Visit streamlit link to check out the demo.

Industrial KNN-based Anomaly Detection ⭐ Now has streamlit support! ⭐ Run $ streamlit run streamlit_app.py This repo aims to reproduce the results of

aventau 102 Dec 26, 2022
Exploration of some patients clinical variables.

Answer_ALS_clinical_data Exploration of some patients clinical variables. All the clinical / metadata data is available here: https://data.answerals.o

1 Jan 20, 2022
Repo for the paper Extrapolating from a Single Image to a Thousand Classes using Distillation

Extrapolating from a Single Image to a Thousand Classes using Distillation by Yuki M. Asano* and Aaqib Saeed* (*Equal Contribution) Extrapolating from

Yuki M. Asano 16 Nov 04, 2022
Implementation of TimeSformer, a pure attention-based solution for video classification

TimeSformer - Pytorch Implementation of TimeSformer, a pure and simple attention-based solution for reaching SOTA on video classification.

Phil Wang 602 Jan 03, 2023
nanodet_plus,yolov5_v6.0

OAK_Detection OAK设备上适配nanodet_plus,yolov5_v6.0 Environment pytorch = 1.7.0

炼丹去了 1 Feb 18, 2022
Conflict-aware Inference of Python Compatible Runtime Environments with Domain Knowledge Graph, ICSE 2022

PyCRE Conflict-aware Inference of Python Compatible Runtime Environments with Domain Knowledge Graph, ICSE 2022 Dependencies This project is developed

<a href=[email protected]"> 7 May 06, 2022
Adaptive Denoising Training (ADT) for Recommendation.

DenoisingRec Adaptive Denoising Training for Recommendation. This is the pytorch implementation of our paper at WSDM 2021: Denoising Implicit Feedback

Wenjie Wang 51 Dec 30, 2022
[MedIA2021]MIDeepSeg: Minimally Interactive Segmentation of Unseen Objects from Medical Images Using Deep Learning

MIDeepSeg: Minimally Interactive Segmentation of Unseen Objects from Medical Images Using Deep Learning [MedIA or Arxiv] and [Demo] This repository pr

Healthcare Intelligence Laboratory 92 Dec 08, 2022
Single Image Super-Resolution (SISR) with SRResNet, EDSR and SRGAN

Single Image Super-Resolution (SISR) with SRResNet, EDSR and SRGAN Introduction Image super-resolution (SR) is the process of recovering high-resoluti

8 Apr 15, 2022
Model serving at scale

Run inference at scale Cortex is an open source platform for large-scale machine learning inference workloads. Workloads Realtime APIs - respond to pr

Cortex Labs 7.9k Jan 06, 2023
Official pytorch implementation of Active Learning for deep object detection via probabilistic modeling (ICCV 2021)

Active Learning for Deep Object Detection via Probabilistic Modeling This repository is the official PyTorch implementation of Active Learning for Dee

NVIDIA Research Projects 130 Jan 06, 2023
Implementation of "With a Little Help from my Temporal Context: Multimodal Egocentric Action Recognition, BMVC, 2021" in PyTorch

Multimodal Temporal Context Network (MTCN) This repository implements the model proposed in the paper: Evangelos Kazakos, Jaesung Huh, Arsha Nagrani,

Evangelos Kazakos 13 Nov 24, 2022
Depth image based mouse cursor visual haptic

Depth image based mouse cursor visual haptic How to run it. Install pyqt5. Install python modules pip install Pillow pip install numpy For illustrati

Xiong Jie 17 Dec 20, 2022
Rotation-Only Bundle Adjustment

ROBA: Rotation-Only Bundle Adjustment Paper, Video, Poster, Presentation, Supplementary Material In this repository, we provide the implementation of

Seong 51 Nov 29, 2022
Official Implementation for "ReStyle: A Residual-Based StyleGAN Encoder via Iterative Refinement" https://arxiv.org/abs/2104.02699

ReStyle: A Residual-Based StyleGAN Encoder via Iterative Refinement Recently, the power of unconditional image synthesis has significantly advanced th

967 Jan 04, 2023
Implementation for Curriculum DeepSDF

Curriculum-DeepSDF This repository is an implementation for Curriculum DeepSDF. Full paper is available here. Preparation Please follow original setti

Haidong Zhu 69 Dec 29, 2022