Skip to content

astra-vision/LiDPM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiDPM: Rethinking Point Diffusion for Lidar Scene Completion

Paper Conference Project WebPage

This is the official repository for the paper

LiDPM: Rethinking Point Diffusion for Lidar Scene Completion
Tetiana Martyniuk, Gilles Puy, Alexandre Boulch, Renaud Marlet, Raoul de Charette
IEEE IV 2025

Updates:

  • 15/07/2025: SemanticKITTI validation set results updated (see Evaluation).
  • 10/07/2025: inference scripts updated.
  • 25/06/2025: training and inference code released.

Table of Contents

Installation

The code uses Python 3.7.

Create a Conda virtual environment:

conda create --name lidpm python=3.7
conda activate lidpm

Clone the project and install requirements:

git clone https://github.com/astra-vision/LiDPM
cd LiDPM

sudo apt install build-essential libopenblas-dev
pip install -r requirements.txt

# Install Minkowski Engine
export TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
pip install -U git+https://github.com/NVIDIA/MinkowskiEngine --install-option="--blas=openblas" --install-option="--force_cuda" -v --no-deps

SemanticKITTI Dataset

The SemanticKITTI dataset has to be downloaded from the official webpage and extracted in the following structure:

SemanticKITTI
    └── dataset
        └── sequences
            ├── 00/
            │   ├── velodyne/
            |   |       ├── 000000.bin
            |   |       ├── 000001.bin
            |   |       └── ...
            │   └── labels/
            |       ├── 000000.label
            |       ├── 000001.label
            |       └── ...
            ├── ...
            ├── 08/ # for validation
            ├── ...
            ├── 11/ # 11-21 for testing
            ├── ...
            └── 21/
                └── ...

Ground truth generation

To generate the complete scenes, run the map_from_scans.py script. This uses the dataset scans and poses to generate sequence maps, which serve as ground truth during training.

Specify the SemanticKITTI path and the output path in the corresponding config file.

cd lidpm/scripts
python map_from_scans.py configs/map_from_scans.yaml

Training the model

To train the diffusion model, the configurations are defined in config/train.yaml, and the training can be started with:

cd lidpm
python train.py --config config/train.yaml

Don't forget to specify the data_dir and gt_map_dir in the config file.

The model was trained on 4 NVIDIA A100 GPUs for 40 epochs.

Model Weights

The pre-trained model checkpoint can be downloaded from the GitHub release.

Inference

To complete the lidar scans, run

cd lidpm/scripts
python inference.py configs/inference.yaml

In the corresponding config you should specify the path to the diffusion checkpoint, dataset path, and output folder, and decide if you want to run inference on a particular sequence or over the list of predefined pointclouds (configured in canonical_minival_filename).

DPM-Solver

In order to speed up inference, we follow LiDiff and employ DPM-Solver. To complete the lidar scans using DPM-Solver, run

cd lidpm/scripts
python inference_dpmSolver.py configs/inference_dpmSolver.yaml

The number of DPM-Solver steps is configured via denoising_steps, and the corresponding number of diffusion steps is set via starting_point. For insights into these parameters, refer to Table 2 ("Ablation studies") in the paper. By default, we use denoising_steps=20 and starting_point=300, as suggested by our ablation.

Evaluation

For evaluation on SemanticKITTI, we follow the protocol from LiDiff. The results are obtained using the LiDPM model checkpoint (see Model Weights) and DPM-Solver inference (20 steps). To report "LiDPM (refined)" results, we use the off-the-shelf LiDiff refinement network.

Updated Table 1 (SemanticKITTI validation set)

Below are the evaluation results on the SemanticKITTI validation set, based on the updated LiDiff metrics code and incorporating the revised values.

Method Output JSD 3D ↓ JSD BEV ↓ Voxel IoU (m) ↑ CD ↓
0.5 0.2 0.1
LMSCNet Voxel - 0.431 30.83 12.09 3.65 0.641
LODE Surface - 0.451 33.81 16.39 5.0 1.029
MID Surface - 0.470 31.58 22.72 13.14 0.503
PVD Points - 0.498 15.91 3.97 0.6 1.256
LiDiff (diffusion-only) Points 0.564 0.444 31.47 16.79 4.67 0.434
LiDPM (diffusion-only) Points 0.532 0.440 34.09 19.45 6.27 0.446
LiDiff (refined) Points 0.573 0.416 32.43 22.99 13.40 0.376
LiDPM (refined) Points 0.542 0.403 36.59 25.76 14.93 0.377

Citation

If you build upon LiDPM paper or code, please cite our paper:

@INPROCEEDINGS{martyniuk2025lidpm,
  author={Martyniuk, Tetiana and Puy, Gilles and Boulch, Alexandre and Marlet, Renaud and de Charette, Raoul},
  booktitle={2025 IEEE Intelligent Vehicles Symposium (IV)}, 
  title={LiDPM: Rethinking Point Diffusion for Lidar Scene Completion}, 
  year={2025},
  volume={},
  number={},
  pages={555-560},
  doi={10.1109/IV64158.2025.11097538}
}

License

This project is licensed under the Apache License 2.0.

Acknowledgments

This code is developed upon the LiDiff codebase. We modify it to depart from the "local" diffusion paradigm to the "global" one presented in LiDPM paper. We thank the authors of LiDiff for making their work publicly available.