Awesome
Learning with Noisy Labels for Robust Point Cloud Segmentation (ICCV2021 Oral)
Project Page | Paper (ArXiv) | Pre-trained Models | Supplemental Material
This repository is the official pytorch implementation of the proposed Point Noise-Adaptive Learning (PNAL) framework our ICCV 2021 oral paper, Learning with Noisy Labels for Robust Point Cloud Segmentation.
Shuquan Ye<sup>1</sup>, Dongdong Chen<sup>2</sup>, Songfang Han<sup>3</sup>, Jing Liao<sup>1</sup> <br> <sup>1</sup>City University of Hong Kong, <sup>2</sup>Microsoft Cloud AI,<sup>3</sup> University of California
:star2: Pipeline
:ok_hand: Updates
2021/10/17: initial release.
Install
:point_right: Requirements
Ubuntu 18.04
Conda
with python = 3.7.7
pytorch = 1.5.0
cuda = 10.1, cudnn = 7.6.3
torchvision = 0.6.0
torch_geometric = 1.6.1
By default, we train with a single GPU >= 10000MiB, with batchsize=12
Refined Dataset
:star2: Download scannet annotation refined by us. :star2:
:sparkles: Refined Annotation :sparkles:
Download and unzip.
Extract point clouds from ScanNetV2 raw data.
Note that point cloud data is NOT included in the above file, according to ScanNet Terms of Use.
Download all meshes from ScannNetv2 validation set to mesh/
.
And then extract by
python find_rgb.py
Data Preparation
:clap: Noisy and cluster data prepared by us
Download per60_0.018_DBSCANCluster, the S3DIS dataset with 60% symmetric noise and clustered by DBSCAN.
Move it to NL_S3DIS/
and unzip.
:walking: Make noisy and cluster data on your own?
download and unzip data_raw.zip, the clean data and based on this we make noise.
e.g., create 80% symmetric noise:
python make_NL_S3DIS.py --training --replace_method 1 --pre_cluster_path 'per60_0.018_DBSCANCluster/' --precent_NL 80 --root 'data_with_ins_label'
The label noise type can be switched by replace_method (=1 for Symmetry, =2 for Asymmetry, =3 for common Asymmetry), and the noise rate by precent_NL.
You can further switch cluster methods, e.g., ByPartitionMethods, ByDBSCAN, and ByGMM, in S3DIS_instance.
download ply_data_all_h5, the raw S3DIS dataset.
move it to NL_S3DIS/raw and unzip.
done.
:punch: How can I check the noise rate?
Go into NL_S3DIS/
and run
python compare_labels.py
. Be patient and wait for it end to print Overall Noise Rate for you.
Run
:fire: PNAL
You can run under ours PNAL pipeline with different configs, by:
bash run_pnal.sh
e.g., run DGCNN on S3DIS with 60% symmetric noise in our prepared configs/PNAL.yaml
.
:heart: without PNAL
You can run without ours PNAL pipeline with different configs, by:
bash run.sh
e.g., run DGCNN on S3DIS with Symmetric Cross Entropy (SCE) Loss in our prepared configs/SCE.yaml
, and
you can run with common Cross Entropy (CE) loss or Generalized Cross Entropy (GCE) Loss by change LOSS_FUNCTION
from SCE
to ""
or GCE
...
BibTeX
@article{pnal2021,
author = {Ye, Shuquan and Chen, Dongdong and Han, Songfang and Liao, Jing},
title = {Learning with Noisy Labels for Robust Point Cloud Segmentation},
journal = {International Conference on Computer Vision},
year = {2021},
}
:smiley_cat: Acknowledgements
:smile_cat: We thank a lot for the flexible codebase of SELFIE, pytorch_geometric, Truncated-Loss.
:smile_cat: I would like to thank Jiaying Lin for providing the initial idea, constructive suggestions, generous support to this project.