This repository contains the official implementation of Sparse Scene Flow (SSF), a scalable and efficient approach to long-range 3D scene flow estimation. By leveraging sparse convolutions, SSF overcomes the computational challenges of existing methods, enabling efficient scene flow estimation at distances beyond 50 meters.
🚀 What’s New in SSF?
✅ Sparse Feature Fusion: A novel approach to handle unordered sparse voxel features between consecutive point clouds.
✅ SSF Metric: A new range-wise evaluation metric that measures sensitivity of scene flow performance with respect to distance from ego-vehicle, prioritizing long-range points and addressing gaps in existing benchmarks.
SSF builds upon SeFlow. Follow its installation guide here.
Additional Dependencies:
Prepare the dataset following SeFlow’s instructions.
Train SSF using:
python 1_train.py model=ssf loss_fn=deflowLoss train_data=<PATH_TO_TRAIN_DATA> val_data=<PATH_TO_VAL_DATA>
💡 Tip: Set train_data
and val_data
in conf/config.yaml
for faster iteration. See assets/slurm/1_train.sh
for distributed training recipe.
Run inference using:
python 2_eval.py dataset_path=<PATH_TO_DATASET> checkpoint=<PATH_TO_CKPT> av2_mode=(val,test) save_res=(True,False)
💡 Tip: Modify conf/eval.yaml
for easier experimentation.
We introduce a new distance-based evaluation metric for scene flow estimation. Below is an example output for SSF, point_cloud_range=204.8
m, voxel_size=0.2
m
Distance | Static | Dynamic | NumPointsStatic | NumPointsDynamic |
---|---|---|---|---|
0-35 | 0.00836 | 0.11546 | 3.33e+08 | 1.57e+07 |
35-50 | 0.00910 | 0.16805 | 4.40e+07 | 703125 |
50-75 | 0.01107 | 0.20448 | 3.25e+07 | 395398 |
75-100 | 0.01472 | 0.24133 | 1.31e+07 | 145281 |
100-inf | 0.01970 | 0.30536 | 1.32e+07 | 171865 |
Mean | 0.01259 | 0.20693 | NaN | NaN |
Generate scene flow for visualization:
python 3_vis.py checkpoint=<PATH_TO_CKPT> dataset_path=<PATH_TO_DATASET>
💡 Tip: Modify params in conf/vis.yaml
for parameter tuning.
Visualize multiple scene flows side by side using vis_multiple()
. Pass a list of flows to --flow_mode
:
python tools/scene_flow.py --flow_mode <YOUR_FLOW_MODE> --data_dir <PATH_TO_DATASET>
By default the script calls vis()
which means single scene flow, and flow_mode
is set to 'flow'
which means ground truth flow.
If SSF is useful for your research, please cite our paper using:
@article{khoche2025ssf,
title={SSF: Sparse Long-Range Scene Flow for Autonomous Driving},
author={Khoche, Ajinkya and Zhang, Qingwen and Sanchez, Laura Pereira and Asefaw, Aron and Mansouri, Sina Sharif and Jensfelt, Patric},
journal={arXiv preprint arXiv:2501.17821},
year={2025}
}
Sincere thanks to:
- 👩🔬 Qingwen Zhang for her work on Seflow and her help with SSF metric and manuscript revision.
- 🔬 The authors of FSD for their valuable contributions to the field.
This work was supported by the research grant PROSENSE funded by VINNOVA. The computations were enabled by the supercomputing resource Berzelius provided by National Supercomputer Centre at Linköping University and the Knut and Alice Wallenberg Foundation, Sweden.