SalsaNext: Fast, Uncertainty-aware Semantic Segmentation of LiDAR Point Clouds for Autonomous Driving
In this paper, we introduce SalsaNext for the uncertainty-aware semantic segmentation of a full 3D LiDAR point cloud in real-time. SalsaNext is the next version of SalsaNet which has an encoder-decoder architecture where the encoder unit has a set of ResNet blocks and the decoder part combines upsampled features from the residual blocks. In contrast to SalsaNet, we introduce a new context module, replace the ResNet encoder blocks with a new residual dilated convolution stack with gradually increasing receptive fields and add the pixel-shuffle layer in the decoder. Additionally, we switch from stride convolution to average pooling and also apply central dropout treatment. To directly optimize the Jaccard index, we further combine the weighted cross-entropy loss with Lovasz-Softmax loss . We finally inject a Bayesian treatment to compute the epistemic and aleatoric uncertainties for each point in the cloud. We provide a thorough quantitative evaluation on the Semantic-KITTI dataset, which demonstrates that the proposed SalsaNext outperforms other state-of-the-art semantic segmentation.
The up-to-date scores can be found in the Semantic-Kitti page.
First create the anaconda env with:
conda env create -f salsanext_cuda10.yml --name salsanext
then activate the environment with conda activate salsanext
.
To train/eval you can use the following scripts:
- Training script (you might need to chmod +x the file)
- We have the following options:
-d [String]
: Path to the dataset-a [String]
: Path to the Architecture configuration file-l [String]
: Path to the main log folder-n [String]
: additional name for the experiment-c [String]
: GPUs to use (defaultno gpu
)-u [String]
: If you want to train an Uncertainty version of SalsaNext (defaultfalse
) [Experimental: tests done so with uncertainty far used pretrained SalsaNext with Deep Uncertainty Estimation]
- For example if you have the dataset at
/dataset
the architecture config file in/salsanext.yml
and you want to save your logs to/logs
to train "salsanext" with 2 GPUs with id 3 and 4:./train.sh -d /dataset -a /salsanext.yml -m salsanext -l /logs -c 3,4
- We have the following options:
- Eval script (you might need to chmod +x the file)
- We have the following options:
-d [String]
: Path to the dataset-p [String]
: Path to save label predictions-m [String]
: Path to the location of saved model-s [String]
: Eval on Validation or Train (standard eval on both separately)-u [String]
: If you want to infer using an Uncertainty model (defaultfalse
)-c [Int]
: Number of MC sampling to do (default30
)
- If you want to infer&evaluate a model that you saved to
/salsanext/logs/[the desired run]
and you want to infer$eval only the validation and save the label prediction to/pred
:./eval.sh -d /dataset -p /pred -m /salsanext/logs/[the desired run] -s validation -n salsanext
- We have the following options:
We based our code on RangeNet++, please go show some support!
@misc{cortinhal2020salsanext,
title={SalsaNext: Fast, Uncertainty-aware Semantic Segmentation of LiDAR Point Clouds for Autonomous Driving},
author={Tiago Cortinhal and George Tzelepis and Eren Erdal Aksoy},
year={2020},
eprint={2003.03653},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
./train.sh -d /home/ws/src/labelling_node/src/dataset -a /salsanext.yml -m salsanext -l /logs -c 3,4
./train.sh -d /home/marius/ws/src/labelling_node/src/training_dataset -a salsanext_industrial.yml -l /logs
OMP: Info #250: KMP_AFFINITY: pid 4191576 tid 4191576 thread 0 bound to OS proc set 0-11
(salsanext09) marius@marius-OptiPlex-7060:~/Development/SalsaNext$ ./train.sh -d /home/marius/ws/src/labelling_node/src/training_dataset -a salsanext_industrial.yml -l logs