LIDO is a novel approach for 3D LiDAR anomaly segmentation that directly works on the feature space to distinguish between inlier known classes and anomalous objects, relying on a combination of training losses and inference scores to produce both semantic and anomaly segmentation. We also introduce three new mixed real-synthetic OoD datasets for 3D LiDAR anomaly segmentation, based on established autonomous driving benchmarks. We design a pipeline to insert and geometrically align synthetic 3D objects into real LiDAR scans, including realistic intensities computation.
- 2026-04-29: Code is released.
- 2026-02-21: LIDO is accepted to CVPR 2026.
Create an environment and install the required packages with pip install -r requirements.txt.
We also provide a pre-built singularity image for quick usage.
Please refer to INSTALL.md for further details and step-by-step guide to setup the environment.
Download STU dataset from the official webiste.
Download SemanticKITTI dataset from the official website.
Download SemanticPOSS dataset from the official website.
Download nuScenes dataset from the official website. Convert it into KITTI format using the script nuscenes2kitti.
Please refer to DATA.md for the details to prepare SemanticKITTI-OoD, SemanticPOSS-OoD and nuScenes-OoD datasets.
Run the following commands to train, specifying the dataset and log paths:
### SemanticKITTI
python train.py --dataset /path/to/semantickitti/ --data ./config/labels/semantic-kitti.yaml --config ./config/MinkowskiNet-semantickitti.yaml --log ./log/kitti [--fp16]
### nuScenes
python train.py --dataset /path/to/nuscenes/ --data ./config/labels/nuscenes.yaml --config ./config/MinkowskiNet-nuscenes.yaml --log ./log/nuscenes [--fp16]
### SemanticPOSS
python train.py --dataset /path/to/semanticposs/ --data ./config/labels/semantic-poss.yaml --config ./config/MinkowskiNet-poss.yaml --log ./log/poss [--fp16]Run the following scripts to infer on a specific dataset:
### STU
python infer.py --dataset /path/to/stu/ --data ./config/labels/stu.yaml --config ./config/MinkowskiNet-semantickitti.yaml --log /path/to/predictions --model /path/to/modeldir/ --split train/valid/test [--save] [--fp16]
### SemanticKITTI-OoD
python infer.py --dataset /path/to/kitti-ood/ --data ./config/labels/semantic-kitti.yaml --config ./config/MinkowskiNet-semantickitti.yaml --log /path/to/predictions --model /path/to/modeldir/ --split train/valid/test [--save] [--eval] [--fp16]
### nuScenes-OoD
python infer.py --dataset /path/to/nuscenes-ood/ --data ./config/labels/nuscenes.yaml --config ./config/MinkowskiNet-nuscenes.yaml --log /path/to/predictions --model /path/to/modeldir/ --split train/valid/test [--save] [--eval] [--fp16]
### SemanticPOSS-OoD
python infer.py --dataset /path/to/poss-ood/ --data ./config/labels/semantic-poss.yaml --config ./config/MinkowskiNet-semanticposs.yaml --log /path/to/predictions --model /path/to/modeldir/ --split train/valid/test [--save] [--eval] [--fp16]
### E.g. for STU and pretrained model
# python infer.py --dataset /STU_dataset/ --data ./config/labels/stu.yaml --config ./config/MinkowskiNet-semantickitti.yaml --log ./stu_preds --model /path/to/modeldir/ --split valid --save --fp16
### E.g. for SemanticKITTI-OoD (multi)
# python infer.py --dataset /kitti-ood-multi/ --data ./config/labels/semantic-kitti.yaml --config ./config/MinkowskiNet-semantickitti.yaml --log ./kitti_ood_preds --model /path/to/modeldir/ --split valid --save --fp16Specify the --save argument to save both semantic predictions and anomaly scores to the log path. Use --eval to run also the semantic segmentation evaluation (be aware that this works only for the proposed OoD datasets as STU does not provide full semantic labels for the validation and test splits).
To run the OoD evaluation we provide an adapted script from the official STU repo. For further details please refer to their original implementation.
python3 compute_point_level_ood.py --data-dir /ood-dataset/sequences/ --pred-dir /ood-predictions/
### E.g. for SemanticKITTI-OoD (multi)
# python3 compute_point_level_ood.py --data-dir /kitti-ood-multi/sequences/ --pred-dir /kitti-ood-predictions/Pretrained models are available on Hugging Face.
- Update README
- Release code
- Upload models
- Upload data
If you find our work useful please cite our paper:
@inproceedings{mosco2026learning,
title={Learning to Identify Out-of-Distribution Objects for 3D LiDAR Anomaly Segmentation},
author={Mosco, Simone and Fusaro, Daniel and Pretto, Alberto},
booktitle={IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year={2026}
}
Code is built upon TorchSparse, STU, ContMAV, RangeRet, 2DPASS.
