Official pytorch implementation of the paper "EPiC: Ensemble of Partial Point Clouds for Robust Classification".
Meir Yossef Levi, Guy Gilboa
We propose a novel approach to robustify performance of point-cloud classification networks against corruptions and outliers. Our method is based on ensemble of 3 types of sub-samples: Patches, Curves and Random. It can be applied to any given point-cloud network and achieve state-of-the-art results on ModelNet-C by using RPC+WolfMix (mCE=0.501).
Tested on Ubuntu 20.04 LTS using python 3.8.10
git clone https://github.com/yossilevii100/EPiC.git
cd EPiC
Set up the environment by:
pip install pointnet2_ops_lib/.
Download ModelNet-40 by:
cd data
wget https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_2048.zip
unzip modelnet40_ply_hdf5_2048.zip
cd ..
Alternatively, you may download ModelNet40 manually and extract it under data
.
Download ModelNet-C by:
cd data
gdown https://drive.google.com/uc?id=1KE6MmXMtfu_mgxg4qLPdEwVD5As8B0rm
unzip modelnet_c.zip
cd ..
Alternatively, you may download ModelNet40-C manually and extract it under data
.
Make sure your data folders are as follows:
data
--- modelnet_c
------ list of h5 files
--- modelnet40_ply_hdf5_2048
------ list of h5 files
Download pretrained models by
gdown https://drive.google.com/uc?id=15Q-YewNGvte8PmteVjTmqE0vzDL3ViJd
unzip pretrained.zip -d pretrained
Alternatively, you may download pretrained models manually and extract it under root directory.
Evaluation commands are provided in EVALUATE.md.
In order to ease the way for future researchers we implement a placeholder for new custom model.
All you have to do is implement your custom model in models/custom/custom_model
- Augmented by WolfMix:
Train:
python main.py --model custom_model --train_random --train_curves --train_patches --use_wolfmix --exp_name <your_exp_name> --use_wolfmix
After the training procedure finished, evaluate your model with EPiC by:
python main.py --model custom_model --eval --model_path_patches <path/to/project>/checkpoints/<your_exp_name>/models/custom_model_patches_wm.t7 --model_path_curves <path/to/project>/checkpoints/<your_exp_name>/models/custom_model_curves_wm.t7 --model_path_random <path/to/project>/checkpoints/<your_exp_name>/models/custom_model_random_wm.t7
- Un-augmented:
Train:
python main.py --model custom_model --train_random --train_curves --train_patches --exp_name <your_exp_name>
After the training procedure finished, evaluate your model with EPiC by:
python main.py --model custom_model --eval --model_path_patches <path/to/project>/checkpoints/<your_exp_name>/models/custom_model_patches.t7 --model_path_curves <path/to/project>/checkpoints/<your_exp_name>/models/custom_model_curves.t7 --model_path_random <path/to/project>/checkpoints/<your_exp_name>/models/custom_model_random.t7
Our method achieves SOTA results on ModelNet-C, with and without augmentation. Moreover, our approach is improved each of the examined networks in terms of robustness.
With WolfMix Augmentation
Method | Reference | mCE | Clean OA |
---|---|---|---|
DGCNN | Wang et al. | 0.590 | 0.932 |
DGCNN-EPiC | Wang et al. | 0.529 | 0.921 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
GDANet | Xu et al. | 0.571 | 0.934 |
GDANet-EPiC | Xu et al. | 0.530 | 0.925 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
PCT | Guo et al. | 0.574 | 0.934 |
PCT-EPiC | Guo et al. | 0.510 | 0.927 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
RPC | Ren et al. | 0.601 | 0.933 |
RPC-EPiC | Ren et al. | 0.501 | 0.927 |
Without WolfMix Augmentation
Method | Reference | mCE | Clean OA |
---|---|---|---|
DGCNN | Wang et al. | 1.000 | 0.926 |
DGCNN-EPiC | Wang et al. | 0.669 | 0.930 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
GDANet | Xu et al. | 0.892 | 0.934 |
GDANet-EPiC | Xu et al. | 0.704 | 0.936 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
PCT | Guo et al. | 0.925 | 0.930 |
PCT-EPiC | Guo et al. | 0.646 | 0.930 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
RPC | Ren et al. | 0.863 | 0.930 |
RPC-EPiC | Ren et al. | 0.750 | 0.936 |
--------------- | ---------------------------------------------------------- | :---: | :------: |
CurveNet | Xiang et al. | 0.927 | 0.938 |
CurveNet-EPiC | Xiang et al. | 0.742 | 0.921 |
@inproceedings{levi2023epic,
title={Epic: Ensemble of partial point clouds for robust classification},
author={Levi, Meir Yossef and Gilboa, Guy},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
pages={14475--14484},
year={2023}
}
This codebase heavily borrows codes from the following repositories: