Official implementation of "Open-world semantic segmentation for Lidar Point Clouds", ECCV 2022. After saving the corresponding inference result files using this repository, please use semantic_kitti_api and nuScenes_api to evaluate the performance.
./
├──
├── ...
└── path_to_data_shown_in_config/
├──sequences
├── 00/
│ ├── velodyne/
| | ├── 000000.bin
| | ├── 000001.bin
| | └── ...
│ └── labels/
| ├── 000000.label
| ├── 000001.label
| └── ...
├── 08/ # for validation
├── 11/ # 11-21 for testing
└── 21/
└── ...
./
├── ...
├── v1.0-trainval
├── v1.0-test
├── samples
├── sweeps
├── maps
└── lidarseg/
├──v1.0-trainval/
├──v1.0-mini/
├──v1.0-test/
├──nuscenes_infos_train.pkl
├──nuscenes_infos_val.pkl
├──nuscenes_infos_test.pkl
└── panoptic/
├──v1.0-trainval/
├──v1.0-mini/
├──v1.0-test/
We provide the checkpoints of open-set model and incremental learning model here: checkpoints
All scripts for SemanticKITTI dataset is in ./semantickitti_scripts.
./train_naive.sh
./train_upper.sh
Change the path of pretrained naive model in /config/semantickitti_ood_basic.yaml, line 63.
Change the coefficient lamda_1 in /config/semantickitti_ood_basic.yaml, line 70.
Change the dummy classifier number in /train_cylinder_asym_ood_basic.py, line 198.
./train_ood_basic.sh
Change the path of pretrained naive model in /config/semantickitti_ood_final.yaml, line 63.
Change lamda_1, lamda_2 in /config/semantickitti_ood_final.yaml, line 70, 71.
Change the dummy classifier number in /train_cylinder_asym_ood_final.py, line 198.
./train_ood_final.sh
./train_dropout.sh
We save the in-distribution prediction labels and uncertainty scores for every points in the validation set, and these files will be used to calculate the closed-set mIoU and open-set metrics including AUPR, AURPC, and FPR95.
Change the trained model path (Naive method) in /config/semantickitti.yaml, line 63.
Change the saving path of in-distribution prediction results and uncertainty scores in val_cylinder_asym.py, line 112, 114, 116.
./val.sh
Change the trained model path (Placeholder method) in /config/semantickitti.yaml, line 63.
Change the saving path of in-distribution prediction results and uncertainty scores in val_cylinder_asym_upper.py, line 115, 117.
./val_upper.sh
Change the trained model path (Placeholder method) in /config/semantickitti_ood_final.yaml, line 63.
Change the saving path of in-distribution prediction results and uncertainty scores in val_cylinder_asym_ood.py, line 124, 125.
./val_ood.sh
./val_dropout.sh
All scripts for nuScenes dataset are in ./nuScenes_scripts
./train_nusc_naive.sh
./train_nusc.sh
Change the path of pretrained naive model in /config/nuScenes_ood_basic.yaml, line 63.
Change the coefficient lamda_1 in /config/nuScenes_ood_basic.yaml, line 70.
Change the dummy classifier number in /train_cylinder_asym_nuscenes_ood_basic.py, line 197.
./train_nusc_ood_basic.sh
Change the path of pretrained naive model in /config/nuScenes_ood_final.yaml, line 63.
Change lamda_1, lamda_2 in /config/nuScenes_ood_final.yaml, line 70, 71.
Change the dummy classifier number in /train_cylinder_asym_nuscenes_ood_final.py, line 197.
./train_nusc_ood_final.sh
./train_nusc_dropout.sh
Change the trained model path (Naive method) in /config/nuScenes.yaml, line 63.
Change the saving path of in-distribution prediction results and uncertainty scores in val_cylinder_asym_nusc.py, line 112, 114, 116.
./val_nusc.sh
Change the trained model path (Naive method) in /config/nuScenes.yaml, line 63.
Change the saving path of in-distribution prediction results and uncertainty scores in val_cylinder_asym_nusc_upper.py, line 121, 123.
./val_nusc_upper.sh
Change the trained model path (Placeholder method) in /config/nuScenes_ood_final.yaml, line 63.
Change the saving path of in-distribution prediction results and uncertainty scores in val_cylinder_asym_nusc_ood.py, line 125, 126.
./val_nusc_ood.sh
./val_nusc_dropout.sh
All scripts for SemanticKITTI dataset is in ./semantickitti_scripts.
First, use the trained base model to generate and save the pseudo labels of the training set:
./val_generate_incre_labels.sh
/config/semantickitti_ood_generate_incre_labels.yaml, line 63.val_cylinder_asym_generate_incre_labels.py, line 116.Then, change the loading path of pseudo labels in /dataloader/pc_dataset.py, line 177.
Now, conduct incremental learing using pseudo labels:
./train_incre.sh
/config/semantickitti_ood_incre.yaml, line 63.For validation set:
./val_incre.sh
For test set:
./test_incre.sh
collate_fn=collate_fn_BEV_val_test in /builder/data_builder.py, line 70./dataloader/pc_dataset.py, line 95.All scripts for nuScenes dataset are in ./nuScenes_scripts.
First, generate and save the pseudo labels of the training set:
./val_nusc_generate_incre_labels.sh
/config/nuScenes_ood_generate_incre_labels.yaml, line 63.val_cylinder_asym_nusc_generate_incre_labels.py, line 120.Then, change the loading path of pseudo labels in /dataloader/pc_dataset.py, line 266.
Now, conduct incremental learing using pseudo labels:
./train_nusc_incre.sh
First, generate and save the pseudo labels of the training set:
./val_nusc_generate_incre_labels.sh
val_cylinder_asym_nusc_generate_incre_labels.py into
val_cylinder_asym_nusc_generate_incre_labels_1.py.val_cylinder_asym_nusc_generate_incre_labels_1.py, line 153.Then, change the loading path of pseudo labels in /dataloader/pc_dataset.py, line 266.
Now, conduct incremental learing using pseudo labels:
./train_nusc_incre.sh
/config/nuScenes_ood_incre.yaml, line 63.For validation set:
./val_incre.sh
For test set:
- Change the NuScenes version from nusc = NuScenes(version='v1.0-trainval', dataroot=data_path, verbose=True)
to nusc = NuScenes(version='v1.0-test', dataroot=data_path, verbose=True)
./test_incre.sh
Then upload the generated files into the evaluation server.
$ claude mcp add Open-world-3D-semantic-segmentation \
-- python -m otcore.mcp_server <graph>