Papers › ICP-Flow: LiDAR Scene Flow Estimation with ICP

ICP-Flow: LiDAR Scene Flow Estimation with ICP

27 Feb 2024CVPR 2024 1arXiv:2402.17351archive 2025-07-28

Yancong Lin, Holger Caesar

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.

PaperPDFConference PDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2402.17351")

Code

Syntology Ran 8 of 9 code samples harvested from 1 repository linked to this paper; 1 has no recorded run. Of those that ran: 8 ran with no contract checked.

By repository: official repository: 9 samples from 1 repository, 8 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

yanconglin/icp-flow officialmentioned in papermentioned on GitHubpytorchApache-2.0 report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

9 samples harvested; 8 ran; 0 honoured the contract we drafted; 1 has no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

8ran
1unverified

Licence: 0 of the 9 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from yanconglin/icp-flow. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

average_meter yanconglin/icp-flow/utils_eval.py official repository ran Apache-2.0 (permissive) · 0bff81ed145208e2 · report
check_transformation yanconglin/icp-flow/utils_check.py official repository ran Apache-2.0 (permissive) · e586d5d665de3dd8 · report
collate yanconglin/icp-flow/dataset_argo.py official repository ran fingerprinted Apache-2.0 (permissive) · c749ef089e2a88e0 · report
compute_epe_test yanconglin/icp-flow/utils_eval.py official repository ran Apache-2.0 (permissive) · 6caba5bd811fe4ac · report
crop_data yanconglin/icp-flow/utils_eval.py official repository ran Apache-2.0 (permissive) · d9c2e38d130fd158 · report
nearest_neighbor yanconglin/icp-flow/utils_helper.py official repository ran fingerprinted Apache-2.0 (permissive) · 909bc990df90a728 · report
segment_ground_thres yanconglin/icp-flow/utils_ground.py official repository ran Apache-2.0 (permissive) · 4d87bd7e643b9d38 · report
trackers2labels yanconglin/icp-flow/utils_helper.py official repository ran Apache-2.0 (permissive) · 2ac6524283b416eb · report
segment_ground yanconglin/icp-flow/utils_ground.py official repository unverified Apache-2.0 (permissive) · 83e559ee9409f049 · report

Tasks

Autonomous DrivingScene Flow EstimationSelf-supervised Scene Flow Estimation

Results from the paper archive 2025-07-28

TaskDatasetModelMetricValueRank at snapshotLeaderboardReport
Self-supervised Scene Flow Estimation Argoverse 2 ICPFlow EPE 3-Way 0.065049 #4 of 6 Archive leaderboard report
Self-supervised Scene Flow Estimation Argoverse 2 ICPFlow EPE Background Static 0.024981 #4 of 6 Archive leaderboard report
Self-supervised Scene Flow Estimation Argoverse 2 ICPFlow EPE Foreground Dynamic 0.136922 #4 of 6 Archive leaderboard report
Self-supervised Scene Flow Estimation Argoverse 2 ICPFlow EPE Foreground Static 0.033245 #4 of 6 Archive leaderboard report

Ranks are positions in the archive's leaderboards as they stood at the 2025-07-28 snapshot. Results published since then are not among these rows, so a rank here is not a current standing.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections