point2vec
포인트 클라우드에서의 자기 지도 표현 학습 (Self-Supervised Representation Learning on Point Clouds)
[Paper] [Project] [BibTeX]
architecture
설치 (Installation)
1. 의존성 (Dependencies)
- Python 3.10.4
- CUDA 11.6
- cuDNN 8.4.0
- GCC >= 6 and <= 11.2.1
pip install -U pip wheel
pip install torch torchvision -c requirements.txt --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt
2. 데이터셋 (Datasets)
다운로드 지침은 DATASETS.md를 참조하십시오.
3. 확인 (Check) (선택 사항)
python -m point2vec.datasets.process.check
./scripts/test.sh
모델 동물원 (Model Zoo)
| 유형 (Type) | 데이터셋 (Dataset) | 평가 (Evaluation) | 설정 (Config) | 체크포인트 (Checkpoint) |
|---|
| point2vec 사전 학습됨 (pre-trained) | ShapeNet | - | config | checkpoint |
| ... | | | | |
논문 결과 재현 (Reproducing the results from the paper)
이 섹션의 스크립트는 로깅을 위해 Weights & Biases를 사용하므로, 실행하기 전에 wandb login으로 한 번 로그인하는 것이 중요합니다. 체크포인트는 artifacts 디렉토리에 저장됩니다.
재현성(Reproducibility)에 대한 참고 사항:
대부분의 데이터셋에서 저희 결과를 재현하는 것은 비교적 간단하지만, ModelNet40에서 동일한 테스트 정확도를 달성하기는 실행 간 높은 분산(high variance) 때문에 더 복잡합니다 (또한 https://github.com/Pang-Yatian/Point-MAE/issues/5#issuecomment-1074886349, https://github.com/ma-xu/pointMLP-pytorch/issues/1#issuecomment-1062563404, https://github.com/CVMI-Lab/PAConv/issues/9#issuecomment-886612074를 참조하십시오).
ModelNet40에서 비교 가능한 결과를 얻으려면 몇 가지 다른 시드(seed)로 실험해야 할 가능성이 높습니다.
하지만 CUDA 11.6, cuDNN 8.4.0, Python 3.10.4 및 requirements.txt 파일에 나열된 종속성(dependencies)을 설치하고 Volta GPU(예: Nvidia V100)를 사용하는 등 저희의 정확한 환경을 재현할 수 있다면, 저희 실험을 정확하게 재현할 수 있어야 합니다.
훈련 중에 동일한 난수 상태(random state)를 얻으려면 저희의 정확한 환경 사용이 필수적입니다. 왜냐하면 시드만으로는 다른 환경 간에 재현성을 보장하지 않기 때문입니다.
ShapeNet에서의 point2vec 사전 훈련 (pre-training)
./scripts/pretraining_shapenet.bash --data.in_memory true
<details>
<summary>훈련 곡선</summary>
pre-training
</details>
[Checkpoint]
ScanObjectNN에서의 분류 미세 조정 (Classification fine-tuning)
XXXXXXXX를 사전 훈련 실행의 WANDB_RUN_ID로 대체하거나, 모델 동물원(model zoo)에서 체크포인트를 사용하십시오.
./scripts/classification_scanobjectnn.bash --config configs/classification/_pretrained.yaml --model.pretrained_ckpt_path artifacts/point2vec-Pretraining-ShapeNet/XXXXXXXX/checkpoints/epoch=799-step=64800.ckpt
<details>
<summary>훈련 곡선</summary>
scanobjectnn
</details>
[Checkpoint]
ModelNet40에서의 분류 미세 조정 (Classification fine-tuning)
XXXXXXXX를 사전 학습(pre-training) 실행의 WANDB_RUN_ID로 대체하거나 모델 동물원(model zoo)에서 체크포인트를 사용하십시오.
./scripts/classification_modelnet40.bash --config configs/classification/_pretrained.yaml --model.pretrained_ckpt_path artifacts/point2vec-Pretraining-ShapeNet/XXXXXXXX/checkpoints/epoch=799-step=64800.ckpt --seed_everything 1
<details>
<summary>Training curve</summary>
modelnet40
</details>
[Checkpoint]
ModelNet40에서의 투표(Voting)
XXXXXXXX를 미세 조정(fine-tuning) 실행의 WANDB_RUN_ID로 대체하고, epoch=XXX-step=XXXXX-val_acc=0.XXXX.ckpt는 해당 실행에서 가장 좋은 체크포인트로 대체하거나 모델 동물원(model zoo)의 체크포인트를 사용하십시오.
./scripts/voting_modelnet40.bash --finetuned_ckpt_path artifacts/point2vec-Pretraining-ShapeNet/XXXXXXXX/checkpoints/epoch=XXX-step=XXXXX-val_acc=0.XXXX.ckpt
<details>
<summary>Voting Process</summary>
voting
</details>
ModelNet Few-Shot에서의 분류 미세 조정(Classification fine-tuning)
XXXXXXXX를 사전 학습(pre-training) 실행의 WANDB_RUN_ID로 대체하거나 모델 동물원(model zoo)에서 체크포인트를 사용하십시오.
원하는 m-way–n-shot 설정을 선택하기 위해 예를 들어 --data.way 5 또는 --data.shot 20을 전달할 수도 있습니다.
for i in $(seq 0 9);
do
SLURM_ARRAY_TASK_ID=$i ./scripts/classification_modelnet_fewshot.bash --model.pretrained_ckpt_path artifacts/point2vec-Pretraining-ShapeNet/XXXXXXXX/checkpoints/epoch=799-step=64800.ckpt
...
ShapeNetPart에서의 부분 분할(Part segmentation) 미세 조정
XXXXXXXX를 사전 학습(pre-training) 실행의 WANDB_RUN_ID로 대체하거나 모델 동물원(model zoo)에서 체크포인트를 사용하십시오.
./scripts/part_segmentation_shapenetpart.bash --model.pretrained_ckpt_path artifacts/point2vec-Pretraining-ShapeNet/XXXXXXXX/checkpoints/epoch=799-step=64800.ckpt
<details>
<summary>Training curve</summary>
shapenetpart
</details>
[Checkpoint]
기준 모델 (Baselines)
<details>
<summary>확장(Expand)</summary>
Data2vec–pc
사전 학습 단계를 다음으로 대체합니다:
./scripts/pretraining_shapenet.bash --data.in_memory true --model.learning_rate 2e-3 --model.decoder false --trainer.devices 2 --data.batch_size 1024 --model.fix_estimated_stepping_batches 16000
단일 GPU만 가지고 있고 (충분한 VRAM이 있다면), --trainer.devices 2 --data.batch_size 1024 --model.fix_estimated_stepping_batches 16000를 --data.batch_size 2048로 대체할 수 있습니다.
[Checkpoint]
처음부터 학습 (From scratch)
사전 학습 단계를 건너뛰고, --config configs/classification/_pretrained.yaml 및 --model.pretrained_ckpt_path ...의 모든 사용을 생략합니다.
</details>
시각화 (Visualization)
representations
우리는 PCA(주성분 분석)를 사용하여 학습된 표현(representations)을 RGB 공간으로 투영합니다. 무작위 초기화와 Data2vec-pc 사전 학습 모두 상당히 강한 위치적 편향(positional bias)을 보여주는 반면, point2vec는 다운스트림 밀집 예측 작업(downstream dense prediction tasks)으로 훈련되지 않았음에도 불구하고 더 강력한 의미론적 그룹핑(semantic grouping)을 나타냅니다.
point2vec 인용 방법 (Citing point2vec)
연구에서 point2vec를 사용한다면, 다음 BibTeX 항목을 사용해 주십시오.
@inproceedings{knaebel2023point2vec,
title = {{point2vec} for Self-Supervised Representation Learning on Point Clouds},
author = {Knaebel, Karim and Schult, Jonas and Hermans, Alexander and Leibe, Bastian},
...