Sncf mls dataset
Closes #498
- [x] Add SparseUNet config
- [x] Add example usage to README for sparseUNet
- [x] Add strength as input channel
- [x] Add PointTransformer V3 config
- [x] Add example usage for PT-V3
Usage
Install requirement:
pip install open3d laspy
SparseUNet
Preprocess dataset:
The preprocessing code breaks up the original pointclouds into 15x15m tiles as my pc only has a single 6GB gpu.
python pointcept/datasets/preprocessing/sncf_mls/preprocess_sncf_mls.py --dataset_root data/sncf_mls --output_root data/sncf_mls --tile_size 15 --overlap 2
Train
sh scripts/train.sh -d sncf_mls -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
Trained using NVIDIA RTX A3000 6GB Epochs: 50
Quantitative Results:
[2025-08-27 17:17:46,780 INFO test.py line 340 193] Val result: mIoU/mAcc/allAcc 0.5959/0.6642/0.9552
[2025-08-27 17:17:46,781 INFO test.py line 346 193] Class_0 - ground Result: iou/accuracy 0.8898/0.9242
[2025-08-27 17:17:46,781 INFO test.py line 346 193] Class_1 - vegetation Result: iou/accuracy 0.9439/0.9812
[2025-08-27 17:17:46,781 INFO test.py line 346 193] Class_2 - rail Result: iou/accuracy 0.6563/0.8484
[2025-08-27 17:17:46,781 INFO test.py line 346 193] Class_3 - poles Result: iou/accuracy 0.6053/0.6328
[2025-08-27 17:17:46,782 INFO test.py line 346 193] Class_4 - wires Result: iou/accuracy 0.8606/0.9633
[2025-08-27 17:17:46,782 INFO test.py line 346 193] Class_5 - signalling Result: iou/accuracy 0.0000/0.0000
[2025-08-27 17:17:46,782 INFO test.py line 346 193] Class_6 - fences Result: iou/accuracy 0.7931/0.9294
[2025-08-27 17:17:46,782 INFO test.py line 346 193] Class_7 - installation Result: iou/accuracy 0.0179/0.0343
Qualitative Results:
Below is a side-by-side visualization comparing the ground truth annotations with the predicted point cloud classes:
Left: Annotated PointCloud (ground truth)
Right: Predicted PointCloud (model output)
PointTransformer V3
Preprocess dataset:
The preprocessing code breaks up the original pointclouds into 10x10m tiles as my pc only has a single 6GB gpu.
python pointcept/datasets/preprocessing/sncf_mls/preprocess_sncf_mls.py --dataset_root data/sncf_mls --output_root data/sncf_mls --tile_size 10 --overlap 1
Train
sh scripts/train.sh -d sncf_mls -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
Trained using NVIDIA RTX A3000 6GB Epochs: 50
Quantitative Results:
[2025-08-31 04:56:56,692 INFO test.py line 340 1617] Val result: mIoU/mAcc/allAcc 0.7427/0.7728/0.9511
[2025-08-31 04:56:56,692 INFO test.py line 346 1617] Class_0 - ground Result: iou/accuracy 0.8742/0.9143
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_1 - vegetation Result: iou/accuracy 0.9427/0.9887
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_2 - rail Result: iou/accuracy 0.5428/0.6366
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_3 - poles Result: iou/accuracy 0.7109/0.7289
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_4 - wires Result: iou/accuracy 0.6817/0.6920
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_5 - signalling Result: iou/accuracy 0.9025/0.9118
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_6 - fences Result: iou/accuracy 0.9712/0.9831
[2025-08-31 04:56:56,693 INFO test.py line 346 1617] Class_7 - installation Result: iou/accuracy 0.3159/0.3270
Qualitative Results:
Below is a side-by-side visualization comparing the ground truth annotations with the predicted point cloud classes:
Left: Annotated PointCloud (ground truth)
Right: Predicted PointCloud (model output)
Keeping it as draft for the moment still validating the updated pipeline :)
ping @Yangsenqiao
Thanks for your contribution. I will review this PR next week.