Da Li1,2†, Chang Ma2†, and Dongfu Yin1*
1Guangdong Laboratory of Artificial Intelligence and Digital Economy (Shenzhen), Shenzhen, China
2Shenzhen University, Shenzhen, China
†Equal contribution. *Corresponding author.
li944104439@gmail.com; 2510235035@mails.szu.edu.cn; yindongfu@gml.ac.cn
Official implementation and checkpoints for PSFT on point-cloud corruption benchmarks.
The released checkpoints are hosted on Hugging Face. Each checkpoint contains the classifier model and point-selection model used by test_ps.py.
ModelNet-C and ModelNet40-C share the same checkpoints. Use the ModelNet-C checkpoint files for both ModelNet-C and ModelNet40-C evaluation.
| Dataset | Backbone | Method | Augmentation | Download |
|---|---|---|---|---|
ModelNet-C / ModelNet40-C |
Point-BERT |
PSFT | None | Link |
ModelNet-C / ModelNet40-C |
Point-BERT |
PSFT + Aug. | WOLFMix | Link |
ModelNet-C / ModelNet40-C |
Point-MAE |
PSFT | None | Link |
ModelNet-C / ModelNet40-C |
Point-MAE |
PSFT + Aug. | WOLFMix | Link |
ModelNet-C / ModelNet40-C |
ULIP-2 |
PSFT | None | Link |
ModelNet-C / ModelNet40-C |
ULIP-2 |
PSFT + Aug. | WOLFMix | Link |
ModelNet-C / ModelNet40-C |
Uni3d-B |
PSFT | None | Link |
ModelNet-C / ModelNet40-C |
Uni3d-B |
PSFT + Aug. | WOLFMix | Link |
ScanObjectNN-C |
Point-BERT |
PSFT | None | Link |
ScanObjectNN-C |
Point-BERT |
PSFT + Aug. | WOLFMix | Link |
ScanObjectNN-C |
Point-MAE |
PSFT | None | Link |
ScanObjectNN-C |
Point-MAE |
PSFT + Aug. | WOLFMix | Link |
ScanObjectNN-C |
ULIP-2 |
PSFT | None | Link |
ScanObjectNN-C |
ULIP-2 |
PSFT + Aug. | WOLFMix | Link |
ScanObjectNN-C |
Uni3d-B |
PSFT | None | Link |
ScanObjectNN-C |
Uni3d-B |
PSFT + Aug. | WOLFMix | Link |
You can download all released checkpoints with:
pip install huggingface_hub
huggingface-cli download SZUChangMa/PSFT \
--local-dir ckpts/PSFT \
--include "ModelNet-C/*.pt" "ScanObjectNN-C/*.pt"Download the clean training data and corrupted test data from Hugging Face.
| Dataset | Classes | Training data | Corrupted test data | Checkpoint |
|---|---|---|---|---|
ModelNet-C |
40 | Download | Download | ModelNet-C ckpt |
ModelNet40-C |
40 | Download | Download | reuse ModelNet-C ckpt |
ScanObjectNN-C |
15 | Download | Download | ScanObjectNN-C ckpt |
First, clone this repository and install the dependencies:
git clone <this-repo-url>
cd PSFT-master
pip install torch torchvision torchaudio
pip install numpy h5py scikit-learn timm pyyaml huggingface_hub
pip install "git+git://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"
pip install utils/KNN_CUDA-0.2-py3-none-any.whlDownload the original backbone checkpoints required by utils/model.py and place them under data_inputs/pretrained/:
| Backbone | Pretrained checkpoint |
|---|---|
Point-BERT |
Point-BERT.pth |
Point-MAE |
Point-MAE.pth |
ULIP-2 |
pretrained_models_ckpt_zero-shot_classification_pointbert_ULIP-2.pt |
Uni3d-B |
Pretrianed_Uni3d_B_Ensembled.pt |
Then evaluate a PSFT checkpoint:
CUDA_VISIBLE_DEVICES=0 python test_ps.py \
--model_path ckpts/PSFT/ModelNet-C/Train-PS-Point-BERT-PG-ModelNet-C-add_FFM-Augmentation%3ANone-train_alpha%3A0.5_epoch_300.pt \
--model_name Point-BERT \
--train_mode PG \
--add_FFM \
ModelNet-CReplace --model_path with the actual downloaded checkpoint path, replace --model_name with the matching backbone in the checkpoint name, and replace the final dataset argument with one of:
ModelNet-C
ModelNet40-C
ScanObjectNN-C
For ModelNet40-C, keep using a checkpoint from the ModelNet-C folder and only change the final dataset argument:
CUDA_VISIBLE_DEVICES=0 python test_ps.py \
--model_path ckpts/PSFT/ModelNet-C/Train-PS-Point-BERT-PG-ModelNet-C-add_FFM-Augmentation%3ANone-train_alpha%3A0.5_epoch_300.pt \
--model_name Point-BERT \
--train_mode PG \
--add_FFM \
ModelNet40-CIf your data is stored elsewhere, pass dataset-specific paths after the dataset name:
CUDA_VISIBLE_DEVICES=0 python test_ps.py \
--model_path ckpts/PSFT/ScanObjectNN-C/Train-PS-Uni3d-B-PG-ScanObjectNN-C-add_FFM-Augmentation%3AWOLFMix-train_alpha%3A0.5_epoch_300.pt \
--model_name Uni3d-B \
--train_mode PG \
--add_FFM \
ScanObjectNN-C \
--test_dir /path/to/scanobjectnn_cPSFT training uses distributed training through torchrun. For example:
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node=1 train_ps.py \
--model_name Point-BERT \
--train_mode PG \
--add_FFM \
ModelNet-CAdd WOLFMix augmentation with:
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node=1 train_ps.py \
--model_name Point-BERT \
--train_mode PG \
--add_FFM \
--add_WOLFMix \
ModelNet-CThe released checkpoints are distributed under the MIT license on Hugging Face. Please also check the license terms of the original datasets and backbone checkpoints before use.
If you find this work useful, please cite the paper:
@misc{arxiv2607.19711,
title = {Point-Selection Fine-Tuning Framework for Robust Point Cloud Classification},
author = {Da Li, Chang Ma, and Dongfu Yin},
year = {2026},
url = {https://arxiv.org/abs/2607.19711}
}