Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yanx27/PointASNL
PointASNL: Robust Point Clouds Processing using Nonlocal Neural Networks with Adaptive Sampling (CVPR 2020)
https://github.com/yanx27/PointASNL
classification modelnet-dataset point-cloud sample scannet-dataset segmentation self-driving semantickitti tensorflow
Last synced: about 2 months ago
JSON representation
PointASNL: Robust Point Clouds Processing using Nonlocal Neural Networks with Adaptive Sampling (CVPR 2020)
- Host: GitHub
- URL: https://github.com/yanx27/PointASNL
- Owner: yanx27
- License: mit
- Created: 2020-03-01T07:48:22.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2021-10-15T14:45:48.000Z (about 3 years ago)
- Last Synced: 2024-08-01T03:45:22.477Z (5 months ago)
- Topics: classification, modelnet-dataset, point-cloud, sample, scannet-dataset, segmentation, self-driving, semantickitti, tensorflow
- Language: Python
- Homepage:
- Size: 768 KB
- Stars: 258
- Watchers: 10
- Forks: 34
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PointASNL
This repository is for **PointASNL** introduced in the following paper
Xu Yan, [Chaoda Zheng](https://github.com/Ghostish), [Zhen Li*](https://mypage.cuhk.edu.cn/academics/lizhen/), Sheng Wang and Shuguang Cui, "PointASNL: Robust Point Clouds Processing using Nonlocal Neural Networks with Adaptive Sampling", CVPR 2020 [[arxiv]](https://arxiv.org/pdf/2003.00492.pdf).
![](figure/fig1.png)
If you find our work useful in your research, please consider citing:
```
@inproceedings{yan2020pointasnl,
title={Pointasnl: Robust point clouds processing using nonlocal neural networks with adaptive sampling},
author={Yan, Xu and Zheng, Chaoda and Li, Zhen and Wang, Sheng and Cui, Shuguang},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={5589--5598},
year={2020}
}
```## Getting Started
### (1) Set up
Clone the repository:
```
git clone https://github.com/yanx27/PointASNL.git
```Installation instructions for Ubuntu 16.04 (available at **CUDA10**):
* Make sure CUDA and cuDNN are installed. Only this configurations has been tested:
- Python 3.6.9, TensorFlow 1.13.1, CUDA 10.1* Follow Tensorflow installation procedure.
* Compile the customized Tensorflow operators by `sh complile_op.sh`.
N.B. If you installed Tensorflow in a virtual environment, it needs to be activated when running these scripts### (2) ModelNet40 Classification
Aligned ModelNet40 dataset can be found [here](https://shapenet.cs.stanford.edu/media/modelnet40_normal_resampled.zip). Since the randomness of data augmentation, the result of this code maybe slightly different from the result in paper, but it should be around 93%.
#### Data without Noise
It will cost relatively long time in first epoch for cache construction.
```
# Training
$ python train.py --data [MODELNET40 PATH] --exp_dir PointASNL_without_noise# Evaluation
$ python test.py --data [MODELNET40 PATH] --model_path log/PointASNL_without_noise/best_model.ckpt
```
#### Data with Noise
Model with AS module is extremely robust for noisy data. You can use adaptive sampling by setting `--AS` .
```
# Training
$ python train.py --data [MODELNET40 PATH] --exp_dir PointASNL_with_noise --AS# Evaluation on noisy data
$ python test.py --data [MODELNET40 PATH] --model_path log/PointASNL_with_noise/best_model.ckpt --AS --noise
```### (3) ScanNet Segmentation
We provide two options for training on ScanNet dataset (with or without pre/post processing).
With grid sampling processing, more input points and deeper network structure, our PointASNL can achieve **66.6%** on ScanNet [benchmark](http://kaldir.vc.in.tum.de/scannet_benchmark/).
#### Data Preparation
Official ScanNet dataset can be downloaded [here](http://www.scan-net.org/).
If you choose training without grid sampling, you need firstly run `ScanNet/prepare_scannet.py`, otherwise you can skip to training step.
#### Data without Processing
This method converges relatively slower, and will achieve result around 63%.
```
# Training
$ cd ScanNet/
$ python train_scannet.py --data [SCANNET PATH] --log_dir PointASNL# Evaluation
$ cd ScanNet/
$ python test_scannet.py --data [SCANNET PATH] --model_path log/PointASNL/latest_model.ckpt
```
#### Data with Grid Sampling
We highly recommend training with this method, although it takes a long time to process the raw data, it can achieve results around 66% and will be faster to converge. Grid sampling pre-processing will be automatically conducted before training.
```
# Training
$ cd ScanNet/
$ python train_scannet_grid.py --data [SCANNET PATH] --log_dir PointASNL_grid --num_point 10240 --model pointasnl_sem_seg_res --in_radius 2# Evaluation
$ cd ScanNet/
$ python test_scannet_grid.py --data [SCANNET PATH] --model_path log/PointASNL_grid/latest_model.ckpt
```#### Pre-trained Model
| Model | mIoU | Download |
| ------------- | ------------- | ------------------------------------------------------------ |
| pointasnl_sem_seg_res | 66.93 | [ckpt-163.9M](https://drive.google.com/file/d/1cSCOTScBZOJI4shU4Dwl8EXYy0NBUR5n/view?usp=sharing) |### (4) SemanticKITTI Segmentation
* SemanticKITTI dataset can be found [here](http://semantic-kitti.org/dataset.html#download). Download the files related to semantic segmentation and extract everything into the same folder.
* We add codes with grid sampling processing, which can achieve better result of around **52%** (using `--prepare_data` just in the first running).
* Please using official [semantic_kitti_api](https://github.com/PRBonn/semantic-kitti-api) for evaluation.
```
# Training
$ cd SemanticKITTI/
$ python train_semantic_kitti.py --data [SemanticKITTI PATH] --log_dir PointASNL --with_remission
# or
$ python train_semantic_kitti_grid.py --data [SemanticKITTI PATH] --log_dir PointASNL_grid --prepare_data# Evaluation
$ cd SemanticKITTI/
$ python test_semantic_kitti.py --data [SemanticKITTI PATH] --model_path log/PointASNL/latest_model.ckpt --with_remission
# or
$ python test_semantic_kitti_grid.py --data [SemanticKITTI PATH] --model_path log/PointASNL_grid/best_model.ckpt --test_area [e.g., 08]```
## Acknowledgement
* The original code is borrowed from [PointNet++](https://github.com/charlesq34/pointnet2) and [PointConv](https://github.com/DylanWusee/pointconv).
* The code with grid sampling is borrowed from [KPConv](https://github.com/HuguesTHOMAS/KPConv) and [RandLA-Net](https://github.com/QingyongHu/RandLA-Net).
* The kd-tree tool is from [nanoflann](https://github.com/jlblancoc/nanoflann).
## License
This repository is released under MIT License (see LICENSE file for details).