Giter Club home page Giter Club logo

icp-flow's Introduction

ICP-Flow: LiDAR Scene Flow Estimation with ICP

Official implementation: ICP-Flow: LiDAR Scene Flow Estimation with ICP (CVPR 2024)

Yancong Lin and Holger Caesar.

Delft University of Technology, The Netherlands.

Winner of the Argoverse 2 Scene Flow challenge (unsupervised track).

Introduction

Scene flow characterizes the 3D motion between two LiDAR scans captured by an autonomous vehicle at nearby timesteps. Prevalent methods consider scene flow as point-wise unconstrained flow vectors that can be learned by either large-scale training beforehand or time-consuming optimization at inference. However, these methods do not take into account that objects in autonomous driving often move rigidly. We incorporate this rigid-motion assumption into our design, where the goal is to associate objects over scans and then estimate the locally rigid transformations. We propose ICP-Flow, a learning-free flow estimator. The core of our design is the conventional Iterative Closest Point (ICP) algorithm, which aligns the objects over time and outputs the corresponding rigid transformations. Crucially, to aid ICP, we propose a histogram-based initialization that discovers the most likely translation, thus providing a good starting point for ICP. The complete scene flow is then recovered from the rigid transformations. We outperform state-of-the-art baselines, including supervised models, on the Waymo dataset and perform competitively on Argoverse-v2 and nuScenes. Further, we train a feedforward neural network, supervised by the pseudo labels from our model, and achieve top performance among all models capable of real-time inference. We validate the advantage of our model on scene flow estimation with longer temporal gaps, up to 0.4 seconds where other models fail to deliver meaningful results.

Main feature

Ground Segmentation + Clustering + Iterative Closest Point (ICP)

Reproduction

Bug fix:

A bug fixed on 01-05-2024; tested locally.

Installation

  1. Conda env setup.
conda create -f environment.yml
conda activate icp_flow
  1. Install Patchwork++ for ground segmentation.

There are several modifications on top of the original Patchwork++ to output point indices.

# To install Eigen
$ sudo apt-get install libeigen3-dev

# To install Patchwork++
$ cd patchwork-plusplus
$ mkdir build && cd build
$ cmake ..
$ make

Note: This version requires a GPU. The CPU-only version has not been released yet.

Dataset

  1. Waymo and nuScenes: see Dynamic 3D Scene Analysis by Point Cloud Accumulation for details.
wget --no-check-certificate --show-progress https://share.phys.ethz.ch/~gsg/PCAccumulation/data.zip
unzip data.zip
  1. Argoverse-v2: see ZeroFlow: Scalable Scene Flow via Distillation for details.

    For simplicity, I took a different approach to load data: run ZeroFlow on the val/test set, and then save the points/labels in a .npz file per sample. See dataset_argo.py for details.

    Alternatively, you may also load pretrained checkpoints (see below) to ZeroFlow and test on Argoverse-v2 using the ZeroFlow codebase.

Test ICP-Flow

Configure all variables beforehand within the *.sh files. You may find all results at SURFdrive.

bash main.sh

ICP-Flow + FNN

ICP-Flow + FNN has an identical design to ZeroFlow. You may download pre-trained weights from SURFdrive.

Demo

bash demo.sh

Argoverse-v2 Scene Flow Challenge

Please refer to the leaderboard.

Acknowledge

Many thanks to the authors of ZeroFlow and Point Cloud Accumulation.

Citation

@article{lin2024icp,
  title={ICP-Flow: LiDAR Scene Flow Estimation with ICP},
  author={Lin, Yancong and Caesar, Holger},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2024}
}

icp-flow's People

Contributors

yanconglin avatar

Stargazers

Pengyu Yin avatar  avatar Ken Kameoka avatar  avatar Kwonyoung Ryu avatar ucasqcz avatar Atticus Zhou avatar Ramana Kiran avatar davci avatar  avatar PSYZ1666 avatar  avatar  avatar DeepPhysicVision avatar Ling Dai avatar  avatar  avatar Leeez avatar Zhaoyi Wang avatar Ruixiang Zhang avatar Javier Araluce avatar hak-kyoung.kim avatar Enes Cingöz avatar xiaoxuesheng avatar Remco Roozendaal avatar pyhan avatar  avatar Eresian avatar Zhiheng Li avatar Xiaoliang Jiao avatar Juwon Kim avatar  avatar pascal-maker avatar Oussama avatar NEU-Junshun avatar xyz avatar Yining Shi avatar Santi Montiel avatar Gilhwan Kang avatar Ajinkya Khoche avatar Jun-Jun Wan avatar Zihong Yan avatar Wangchao_Yu avatar Soyeong Kim avatar Sukrit Gupta avatar INGU Choi avatar  avatar Matthew avatar 赵焕峰 avatar zzh avatar Seungjae Lee avatar  avatar Sanghyun Park avatar Zhihao Zhan avatar  avatar Saad Shahid avatar  avatar chengwei avatar  avatar TaeYoung Kim avatar Yue Pan  avatar Bjarne Johannsen avatar

Watchers

Xiaoliang Jiao avatar ucasqcz avatar  avatar pyhan avatar TaeYoung Kim avatar  avatar

Forkers

kazama-yusei

icp-flow's Issues

Which model is used for FNN

Thanks a lot for sharing that great work! I have a question, I know that you used ZeroFlow for the FNN.

Could you please share which config file in ZeroFlow repo did you use and how to load your pretrained checkpoints ?

GPU memory overflows: when batch size is large!

Hi, When I was running main.py, the application stuck, and then I located the problem "from utils_track import track",Locate further to
# bug there: when batch size is large!
t_hist = hist(dst, src,
bins_x.min(), bins_y.min(), bins_z.min(),
bins_x.max(), bins_y.max(), bins_z.max(),
len(bins_x), len(bins_y), len(bins_z))

How did you solve the problem? Looking forward to your reply!

About visualization

Hi, I used metrics_waymo_test_240421-140450/npz for the visualization, but I got an error. Then I printed the information inside and found that it was inconsistent with the information in demo.npz. May I ask how did you generate the file demo.npz? The saved result after I conducted main.sh reasoning with waymo and nuscenes was inconsistent with the content of demo.npz you provided. Looking forward to your reply!

Inference on my dataset

Hi, thank you for your work and for making it available for use. I would be really interested in using your method for flow estimation on a personal dataset, but I can't really grasp what kind of preprocesing you did on the public datasets. I understand that you need to remove ground point and correct ego motion, but I don't get if you are using other annotations or stuff for testing: I would be really grateful if you can give an hint on what else would I need a part from these "cleaned" pointclouds and if I can effectively run this method on another dataset. Thank you for your help!

data preprocessing

Thanks for your open source work! How do you process the nuscenes and waymo datasets into a data format that can be trained and tested.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.