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.
Files changed (106) hide show
  1. pointnext_official-0.1.0/LICENSE +21 -0
  2. pointnext_official-0.1.0/MANIFEST.in +20 -0
  3. pointnext_official-0.1.0/PKG-INFO +174 -0
  4. pointnext_official-0.1.0/README.md +136 -0
  5. pointnext_official-0.1.0/cfgs/default.yaml +70 -0
  6. pointnext_official-0.1.0/cfgs/modelnet40ply2048/assanet-l.yaml +43 -0
  7. pointnext_official-0.1.0/cfgs/modelnet40ply2048/deepgcn.yaml +44 -0
  8. pointnext_official-0.1.0/cfgs/modelnet40ply2048/default.yaml +67 -0
  9. pointnext_official-0.1.0/cfgs/modelnet40ply2048/pix4point.yaml +62 -0
  10. pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointmlp.yaml +46 -0
  11. pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointnet++.yaml +44 -0
  12. pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointnet++_original.yaml +77 -0
  13. pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointnext-s.yaml +40 -0
  14. pointnext_official-0.1.0/cfgs/modelnet40ply2048/pointvector-s.yaml +35 -0
  15. pointnext_official-0.1.0/cfgs/s3dis/assanet-l.yaml +84 -0
  16. pointnext_official-0.1.0/cfgs/s3dis/assanet.yaml +85 -0
  17. pointnext_official-0.1.0/cfgs/s3dis/deepgcn.yaml +29 -0
  18. pointnext_official-0.1.0/cfgs/s3dis/default.yaml +76 -0
  19. pointnext_official-0.1.0/cfgs/s3dis/dgcnn.yaml +35 -0
  20. pointnext_official-0.1.0/cfgs/s3dis/pointnet++.yaml +51 -0
  21. pointnext_official-0.1.0/cfgs/s3dis/pointnet++msg.yaml +87 -0
  22. pointnext_official-0.1.0/cfgs/s3dis/pointnet.yaml +26 -0
  23. pointnext_official-0.1.0/cfgs/s3dis/pointnext-b.yaml +39 -0
  24. pointnext_official-0.1.0/cfgs/s3dis/pointnext-l.yaml +40 -0
  25. pointnext_official-0.1.0/cfgs/s3dis/pointnext-s.yaml +51 -0
  26. pointnext_official-0.1.0/cfgs/s3dis/pointnext-xl.yaml +40 -0
  27. pointnext_official-0.1.0/cfgs/s3dis/pointvector-l.yaml +37 -0
  28. pointnext_official-0.1.0/cfgs/s3dis/pointvector-xl.yaml +37 -0
  29. pointnext_official-0.1.0/cfgs/s3dis_pix4point/default.yaml +70 -0
  30. pointnext_official-0.1.0/cfgs/s3dis_pix4point/pix4point.yaml +48 -0
  31. pointnext_official-0.1.0/cfgs/s3dis_pix4point/pix4point_bert.yaml +48 -0
  32. pointnext_official-0.1.0/cfgs/s3dis_pix4point/pix4point_freeze.yaml +48 -0
  33. pointnext_official-0.1.0/cfgs/scannet/ASSANet.yaml +80 -0
  34. pointnext_official-0.1.0/cfgs/scannet/default.yaml +80 -0
  35. pointnext_official-0.1.0/cfgs/scannet/pointnet++.yaml +42 -0
  36. pointnext_official-0.1.0/cfgs/scannet/pointnet++_original.yaml +75 -0
  37. pointnext_official-0.1.0/cfgs/scannet/pointnext-b.yaml +34 -0
  38. pointnext_official-0.1.0/cfgs/scannet/pointnext-l.yaml +34 -0
  39. pointnext_official-0.1.0/cfgs/scannet/pointnext-s.yaml +34 -0
  40. pointnext_official-0.1.0/cfgs/scannet/pointnext-xl.yaml +34 -0
  41. pointnext_official-0.1.0/cfgs/scanobjectnn/default.yaml +64 -0
  42. pointnext_official-0.1.0/cfgs/scanobjectnn/dgcnn.yaml +26 -0
  43. pointnext_official-0.1.0/cfgs/scanobjectnn/pointmlp.yaml +27 -0
  44. pointnext_official-0.1.0/cfgs/scanobjectnn/pointnet++.yaml +40 -0
  45. pointnext_official-0.1.0/cfgs/scanobjectnn/pointnet.yaml +16 -0
  46. pointnext_official-0.1.0/cfgs/scanobjectnn/pointnext-s.yaml +36 -0
  47. pointnext_official-0.1.0/cfgs/scanobjectnn/pointvector-s.yaml +34 -0
  48. pointnext_official-0.1.0/cfgs/scanobjectnn_pix4point/default.yaml +61 -0
  49. pointnext_official-0.1.0/cfgs/scanobjectnn_pix4point/pix4point.yaml +80 -0
  50. pointnext_official-0.1.0/cfgs/shapenetpart/default.yaml +77 -0
  51. pointnext_official-0.1.0/cfgs/shapenetpart/pointnext-s.yaml +71 -0
  52. pointnext_official-0.1.0/cfgs/shapenetpart/pointnext-s_c160.yaml +76 -0
  53. pointnext_official-0.1.0/cfgs/shapenetpart/pointnext-s_c64.yaml +70 -0
  54. pointnext_official-0.1.0/cfgs/shapenetpart/pointvector-s_c64.yaml +68 -0
  55. pointnext_official-0.1.0/cfgs/shapenetpart_pix4point/default.yaml +73 -0
  56. pointnext_official-0.1.0/cfgs/shapenetpart_pix4point/pix4point.yaml +48 -0
  57. pointnext_official-0.1.0/docs/changes.md +11 -0
  58. pointnext_official-0.1.0/docs/checkpoints.md +90 -0
  59. pointnext_official-0.1.0/docs/examples/modelnet.md +46 -0
  60. pointnext_official-0.1.0/docs/examples/s3dis.md +78 -0
  61. pointnext_official-0.1.0/docs/examples/scannet.md +51 -0
  62. pointnext_official-0.1.0/docs/examples/scanobjectnn.md +76 -0
  63. pointnext_official-0.1.0/docs/examples/shapenetpart.md +60 -0
  64. pointnext_official-0.1.0/docs/faq.md +83 -0
  65. pointnext_official-0.1.0/docs/free_gpu_colab.md +44 -0
  66. pointnext_official-0.1.0/docs/index.md +99 -0
  67. pointnext_official-0.1.0/docs/misc/wandb.png +0 -0
  68. pointnext_official-0.1.0/docs/modelzoo.md +82 -0
  69. pointnext_official-0.1.0/docs/projects/misc/effects_training_scaling.png +0 -0
  70. pointnext_official-0.1.0/docs/projects/misc/pix4point.png +0 -0
  71. pointnext_official-0.1.0/docs/projects/misc/pointnext.jpeg +0 -0
  72. pointnext_official-0.1.0/docs/projects/misc/pointvector/pointvector.png +0 -0
  73. pointnext_official-0.1.0/docs/projects/misc/pointvector/s3dis.png +0 -0
  74. pointnext_official-0.1.0/docs/projects/misc/s3dis_vis.png +0 -0
  75. pointnext_official-0.1.0/docs/projects/misc/shapenetpart_vis.png +0 -0
  76. pointnext_official-0.1.0/docs/projects/pix4point.md +89 -0
  77. pointnext_official-0.1.0/docs/projects/pointnext.md +40 -0
  78. pointnext_official-0.1.0/docs/projects/pointvector.md +44 -0
  79. pointnext_official-0.1.0/docs/release.md +60 -0
  80. pointnext_official-0.1.0/examples/__init__.py +3 -0
  81. pointnext_official-0.1.0/examples/classification/__init__.py +3 -0
  82. pointnext_official-0.1.0/examples/classification/main.py +67 -0
  83. pointnext_official-0.1.0/examples/classification/pretrain.py +196 -0
  84. pointnext_official-0.1.0/examples/classification/train.py +313 -0
  85. pointnext_official-0.1.0/examples/profile.py +173 -0
  86. pointnext_official-0.1.0/examples/segmentation/__init__.py +3 -0
  87. pointnext_official-0.1.0/examples/segmentation/main.py +745 -0
  88. pointnext_official-0.1.0/examples/segmentation/main_debug.py +755 -0
  89. pointnext_official-0.1.0/examples/segmentation/test_s3dis_6fold.py +154 -0
  90. pointnext_official-0.1.0/examples/segmentation/vis_results.py +30 -0
  91. pointnext_official-0.1.0/examples/shapenetpart/__init__.py +3 -0
  92. pointnext_official-0.1.0/examples/shapenetpart/main.py +447 -0
  93. pointnext_official-0.1.0/install.sh +54 -0
  94. pointnext_official-0.1.0/metadata/README.md +9 -0
  95. pointnext_official-0.1.0/notebooks/colab_free_modelnet40_smoke_eval.ipynb +111 -0
  96. pointnext_official-0.1.0/pointnext_official/__init__.py +24 -0
  97. pointnext_official-0.1.0/pointnext_official/checkpoints.py +162 -0
  98. pointnext_official-0.1.0/pointnext_official/cli.py +52 -0
  99. pointnext_official-0.1.0/pointnext_official.egg-info/SOURCES.txt +103 -0
  100. pointnext_official-0.1.0/pyproject.toml +53 -0
  101. pointnext_official-0.1.0/requirements.txt +25 -0
  102. pointnext_official-0.1.0/setup.cfg +4 -0
  103. pointnext_official-0.1.0/tests/test_pointnext_official_package.py +16 -0
  104. pointnext_official-0.1.0/tools/download_checkpoint.py +51 -0
  105. pointnext_official-0.1.0/tools/write_checkpoint_manifest.py +69 -0
  106. 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
+ ![docs/misc/wandb.png](docs/misc/wandb.png)
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
+ ![s3dis](docs/projects/misc/s3dis_vis.png)
156
+ ![shapenetpart](docs/projects/misc/shapenetpart_vis.png)
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
+ ![docs/misc/wandb.png](docs/misc/wandb.png)
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
+ ![s3dis](docs/projects/misc/s3dis_vis.png)
118
+ ![shapenetpart](docs/projects/misc/shapenetpart_vis.png)
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