Learning Geometry-Disentangled Representation for Complementary Understanding of 3D Object Point Cloud.
This repository is built for the paper:
Learning Geometry-Disentangled Representation for Complementary Understanding of 3D Object Point Cloud (AAAI2021) [arXiv]
by Mutian Xu*, Junhao Zhang*, Zhipeng Zhou, Mingye Xu, Xiaojuan Qi and Yu Qiao.
If you find the code or trained models useful, please consider citing:
@inproceedings{xu2021gdanet,
title={Learning Geometry-Disentangled Representation for Complementary Understanding of 3D Object Point Cloud},
author={Mutian Xu and Junhao Zhang and Zhipeng Zhou and Mingye Xu and Xiaojuan Qi and Yu Qiao},
booktitle={AAAI},
year={2021}
}
20/05/2022:
GDANet becomes a standard and strong baseline model for robust 3D recognition, it gains competitive performance on OmniObject3D, ModelNet-C and ModelNet40-C datasets for object classification under corruptions.
- Linux (tested on Ubuntu 14.04/16.04)
- Python 3.5+
- PyTorch 1.0+
-
Create the folder to symlink the data later:
mkdir -p data -
Object Classification:
Download and unzip ModelNet40 (415M), then symlink the path to it as follows (you can alternatively modify the path here) :
ln -s /path to modelnet40/modelnet40_ply_hdf5_2048 data -
Shape Part Segmentation:
Download and unzip ShapeNet Part (674M), then symlink the path to it as follows (you can alternatively modify the path here) :
ln -s /path to shapenet part/shapenetcore_partanno_segmentation_benchmark_v0_normal data
-
Train:
python main_cls.py -
Test:
-
Run the voting evaluation script, after this voting you will get an accuracy of 93.8% if all things go right:
python voting_eval_modelnet.py --model_path 'pretrained/GDANet_ModelNet40_93.4.t7' -
You can also directly evaluate our pretrained model without voting to get an accuracy of 93.4%:
python main.py --eval True --model_path 'pretrained/GDANet_ModelNet40_93.4.t7'
-
-
Train:
-
Training from scratch:
python main_ptseg.py -
If you want resume training from checkpoints, specify
resumein the args:python main_ptseg.py --resume True
-
-
Test:
You can choose to test the model with the best instance mIoU, class mIoU or accuracy, by specifying
evalandmodel_typein the args:-
python main_ptseg.py --eval True --model_type 'insiou'(best instance mIoU, default) -
python main_ptseg.py --eval True --model_type 'clsiou'(best class mIoU) -
python main_ptseg.py --eval True --model_type 'acc'(best accuracy)
Note: This works only after you trained the model or if you have the checkpoint in
checkpoints/GDANet. If you run the training from scratch the checkpoints will automatically be generated there. -
The following tables report the current performances on different tasks and datasets.
| Method | OA |
|---|---|
| GDANet | 93.8% |
Object Classification under Corruptions on OmniObject3D.
| Method | mean Corrution Error | Clean OA | Style OA |
|---|---|---|---|
| GDANet | 0.920 | 0.934 | 0.497 |
Object Classification under Corruptions on ModelNet-C.
| Method | mean Corrution Error | Clean OA |
|---|---|---|
| GDANet | 0.892 | 0.934 |
Object Classification against Common Corruptions on ModelNet40-C.
| Method | Corruption Error Rate (%) | Clean Error Rate (%) |
|---|---|---|
| GDANet | 25.6 | 7.5 |
| Method | Class mIoU | Instance mIoU |
|---|---|---|
| GDANet | 85.0% | 86.5% |
Please contact Mutian Xu ([email protected]) or Junhao Zhang ([email protected]) for further discussion.
This code is is partially borrowed from DGCNN and PointNet++.