pointnext-official 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pointnext_official-0.1.0/LICENSE +21 -0
- pointnext_official-0.1.0/MANIFEST.in +20 -0
- pointnext_official-0.1.0/PKG-INFO +174 -0
- pointnext_official-0.1.0/README.md +136 -0
- pointnext_official-0.1.0/cfgs/default.yaml +70 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/assanet-l.yaml +43 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/deepgcn.yaml +44 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/default.yaml +67 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/pix4point.yaml +62 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointmlp.yaml +46 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointnet++.yaml +44 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointnet++_original.yaml +77 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointnext-s.yaml +40 -0
- pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointvector-s.yaml +35 -0
- pointnext_official-0.1.0/cfgs/s3dis/assanet-l.yaml +84 -0
- pointnext_official-0.1.0/cfgs/s3dis/assanet.yaml +85 -0
- pointnext_official-0.1.0/cfgs/s3dis/deepgcn.yaml +29 -0
- pointnext_official-0.1.0/cfgs/s3dis/default.yaml +76 -0
- pointnext_official-0.1.0/cfgs/s3dis/dgcnn.yaml +35 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnet++.yaml +51 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnet++msg.yaml +87 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnet.yaml +26 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnext-b.yaml +39 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnext-l.yaml +40 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnext-s.yaml +51 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointnext-xl.yaml +40 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointvector-l.yaml +37 -0
- pointnext_official-0.1.0/cfgs/s3dis/pointvector-xl.yaml +37 -0
- pointnext_official-0.1.0/cfgs/s3dis_pix4point/default.yaml +70 -0
- pointnext_official-0.1.0/cfgs/s3dis_pix4point/pix4point.yaml +48 -0
- pointnext_official-0.1.0/cfgs/s3dis_pix4point/pix4point_bert.yaml +48 -0
- pointnext_official-0.1.0/cfgs/s3dis_pix4point/pix4point_freeze.yaml +48 -0
- pointnext_official-0.1.0/cfgs/scannet/ASSANet.yaml +80 -0
- pointnext_official-0.1.0/cfgs/scannet/default.yaml +80 -0
- pointnext_official-0.1.0/cfgs/scannet/pointnet++.yaml +42 -0
- pointnext_official-0.1.0/cfgs/scannet/pointnet++_original.yaml +75 -0
- pointnext_official-0.1.0/cfgs/scannet/pointnext-b.yaml +34 -0
- pointnext_official-0.1.0/cfgs/scannet/pointnext-l.yaml +34 -0
- pointnext_official-0.1.0/cfgs/scannet/pointnext-s.yaml +34 -0
- pointnext_official-0.1.0/cfgs/scannet/pointnext-xl.yaml +34 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/default.yaml +64 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/dgcnn.yaml +26 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/pointmlp.yaml +27 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/pointnet++.yaml +40 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/pointnet.yaml +16 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/pointnext-s.yaml +36 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn/pointvector-s.yaml +34 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn_pix4point/default.yaml +61 -0
- pointnext_official-0.1.0/cfgs/scanobjectnn_pix4point/pix4point.yaml +80 -0
- pointnext_official-0.1.0/cfgs/shapenetpart/default.yaml +77 -0
- pointnext_official-0.1.0/cfgs/shapenetpart/pointnext-s.yaml +71 -0
- pointnext_official-0.1.0/cfgs/shapenetpart/pointnext-s_c160.yaml +76 -0
- pointnext_official-0.1.0/cfgs/shapenetpart/pointnext-s_c64.yaml +70 -0
- pointnext_official-0.1.0/cfgs/shapenetpart/pointvector-s_c64.yaml +68 -0
- pointnext_official-0.1.0/cfgs/shapenetpart_pix4point/default.yaml +73 -0
- pointnext_official-0.1.0/cfgs/shapenetpart_pix4point/pix4point.yaml +48 -0
- pointnext_official-0.1.0/docs/changes.md +11 -0
- pointnext_official-0.1.0/docs/checkpoints.md +90 -0
- pointnext_official-0.1.0/docs/examples/modelnet.md +46 -0
- pointnext_official-0.1.0/docs/examples/s3dis.md +78 -0
- pointnext_official-0.1.0/docs/examples/scannet.md +51 -0
- pointnext_official-0.1.0/docs/examples/scanobjectnn.md +76 -0
- pointnext_official-0.1.0/docs/examples/shapenetpart.md +60 -0
- pointnext_official-0.1.0/docs/faq.md +83 -0
- pointnext_official-0.1.0/docs/free_gpu_colab.md +44 -0
- pointnext_official-0.1.0/docs/index.md +99 -0
- pointnext_official-0.1.0/docs/misc/wandb.png +0 -0
- pointnext_official-0.1.0/docs/modelzoo.md +82 -0
- pointnext_official-0.1.0/docs/projects/misc/effects_training_scaling.png +0 -0
- pointnext_official-0.1.0/docs/projects/misc/pix4point.png +0 -0
- pointnext_official-0.1.0/docs/projects/misc/pointnext.jpeg +0 -0
- pointnext_official-0.1.0/docs/projects/misc/pointvector/pointvector.png +0 -0
- pointnext_official-0.1.0/docs/projects/misc/pointvector/s3dis.png +0 -0
- pointnext_official-0.1.0/docs/projects/misc/s3dis_vis.png +0 -0
- pointnext_official-0.1.0/docs/projects/misc/shapenetpart_vis.png +0 -0
- pointnext_official-0.1.0/docs/projects/pix4point.md +89 -0
- pointnext_official-0.1.0/docs/projects/pointnext.md +40 -0
- pointnext_official-0.1.0/docs/projects/pointvector.md +44 -0
- pointnext_official-0.1.0/docs/release.md +60 -0
- pointnext_official-0.1.0/examples/__init__.py +3 -0
- pointnext_official-0.1.0/examples/classification/__init__.py +3 -0
- pointnext_official-0.1.0/examples/classification/main.py +67 -0
- pointnext_official-0.1.0/examples/classification/pretrain.py +196 -0
- pointnext_official-0.1.0/examples/classification/train.py +313 -0
- pointnext_official-0.1.0/examples/profile.py +173 -0
- pointnext_official-0.1.0/examples/segmentation/__init__.py +3 -0
- pointnext_official-0.1.0/examples/segmentation/main.py +745 -0
- pointnext_official-0.1.0/examples/segmentation/main_debug.py +755 -0
- pointnext_official-0.1.0/examples/segmentation/test_s3dis_6fold.py +154 -0
- pointnext_official-0.1.0/examples/segmentation/vis_results.py +30 -0
- pointnext_official-0.1.0/examples/shapenetpart/__init__.py +3 -0
- pointnext_official-0.1.0/examples/shapenetpart/main.py +447 -0
- pointnext_official-0.1.0/install.sh +54 -0
- pointnext_official-0.1.0/metadata/README.md +9 -0
- pointnext_official-0.1.0/notebooks/colab_free_modelnet40_smoke_eval.ipynb +111 -0
- pointnext_official-0.1.0/pointnext_official/__init__.py +24 -0
- pointnext_official-0.1.0/pointnext_official/checkpoints.py +162 -0
- pointnext_official-0.1.0/pointnext_official/cli.py +52 -0
- pointnext_official-0.1.0/pointnext_official.egg-info/SOURCES.txt +103 -0
- pointnext_official-0.1.0/pyproject.toml +53 -0
- pointnext_official-0.1.0/requirements.txt +25 -0
- pointnext_official-0.1.0/setup.cfg +4 -0
- pointnext_official-0.1.0/tests/test_pointnext_official_package.py +16 -0
- pointnext_official-0.1.0/tools/download_checkpoint.py +51 -0
- pointnext_official-0.1.0/tools/write_checkpoint_manifest.py +69 -0
- pointnext_official-0.1.0/update.sh +2 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Guocheng Qian.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
include requirements.txt
|
|
4
|
+
include install.sh
|
|
5
|
+
include update.sh
|
|
6
|
+
recursive-include cfgs *.yaml
|
|
7
|
+
recursive-include docs *.md *.png *.jpg *.jpeg
|
|
8
|
+
recursive-include examples *.py
|
|
9
|
+
recursive-include tools *.py
|
|
10
|
+
recursive-include notebooks *.ipynb
|
|
11
|
+
recursive-include metadata *.md *.sha256
|
|
12
|
+
prune openpoints/.git
|
|
13
|
+
prune .git
|
|
14
|
+
prune data
|
|
15
|
+
prune log
|
|
16
|
+
prune logs
|
|
17
|
+
prune wandb
|
|
18
|
+
prune dist
|
|
19
|
+
prune build
|
|
20
|
+
prune *.egg-info
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pointnext_official
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: PointNeXt release helpers, checkpoint download utilities, and metadata for pip-installed OpenPoints/PointNeXt users.
|
|
5
|
+
Author: Guocheng Qian
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/guochengqian/PointNeXt
|
|
8
|
+
Project-URL: Repository, https://github.com/guochengqian/PointNeXt
|
|
9
|
+
Project-URL: Documentation, https://guochengqian.github.io/PointNeXt/
|
|
10
|
+
Project-URL: Issues, https://github.com/guochengqian/PointNeXt/issues
|
|
11
|
+
Project-URL: Checkpoints, https://huggingface.co/guochengqian/pointnext
|
|
12
|
+
Keywords: point cloud,deep learning,pytorch,PointNeXt,OpenPoints
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: openpoints>=0.1.0
|
|
27
|
+
Requires-Dist: huggingface_hub>=0.19
|
|
28
|
+
Requires-Dist: PyYAML>=5.4
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build>=1; extra == "dev"
|
|
31
|
+
Requires-Dist: twine>=4; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
33
|
+
Provides-Extra: docs
|
|
34
|
+
Requires-Dist: mkdocs-material; extra == "docs"
|
|
35
|
+
Requires-Dist: mkdocs-awesome-pages-plugin; extra == "docs"
|
|
36
|
+
Requires-Dist: mdx_truly_sane_lists; extra == "docs"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# PointNeXt
|
|
40
|
+
|
|
41
|
+
### [[arXiv]](https://arxiv.org/abs/2206.04670) | [[OpenPoints Library]](https://github.com/guochengqian/openpoints) | [[Online Documentation]](https://guochengqian.github.io/PointNeXt/)
|
|
42
|
+
|
|
43
|
+
<p align="center">
|
|
44
|
+
<img src="docs/projects/misc/effects_training_scaling.png" width=85% height=85% class="center">
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
Official PyTorch implementation for the following paper:
|
|
48
|
+
|
|
49
|
+
**PointNeXt: Revisiting PointNet++ with Improved Training and Scaling Strategies**
|
|
50
|
+
|
|
51
|
+
*by [Guocheng Qian](https://www.gcqian.com/), [Yuchen Li](https://cemse.kaust.edu.sa/vision-cair/people/person/yuchen-li), [Houwen Peng](https://houwenpeng.com/), [Jinjie Mai](https://cemse.kaust.edu.sa/people/person/jinjie-mai), [Hasan Hammoud](https://cemse.kaust.edu.sa/ece/people/person/hasan-abed-al-kader-hammoud), [Mohamed Elhoseiny](http://www.mohamed-elhoseiny.com/), [Bernard Ghanem](https://www.bernardghanem.com/)*
|
|
52
|
+
|
|
53
|
+
**TL;DR:** We propose improved training and model scaling strategies to boost PointNet++ to the state-of-the-art level. PointNet++ with the proposed model scaling is named as PointNeXt, the next version of PointNets.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img src="docs/projects/misc/pointnext.jpeg" width=85% height=85% class="center">
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
## News
|
|
61
|
+
- :boom: Sep, 2022: [**PointNeXt**](https://arxiv.org/pdf/2206.04670v1.pdf) accepted by NeurIPS'22
|
|
62
|
+
- :boom: Jun, 2022: Code released
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## Features
|
|
66
|
+
In the PointNeXt project, we propose a new and flexible codebase for point-based methods, namely [**OpenPoints**](https://github.com/guochengqian/openpoints). The biggest difference between OpenPoints and other libraries is that we focus more on reproducibility and fair benchmarking.
|
|
67
|
+
|
|
68
|
+
1. **Extensibility**: supports many representative networks for point cloud understanding, such as *PointNet, DGCNN, DeepGCN, PointNet++, ASSANet, PointMLP*, and our ***PointNeXt***. More networks can be built easily based on our framework since OpenPoints support a wide range of basic operations including graph convolutions, self-attention, farthest point sampling, ball query, *e.t.c*.
|
|
69
|
+
|
|
70
|
+
2. **Reproducibility**: all implemented models are trained on various tasks at least three times. Mean±std is provided in the [PointNeXt paper](https://arxiv.org/abs/2206.04670). *Pretrained models and logs* are available.
|
|
71
|
+
|
|
72
|
+
3. **Fair Benchmarking**: in PointNeXt, we find a large part of performance gain is due to the training strategies. In OpenPoints, all models are trained with the improved training strategies and all achieve much higher accuracy than the original reported value.
|
|
73
|
+
|
|
74
|
+
4. **Ease of Use**: *Build* model, optimizer, scheduler, loss function, and data loader *easily from cfg*. Train and validate different models on various tasks by simply changing the `cfg\*\*.yaml` file.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
model = build_model_from_cfg(cfg.model)
|
|
78
|
+
criterion = build_criterion_from_cfg(cfg.criterion_args)
|
|
79
|
+
```
|
|
80
|
+
Here is an example of `pointnet.yaml` (model configuration for PointNet model):
|
|
81
|
+
```python
|
|
82
|
+
model:
|
|
83
|
+
NAME: BaseCls
|
|
84
|
+
encoder_args:
|
|
85
|
+
NAME: PointNetEncoder
|
|
86
|
+
in_channels: 4
|
|
87
|
+
cls_args:
|
|
88
|
+
NAME: ClsHead
|
|
89
|
+
num_classes: 15
|
|
90
|
+
in_channels: 1024
|
|
91
|
+
mlps: [512,256]
|
|
92
|
+
norm_args:
|
|
93
|
+
norm: 'bn1d'
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
5. **Online logging**: *Support [wandb](https://wandb.ai/)* for checking your results anytime anywhere. Just set `wandb.use_wandb=True` in your command.
|
|
97
|
+
|
|
98
|
+

|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Installation
|
|
103
|
+
|
|
104
|
+
### Pip packages
|
|
105
|
+
|
|
106
|
+
The Python libraries are released as installable packages:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
pip install pointnext_official
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`pointnext_official` installs `openpoints` as its core library dependency and provides PointNeXt release metadata and checkpoint download helpers, for example:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pointnext-download --list
|
|
116
|
+
pointnext-download modelnet40-pointnext-s-c64 --output-dir ./hf_cache
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The PyPI packages are importable without compiling CUDA extensions. Full training/evaluation still requires the custom CUDA/C++ ops, so use a source checkout for benchmark reproduction.
|
|
120
|
+
|
|
121
|
+
### Source install for training/evaluation
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
git clone --recurse-submodules https://github.com/guochengqian/PointNeXt.git
|
|
125
|
+
cd PointNeXt
|
|
126
|
+
git submodule update --init --recursive
|
|
127
|
+
source update.sh
|
|
128
|
+
source install.sh
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
If SSH is configured, `git@github.com:guochengqian/PointNeXt.git` also works. CUDA 11.3 was used for the original release. Modify `install.sh` if a different CUDA/PyTorch version is used. See [Install](docs/index.md), [FAQ](docs/faq.md), and [Checkpoints](docs/checkpoints.md) for details.
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
## Usage
|
|
136
|
+
Check our [online documentation](https://guochengqian.github.io/PointNeXt/) for detailed instructions.
|
|
137
|
+
|
|
138
|
+
A short instruction: all experiments follow the simple rule to train and test:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
CUDA_VISIBLE_DEVICES=$GPUs python examples/$task_folder/main.py --cfg $cfg $kwargs
|
|
142
|
+
```
|
|
143
|
+
- $GPUs is the list of GPUs to use, for most experiments (ScanObjectNN, ModelNet40, S3DIS), we only use 1 A100 (GPUs=0)
|
|
144
|
+
- $task_folder is the folder name of the experiment. For example, for s3dis segmentation, $task_folder=s3dis
|
|
145
|
+
- $cfg is the path to cfg, for example, s3dis segmentation, $cfg=cfgs/s3dis/pointnext-s.yaml
|
|
146
|
+
- $kwargs are the other keyword arguments to use. For example, testing in S3DIS area 5, $kwargs should be `mode=test, --pretrained_path $pretrained_path`.
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
## Model Zoo (pretrained weights)
|
|
150
|
+
See [Model Zoo](https://guochengqian.github.io/PointNeXt/modelzoo/) and [checkpoint download docs](docs/checkpoints.md). The recommended new release path hosts large checkpoints and checksum manifests on Hugging Face Hub, while GitHub Releases/PyPI host source and Python packages.
|
|
151
|
+
|
|
152
|
+
### Visualization
|
|
153
|
+
More examples are available in the [paper](https://arxiv.org/abs/2206.04670).
|
|
154
|
+
|
|
155
|
+

|
|
156
|
+

|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### Acknowledgment
|
|
161
|
+
This library is inspired by [PyTorch-image-models](https://github.com/rwightman/pytorch-image-models) and [mmcv](https://github.com/open-mmlab/mmcv).
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
### Citation
|
|
166
|
+
If you find PointNeXt or the OpenPoints codebase useful, please cite:
|
|
167
|
+
```tex
|
|
168
|
+
@InProceedings{qian2022pointnext,
|
|
169
|
+
title = {PointNeXt: Revisiting PointNet++ with Improved Training and Scaling Strategies},
|
|
170
|
+
author = {Qian, Guocheng and Li, Yuchen and Peng, Houwen and Mai, Jinjie and Hammoud, Hasan and Elhoseiny, Mohamed and Ghanem, Bernard},
|
|
171
|
+
booktitle=Advances in Neural Information Processing Systems (NeurIPS),
|
|
172
|
+
year = {2022},
|
|
173
|
+
}
|
|
174
|
+
```
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# PointNeXt
|
|
2
|
+
|
|
3
|
+
### [[arXiv]](https://arxiv.org/abs/2206.04670) | [[OpenPoints Library]](https://github.com/guochengqian/openpoints) | [[Online Documentation]](https://guochengqian.github.io/PointNeXt/)
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="docs/projects/misc/effects_training_scaling.png" width=85% height=85% class="center">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
Official PyTorch implementation for the following paper:
|
|
10
|
+
|
|
11
|
+
**PointNeXt: Revisiting PointNet++ with Improved Training and Scaling Strategies**
|
|
12
|
+
|
|
13
|
+
*by [Guocheng Qian](https://www.gcqian.com/), [Yuchen Li](https://cemse.kaust.edu.sa/vision-cair/people/person/yuchen-li), [Houwen Peng](https://houwenpeng.com/), [Jinjie Mai](https://cemse.kaust.edu.sa/people/person/jinjie-mai), [Hasan Hammoud](https://cemse.kaust.edu.sa/ece/people/person/hasan-abed-al-kader-hammoud), [Mohamed Elhoseiny](http://www.mohamed-elhoseiny.com/), [Bernard Ghanem](https://www.bernardghanem.com/)*
|
|
14
|
+
|
|
15
|
+
**TL;DR:** We propose improved training and model scaling strategies to boost PointNet++ to the state-of-the-art level. PointNet++ with the proposed model scaling is named as PointNeXt, the next version of PointNets.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<img src="docs/projects/misc/pointnext.jpeg" width=85% height=85% class="center">
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
## News
|
|
23
|
+
- :boom: Sep, 2022: [**PointNeXt**](https://arxiv.org/pdf/2206.04670v1.pdf) accepted by NeurIPS'22
|
|
24
|
+
- :boom: Jun, 2022: Code released
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## Features
|
|
28
|
+
In the PointNeXt project, we propose a new and flexible codebase for point-based methods, namely [**OpenPoints**](https://github.com/guochengqian/openpoints). The biggest difference between OpenPoints and other libraries is that we focus more on reproducibility and fair benchmarking.
|
|
29
|
+
|
|
30
|
+
1. **Extensibility**: supports many representative networks for point cloud understanding, such as *PointNet, DGCNN, DeepGCN, PointNet++, ASSANet, PointMLP*, and our ***PointNeXt***. More networks can be built easily based on our framework since OpenPoints support a wide range of basic operations including graph convolutions, self-attention, farthest point sampling, ball query, *e.t.c*.
|
|
31
|
+
|
|
32
|
+
2. **Reproducibility**: all implemented models are trained on various tasks at least three times. Mean±std is provided in the [PointNeXt paper](https://arxiv.org/abs/2206.04670). *Pretrained models and logs* are available.
|
|
33
|
+
|
|
34
|
+
3. **Fair Benchmarking**: in PointNeXt, we find a large part of performance gain is due to the training strategies. In OpenPoints, all models are trained with the improved training strategies and all achieve much higher accuracy than the original reported value.
|
|
35
|
+
|
|
36
|
+
4. **Ease of Use**: *Build* model, optimizer, scheduler, loss function, and data loader *easily from cfg*. Train and validate different models on various tasks by simply changing the `cfg\*\*.yaml` file.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
model = build_model_from_cfg(cfg.model)
|
|
40
|
+
criterion = build_criterion_from_cfg(cfg.criterion_args)
|
|
41
|
+
```
|
|
42
|
+
Here is an example of `pointnet.yaml` (model configuration for PointNet model):
|
|
43
|
+
```python
|
|
44
|
+
model:
|
|
45
|
+
NAME: BaseCls
|
|
46
|
+
encoder_args:
|
|
47
|
+
NAME: PointNetEncoder
|
|
48
|
+
in_channels: 4
|
|
49
|
+
cls_args:
|
|
50
|
+
NAME: ClsHead
|
|
51
|
+
num_classes: 15
|
|
52
|
+
in_channels: 1024
|
|
53
|
+
mlps: [512,256]
|
|
54
|
+
norm_args:
|
|
55
|
+
norm: 'bn1d'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
5. **Online logging**: *Support [wandb](https://wandb.ai/)* for checking your results anytime anywhere. Just set `wandb.use_wandb=True` in your command.
|
|
59
|
+
|
|
60
|
+

|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Installation
|
|
65
|
+
|
|
66
|
+
### Pip packages
|
|
67
|
+
|
|
68
|
+
The Python libraries are released as installable packages:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pip install pointnext_official
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`pointnext_official` installs `openpoints` as its core library dependency and provides PointNeXt release metadata and checkpoint download helpers, for example:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pointnext-download --list
|
|
78
|
+
pointnext-download modelnet40-pointnext-s-c64 --output-dir ./hf_cache
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The PyPI packages are importable without compiling CUDA extensions. Full training/evaluation still requires the custom CUDA/C++ ops, so use a source checkout for benchmark reproduction.
|
|
82
|
+
|
|
83
|
+
### Source install for training/evaluation
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git clone --recurse-submodules https://github.com/guochengqian/PointNeXt.git
|
|
87
|
+
cd PointNeXt
|
|
88
|
+
git submodule update --init --recursive
|
|
89
|
+
source update.sh
|
|
90
|
+
source install.sh
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
If SSH is configured, `git@github.com:guochengqian/PointNeXt.git` also works. CUDA 11.3 was used for the original release. Modify `install.sh` if a different CUDA/PyTorch version is used. See [Install](docs/index.md), [FAQ](docs/faq.md), and [Checkpoints](docs/checkpoints.md) for details.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
## Usage
|
|
98
|
+
Check our [online documentation](https://guochengqian.github.io/PointNeXt/) for detailed instructions.
|
|
99
|
+
|
|
100
|
+
A short instruction: all experiments follow the simple rule to train and test:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
CUDA_VISIBLE_DEVICES=$GPUs python examples/$task_folder/main.py --cfg $cfg $kwargs
|
|
104
|
+
```
|
|
105
|
+
- $GPUs is the list of GPUs to use, for most experiments (ScanObjectNN, ModelNet40, S3DIS), we only use 1 A100 (GPUs=0)
|
|
106
|
+
- $task_folder is the folder name of the experiment. For example, for s3dis segmentation, $task_folder=s3dis
|
|
107
|
+
- $cfg is the path to cfg, for example, s3dis segmentation, $cfg=cfgs/s3dis/pointnext-s.yaml
|
|
108
|
+
- $kwargs are the other keyword arguments to use. For example, testing in S3DIS area 5, $kwargs should be `mode=test, --pretrained_path $pretrained_path`.
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
## Model Zoo (pretrained weights)
|
|
112
|
+
See [Model Zoo](https://guochengqian.github.io/PointNeXt/modelzoo/) and [checkpoint download docs](docs/checkpoints.md). The recommended new release path hosts large checkpoints and checksum manifests on Hugging Face Hub, while GitHub Releases/PyPI host source and Python packages.
|
|
113
|
+
|
|
114
|
+
### Visualization
|
|
115
|
+
More examples are available in the [paper](https://arxiv.org/abs/2206.04670).
|
|
116
|
+
|
|
117
|
+

|
|
118
|
+

|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### Acknowledgment
|
|
123
|
+
This library is inspired by [PyTorch-image-models](https://github.com/rwightman/pytorch-image-models) and [mmcv](https://github.com/open-mmlab/mmcv).
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
### Citation
|
|
128
|
+
If you find PointNeXt or the OpenPoints codebase useful, please cite:
|
|
129
|
+
```tex
|
|
130
|
+
@InProceedings{qian2022pointnext,
|
|
131
|
+
title = {PointNeXt: Revisiting PointNet++ with Improved Training and Scaling Strategies},
|
|
132
|
+
author = {Qian, Guocheng and Li, Yuchen and Peng, Houwen and Mai, Jinjie and Hammoud, Hasan and Elhoseiny, Mohamed and Ghanem, Bernard},
|
|
133
|
+
booktitle=Advances in Neural Information Processing Systems (NeurIPS),
|
|
134
|
+
year = {2022},
|
|
135
|
+
}
|
|
136
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# distributed
|
|
2
|
+
dist_url: tcp://localhost:8888
|
|
3
|
+
dist_backend: 'nccl'
|
|
4
|
+
multiprocessing_distributed: False
|
|
5
|
+
ngpus_per_node: 1
|
|
6
|
+
world_size: 1
|
|
7
|
+
launcher: 'mp'
|
|
8
|
+
local_rank: 0
|
|
9
|
+
|
|
10
|
+
use_gpu: True
|
|
11
|
+
seed: null
|
|
12
|
+
|
|
13
|
+
# ---------------------------------------------------------------------------- #
|
|
14
|
+
# Training cfgs
|
|
15
|
+
# ---------------------------------------------------------------------------- #
|
|
16
|
+
epoch: 0
|
|
17
|
+
epochs: 100
|
|
18
|
+
|
|
19
|
+
ignore_index: null
|
|
20
|
+
val_fn: validate
|
|
21
|
+
deterministic: False
|
|
22
|
+
sync_bn: False
|
|
23
|
+
|
|
24
|
+
criterion_args:
|
|
25
|
+
NAME: CrossEntropy
|
|
26
|
+
use_mask: False # in some datasets, requiring data mask in input
|
|
27
|
+
|
|
28
|
+
grad_norm_clip: null
|
|
29
|
+
layer_decay: 0 # no layer decay by default
|
|
30
|
+
|
|
31
|
+
step_per_update: 1
|
|
32
|
+
start_epoch: 1
|
|
33
|
+
sched_on_epoch: True
|
|
34
|
+
|
|
35
|
+
# We support wandb for online results collection, please check their documentation for details: https://docs.wandb.ai/
|
|
36
|
+
wandb:
|
|
37
|
+
use_wandb: False
|
|
38
|
+
|
|
39
|
+
use_amp: False
|
|
40
|
+
# ---------------------------------------------------------------------------- #
|
|
41
|
+
# Evaluation cfgs
|
|
42
|
+
# ---------------------------------------------------------------------------- #
|
|
43
|
+
use_voting: False # we do not use any voting. Voting is not a good practice
|
|
44
|
+
val_freq: 10
|
|
45
|
+
|
|
46
|
+
# ---------------------------------------------------------------------------- #
|
|
47
|
+
# io and misc
|
|
48
|
+
# ---------------------------------------------------------------------------- #
|
|
49
|
+
resume: False
|
|
50
|
+
test: False
|
|
51
|
+
finetune: False
|
|
52
|
+
|
|
53
|
+
mode: train # set to test in evaluation only mode
|
|
54
|
+
logname: null
|
|
55
|
+
load_path: null
|
|
56
|
+
|
|
57
|
+
print_freq: 50
|
|
58
|
+
save_freq: -1 # saving frequency for ckpt. -1 only saving the latest and the best.
|
|
59
|
+
|
|
60
|
+
root_dir: log/
|
|
61
|
+
pretrained_path: null
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# ---------------------------------------------------------------------------- #
|
|
65
|
+
# data
|
|
66
|
+
# ---------------------------------------------------------------------------- #
|
|
67
|
+
datatransforms:
|
|
68
|
+
train: null
|
|
69
|
+
val: null
|
|
70
|
+
feature_keys: pos
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
model:
|
|
2
|
+
NAME: BaseCls
|
|
3
|
+
encoder_args:
|
|
4
|
+
NAME: PointNet2Encoder
|
|
5
|
+
in_channels: 3
|
|
6
|
+
strides: [2, 2, 2, 2]
|
|
7
|
+
blocks: [3, 3, 3, 3]
|
|
8
|
+
width: 128
|
|
9
|
+
width_scaling: 3
|
|
10
|
+
double_last_channel: False
|
|
11
|
+
layers: 3
|
|
12
|
+
use_res: True
|
|
13
|
+
query_as_support: True
|
|
14
|
+
mlps: null
|
|
15
|
+
stem_conv: True
|
|
16
|
+
stem_aggr: True
|
|
17
|
+
radius: 0.15
|
|
18
|
+
radius_scaling: 1.5
|
|
19
|
+
block_radius_scaling: 1.5
|
|
20
|
+
num_samples: [[20, 36], [20, 36], [20, 36], [20, 36]]
|
|
21
|
+
sampler: fps
|
|
22
|
+
aggr_args:
|
|
23
|
+
NAME: 'ASSA'
|
|
24
|
+
feature_type: 'assa'
|
|
25
|
+
anisotropic: True
|
|
26
|
+
reduction: 'mean'
|
|
27
|
+
group_args:
|
|
28
|
+
NAME: 'ballquery'
|
|
29
|
+
use_xyz: True
|
|
30
|
+
normalize_dp: True
|
|
31
|
+
conv_args:
|
|
32
|
+
order: conv-norm-act
|
|
33
|
+
act_args:
|
|
34
|
+
act: 'relu'
|
|
35
|
+
norm_args:
|
|
36
|
+
norm: 'bn'
|
|
37
|
+
cls_args:
|
|
38
|
+
NAME: ClsHead
|
|
39
|
+
num_classes: 40
|
|
40
|
+
global_feat: max,avg
|
|
41
|
+
mlps: [512, 256]
|
|
42
|
+
norm_args:
|
|
43
|
+
norm: 'bn1d'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# GFLOPs GMACs Params.(M)
|
|
2
|
+
# 3.88 1.93 2.220
|
|
3
|
+
# Throughput (ins./s): 262.8308528647436
|
|
4
|
+
|
|
5
|
+
model:
|
|
6
|
+
NAME: BaseCls
|
|
7
|
+
encoder_args:
|
|
8
|
+
NAME: DeepGCN
|
|
9
|
+
in_channels: 3
|
|
10
|
+
channels: 64
|
|
11
|
+
n_classes: 40
|
|
12
|
+
emb_dims: 1024
|
|
13
|
+
n_blocks: 14
|
|
14
|
+
conv: 'edge'
|
|
15
|
+
block: 'res'
|
|
16
|
+
k: 9
|
|
17
|
+
epsilon: 0.2
|
|
18
|
+
use_stochastic: True
|
|
19
|
+
use_dilation: True
|
|
20
|
+
dropout: 0.5
|
|
21
|
+
norm_args: {'norm': 'bn'}
|
|
22
|
+
act_args: {'act': 'relu'}
|
|
23
|
+
cls_args:
|
|
24
|
+
NAME: ClsHead
|
|
25
|
+
num_classes: 40
|
|
26
|
+
mlps: [512, 256]
|
|
27
|
+
norm_args:
|
|
28
|
+
norm: 'bn1d'
|
|
29
|
+
lr:
|
|
30
|
+
0.1
|
|
31
|
+
optimizer:
|
|
32
|
+
NAME: momentum
|
|
33
|
+
weight_decay: 1.0e-4
|
|
34
|
+
momentum: 0.9
|
|
35
|
+
filter_bias_and_bn: False
|
|
36
|
+
|
|
37
|
+
# scheduler
|
|
38
|
+
sched: cosine
|
|
39
|
+
epochs: 400
|
|
40
|
+
warmup_epochs: 0
|
|
41
|
+
warmup_lr: 1.0e-6
|
|
42
|
+
min_lr: 0.001
|
|
43
|
+
|
|
44
|
+
sync_bn: False
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Dataset Related
|
|
2
|
+
num_points: 1024 # number of poins actually used in training and evaluation
|
|
3
|
+
dataset:
|
|
4
|
+
common:
|
|
5
|
+
NAME: ModelNet40Ply2048
|
|
6
|
+
data_dir: './data/ModelNet40Ply2048'
|
|
7
|
+
train:
|
|
8
|
+
split: train
|
|
9
|
+
num_points: 1024 # in training, use sampled 1024 points for data augmentation.
|
|
10
|
+
val:
|
|
11
|
+
split: test
|
|
12
|
+
num_points: 1024 # in testing, use uniformly pre-sampled 1024 points for evaluation (following https://github.com/lulutang0608/Point-BERT)
|
|
13
|
+
|
|
14
|
+
feature_keys: pos
|
|
15
|
+
|
|
16
|
+
datatransforms:
|
|
17
|
+
train: [PointsToTensor, PointCloudScaleAndTranslate] # rotation does not help
|
|
18
|
+
vote: [PointCloudScaleAndTranslate]
|
|
19
|
+
val: [PointsToTensor]
|
|
20
|
+
kwargs:
|
|
21
|
+
shift: [0.2, 0.2, 0.2]
|
|
22
|
+
batch_size: 32
|
|
23
|
+
dataloader:
|
|
24
|
+
num_workers: 6
|
|
25
|
+
|
|
26
|
+
num_classes: 40
|
|
27
|
+
# ---------------------------------------------------------------------------- #
|
|
28
|
+
# Training cfgs
|
|
29
|
+
# ---------------------------------------------------------------------------- #
|
|
30
|
+
# training receipe borrowed from: https://github.com/yanx27/Pointnet_Pointnet2_pytorch
|
|
31
|
+
|
|
32
|
+
# ---------------------------------------------------------------------------- #
|
|
33
|
+
# Training cfgs
|
|
34
|
+
# ---------------------------------------------------------------------------- #
|
|
35
|
+
# this one is better.
|
|
36
|
+
sched: cosine
|
|
37
|
+
epochs: 600
|
|
38
|
+
warmup_epochs: 0
|
|
39
|
+
min_lr: null
|
|
40
|
+
|
|
41
|
+
# Training parameters
|
|
42
|
+
lr: 0.001
|
|
43
|
+
optimizer:
|
|
44
|
+
NAME: 'adamw'
|
|
45
|
+
weight_decay: 0.05
|
|
46
|
+
|
|
47
|
+
grad_norm_clip: 1
|
|
48
|
+
|
|
49
|
+
criterion_args:
|
|
50
|
+
NAME: SmoothCrossEntropy
|
|
51
|
+
label_smoothing: 0.2
|
|
52
|
+
|
|
53
|
+
# ---------------------------------------------------------------------------- #
|
|
54
|
+
# io and misc
|
|
55
|
+
# ---------------------------------------------------------------------------- #
|
|
56
|
+
log_dir: 'modelnet40'
|
|
57
|
+
print_freq: 10
|
|
58
|
+
val_freq: 1
|
|
59
|
+
|
|
60
|
+
# ----------------- Model related
|
|
61
|
+
val_batch_size: 64
|
|
62
|
+
pretrained_path: null
|
|
63
|
+
|
|
64
|
+
wandb:
|
|
65
|
+
project: PointNeXt-ModelNet40Ply2048
|
|
66
|
+
|
|
67
|
+
seed: null
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
model:
|
|
2
|
+
NAME: BaseCls
|
|
3
|
+
encoder_args:
|
|
4
|
+
NAME: PointViT
|
|
5
|
+
in_channels: 3
|
|
6
|
+
embed_dim: 384
|
|
7
|
+
depth: 12
|
|
8
|
+
num_heads: 6
|
|
9
|
+
mlp_ratio: 4.
|
|
10
|
+
drop_rate: 0.
|
|
11
|
+
attn_drop_rate: 0.1
|
|
12
|
+
drop_path_rate: 0.0
|
|
13
|
+
qkv_bias: True
|
|
14
|
+
act_args:
|
|
15
|
+
act: 'gelu'
|
|
16
|
+
norm_args:
|
|
17
|
+
norm: 'ln'
|
|
18
|
+
eps: 1.0e-6
|
|
19
|
+
embed_args:
|
|
20
|
+
NAME: PointPatchEmbed
|
|
21
|
+
feature_type: 'dp'
|
|
22
|
+
reduction: 'max'
|
|
23
|
+
sample_ratio: 0.25 # ablation: 0.25
|
|
24
|
+
normalize_dp: False
|
|
25
|
+
group_size: 32
|
|
26
|
+
subsample: 'fps'
|
|
27
|
+
group: 'knn'
|
|
28
|
+
norm_args: bn # ablation: in
|
|
29
|
+
conv_args:
|
|
30
|
+
order: conv-norm-act
|
|
31
|
+
layers: 4
|
|
32
|
+
channels: [128, 256, 512]
|
|
33
|
+
global_feat: cls,max,avg
|
|
34
|
+
cls_args:
|
|
35
|
+
NAME: ClsHead
|
|
36
|
+
num_classes: 40
|
|
37
|
+
mlps: [256, 256]
|
|
38
|
+
norm_args:
|
|
39
|
+
norm: 'bn1d'
|
|
40
|
+
|
|
41
|
+
pretrained_path: pretrained/imagenet/small_21k_224.pth
|
|
42
|
+
mode: finetune_encoder
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
criterion_args:
|
|
46
|
+
NAME: SmoothCrossEntropy
|
|
47
|
+
label_smoothing: 0.2
|
|
48
|
+
|
|
49
|
+
# Optimizer
|
|
50
|
+
lr: 5.0e-4
|
|
51
|
+
optimizer:
|
|
52
|
+
NAME: 'adamw'
|
|
53
|
+
weight_decay: 0.05
|
|
54
|
+
|
|
55
|
+
# scheduler
|
|
56
|
+
epochs: 300
|
|
57
|
+
sched: cosine
|
|
58
|
+
warmup_epochs: 0
|
|
59
|
+
min_lr: 1.0e-6
|
|
60
|
+
|
|
61
|
+
wandb:
|
|
62
|
+
project: pix4point-modelnet40
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# GFLOPs GMACs Params.(M)
|
|
2
|
+
# 31.36 15.61 13.239
|
|
3
|
+
model:
|
|
4
|
+
NAME: PointMLP
|
|
5
|
+
in_channels: 3
|
|
6
|
+
points: 1024
|
|
7
|
+
num_classes: 40
|
|
8
|
+
embed_dim: 64
|
|
9
|
+
groups: 1
|
|
10
|
+
res_expansion: 1.0
|
|
11
|
+
activation: "relu"
|
|
12
|
+
bias: False
|
|
13
|
+
use_xyz: False
|
|
14
|
+
normalize: "anchor"
|
|
15
|
+
dim_expansion: [ 2, 2, 2, 2 ]
|
|
16
|
+
pre_blocks: [ 2, 2, 2, 2 ]
|
|
17
|
+
pos_blocks: [ 2, 2, 2, 2 ]
|
|
18
|
+
k_neighbors: [ 24, 24, 24, 24 ]
|
|
19
|
+
reducers: [ 2, 2, 2, 2 ]
|
|
20
|
+
|
|
21
|
+
lr:
|
|
22
|
+
0.1
|
|
23
|
+
optimizer:
|
|
24
|
+
NAME: 'momentum'
|
|
25
|
+
momentum: 0.9
|
|
26
|
+
weight_decay: 2.0e-4
|
|
27
|
+
|
|
28
|
+
sched: cosine
|
|
29
|
+
epochs: 300
|
|
30
|
+
t_max: 300
|
|
31
|
+
min_lr: 0.005
|
|
32
|
+
warmup_epochs: 0 # Later change to 10?
|
|
33
|
+
|
|
34
|
+
criterion_args:
|
|
35
|
+
NAME: SmoothCrossEntropy
|
|
36
|
+
label_smoothing: 0.2
|
|
37
|
+
|
|
38
|
+
datatransforms:
|
|
39
|
+
train: [PointsToTensor, PointCloudScaleAndTranslate]
|
|
40
|
+
vote: [PointCloudScaleAndTranslate]
|
|
41
|
+
val: [PointsToTensor]
|
|
42
|
+
kwargs:
|
|
43
|
+
shift: [0.2, 0.2, 0.2]
|
|
44
|
+
|
|
45
|
+
batch_size: 32
|
|
46
|
+
val_batch_size: 64
|