{"id":18930902,"url":"https://github.com/pointcept/pointtransformerv2","last_synced_at":"2025-04-06T11:09:54.207Z","repository":{"id":89722017,"uuid":"548791636","full_name":"Pointcept/PointTransformerV2","owner":"Pointcept","description":"[NeurIPS'22] An official PyTorch implementation of PTv2.","archived":false,"fork":false,"pushed_at":"2023-06-04T16:38:26.000Z","size":786,"stargazers_count":379,"open_issues_count":13,"forks_count":26,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-30T09:09:53.009Z","etag":null,"topics":["3d-vision","point-cloud","pytorch"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Pointcept.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-10-10T07:29:27.000Z","updated_at":"2025-03-23T15:11:43.000Z","dependencies_parsed_at":"2024-01-18T15:51:01.121Z","dependency_job_id":"4d07dc01-8c35-416b-af10-cab5c1ac1142","html_url":"https://github.com/Pointcept/PointTransformerV2","commit_stats":null,"previous_names":["pointcept/pointtransformerv2"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pointcept%2FPointTransformerV2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pointcept%2FPointTransformerV2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pointcept%2FPointTransformerV2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pointcept%2FPointTransformerV2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pointcept","download_url":"https://codeload.github.com/Pointcept/PointTransformerV2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247471521,"owners_count":20944158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-vision","point-cloud","pytorch"],"created_at":"2024-11-08T11:39:25.429Z","updated_at":"2025-04-06T11:09:54.176Z","avatar_url":"https://github.com/Pointcept.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Point Transformer V2\n**This repo is not actively maintained. Please checkout our new codebase** [Pointcept](https://github.com/Pointcept/Pointcept).\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"figures/design.png\" width=\"480\"\u003e\n\u003c/p\u003e\n\n\nThis is a lightweight and easy-to-use codebase for point cloud recognition research supporting indoor \u0026 outdoor point cloud datasets and several backbones, namely **PointCloudRecog** (PCR). The next release version of PCR will further support instance segmentation, object detection, and pretraining.\nThis is an official implementation of the following paper:\n\n- **Point Transformer V2: Grouped Vector Attention and Partition-based Pooling**   \n*Xiaoyang Wu, Yixing Lao, Li Jiang, Xihui Liu, Hengshuang Zhao*  \nNeural Information Processing Systems (NeurIPS) 2022  \n[ [Arxiv](https://arxiv.org/abs/2210.05666) ] [ [Bib](https://xywu.me/research/ptv2/bib.txt) ]\n\n## News\n- *Dec, 2022*: Initial release our PCR codebase and PTv2 official implementation.\n- *Sep, 2022*: [PTv2](https://arxiv.org/abs/2210.05666) accepted by NeurIPS 2022.\n\n## Overview\n\n- [Installation](#installation)\n- [Data Preparation](#data-preparation)\n- [Quick Start](#quick-start)\n- [Model Zoo](#model-zoo)\n- [Citation](#citation)\n- [Acknowledgement](#acknowledgement)\n\n## Installation\n\n### Requirements\n- Ubuntu: 18.04 or higher\n- CUDA: 10.2 or higher\n- PyTorch: 1.10.0 ~ 1.11.0\n- Hardware: 4 x 24G memory GPUs or better\n\n### Conda Environment\n\n```bash\nconda create -n pcr python=3.8 -y\nconda activate pcr\nconda install ninja -y\nconda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge -y\nconda install -c anaconda h5py pyyaml -y\nconda install -c conda-forge sharedarray tensorboardx yapf addict einops scipy plyfile termcolor timm -y\nconda install -c pyg pytorch-cluster pytorch-scatter pytorch-sparse -y\npip install torch-geometric\n\n# spconv (SparseUNet)\n# refer https://github.com/traveller59/spconv\npip install spconv-cu113\n```\n\n### Optional Installation\n\n```bash\n# Open3D (Visualization)\npip install open3d\n\n# PTv1 \u0026 PTv2\ncd libs/pointops\npython setup.py install\ncd ../..\n\n# stratified transformer\npip install torch-points3d\n\n# fix dependence, caused by install torch-points3d \npip uninstall SharedArray\npip install SharedArray==3.2.1\n\ncd libs/pointops2\npython setup.py install\ncd ../..\n\n# MinkowskiEngine (SparseUNet)\n# refer https://github.com/NVIDIA/MinkowskiEngine\n\n# torchsparse (SPVCNN)\n# refer https://github.com/mit-han-lab/torchsparse\n# install method without sudo apt install\nconda install google-sparsehash -c bioconda\nexport C_INCLUDE_PATH=${CONDA_PREFIX}/include:$C_INCLUDE_PATH\nexport CPLUS_INCLUDE_PATH=${CONDA_PREFIX}/include:CPLUS_INCLUDE_PATH\npip install --upgrade git+https://github.com/mit-han-lab/torchsparse.git\n```\n\n## Data Preparation\n\n### ScanNet v2\n\nThe preprocessing support semantic and instance segmentation for both `ScanNet20` and `ScanNet200`.\n\n- Download the [ScanNet](http://www.scan-net.org/) v2 dataset.\n- Run preprocessing code for raw ScanNet as follows:\n\n```bash\n# RAW_SCANNET_DIR: the directory of downloaded ScanNet v2 raw dataset.\n# PROCESSED_SCANNET_DIR: the directory of processed ScanNet dataset (output dir).\npython pcr/datasets/preprocessing/scannet/preprocess_scannet.py --dataset_root ${RAW_SCANNET_DIR} --output_root ${PROCESSED_SCANNET_DIR}\n```\n\n- Link processed dataset to codebase:\n```bash\n# PROCESSED_SCANNET_DIR: the directory of processed ScanNet dataset.\nmkdir data\nln -s ${RAW_SCANNET_DIR} ${CODEBASE_DIR}/data/scannet\n```\n\n### S3DIS\n\n- Download S3DIS data by filling this [Google form](https://docs.google.com/forms/d/e/1FAIpQLScDimvNMCGhy_rmBA2gHfDu3naktRm6A8BPwAWWDv-Uhm6Shw/viewform?c=0\u0026w=1). Download the `Stanford3dDataset_v1.2_Aligned_Version.zip` file and unzip it.\n- The original S3DIS data contains some bugs data need manually fix it. `xxx^@xxx`\n- Run preprocessing code for S3DIS as follows:\n\n```bash\n# RAW_S3DIS_DIR: the directory of downloaded Stanford3dDataset_v1.2_Aligned_Version dataset.\n# PROCESSED_S3DIS_DIR: the directory of processed S3DIS dataset (output dir).\npython pcr/datasets/preprocessing/s3dis/preprocess_s3dis.py --dataset_root ${RAW_S3DIS_DIR} --output_root ${PROCESSED_S3DIS_DIR}\n```\n- Link processed dataset to codebase.\n```bash\n# PROCESSED_S3DIS_DIR: the directory of processed S3DIS dataset.\nmkdir data\nln -s ${RAW_S3DIS_DIR} ${CODEBASE_DIR}/data/s3dis\n```\n\n### Semantic KITTI\n- Download [Semantic KITTI](http://www.semantic-kitti.org/dataset.html#download) dataset.\n- Link dataset to codebase.\n```bash\n# SEMANTIC_KITTI_DIR: the directory of Semantic KITTI dataset.\nmkdir data\nln -s ${SEMANTIC_KITTI_DIR} ${CODEBASE_DIR}/data/semantic_kitti\n```\n\n## Quick Start\n\n### Training\n**Train from scratch.** The training processing is based on configs in `configs` folder. \nThe training script will generate an experiment folder in `exp` folder and backup essential code in the experiment folder.\nTraining config, log, tensorboard and checkpoints will also be saved into the experiment folder during the training process.\n```bash\nexport CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}\n# Script (Recommended)\nsh scripts/train.sh -p ${INTERPRETER_PATH} -g ${NUM_GPU} -d ${DATASET_NAME} -c ${CONFIG_NAME} -n ${EXP_NAME}\n# Direct\nexport PYTHONPATH=./\npython tools/train.py --config-file ${CONFIG_PATH} --num-gpus ${NUM_GPU} --options save_path=${SAVE_PATH}\n```\n\nFor example:\n```bash\n# By script (Recommended)\n# -p is default set as python and can be ignored\nsh scripts/train.sh -p python -d scannet -c semseg-ptv2m2-0-base -n semseg-ptv2m2-0-base\n# Direct\nexport PYTHONPATH=./\npython tools/train.py --config-file configs/scannet/semseg-ptv2m2-0-base.py --options save_path=exp/scannet/semseg-ptv2m2-0-base\n```\n**Resume training from checkpoint.** If the training process is interrupted by accident, the following script can resume training from a given checkpoint.\n```bash\nexport CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}\n# Script (Recommended)\n# simply add \"-r true\"\nsh scripts/train.sh -p ${INTERPRETER_PATH} -g ${NUM_GPU} -d ${DATASET_NAME} -c ${CONFIG_NAME} -n ${EXP_NAME} -r true\n# Direct\nexport PYTHONPATH=./\npython tools/train.py --config-file ${CONFIG_PATH} --num-gpus ${NUM_GPU} --options save_path=${SAVE_PATH} resume=True weight=${CHECKPOINT_PATH}\n```\n\n### Testing\nThe validation during training only evaluate model on point clouds after grid sampling (voxelization) and testing is need to achieve a precise evaluate result.\nOur testing code support TTA (test time augmentation) testing.\n(Currently only support testing on a single GPU, I might add support to multi-gpus testing in the future version.)\n\n```bash\n# By script (Based on experiment folder created by training script)\nsh scripts/test.sh -p ${INTERPRETER_PATH} -d ${DATASET_NAME} -n ${EXP_NAME} -w ${CHECKPOINT_NAME}\n# Direct\nexport PYTHONPATH=./\npython tools/test.py --config-file ${CONFIG_PATH} --options save_path=${SAVE_PATH} weight=${CHECKPOINT_PATH}\n```\n\nFor example:\n```bash\n# By script (Based on experiment folder created by training script)\n# -p is default set as python and can be ignored\n# -w is default set as model_best and can be ignored\nsh scripts/test.sh -p python -d scannet -n semseg-ptv2m2-0-base -w model_best\n# Direct\nexport PYTHONPATH=./\npython tools/test.py --config-file configs/scannet/semseg-ptv2m2-0-base.py --options save_path=exp/scannet/semseg-ptv2m2-0-base weight=exp/scannet/semseg-ptv2m2-0-base/models/model_best.pth\n```\n\n### Offset\n`Offset` is the separator of point clouds in batch data, and it is similar to the concept of `Batch` in PyG. \nA visual illustration of batch and offset is as follows:\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"figures/offset.png\" width=\"480\"\u003e\n\u003c/p\u003e\n\n## Model Zoo\n\nThe PCR codebase supports most combinations of supporting datasets and models, and I haven't tested and tuned all the combinations. Consequently, I list configs for some of them. It would be helpful to reach me if you find a better setting.\n\nCurrently, PCR only focuses on semantic segmentation, but in the next version, I will introduce the hook mechanism to support pretraining, instance segmentation, and object detection. The released version contains some code for classification, but I did not maintain it since object-level recognition is quite different from scene-level recognition. I will focus more on the scene-level point clouds. Nevertheless, the code framework support object classification. If you want to run classification tasks, you can modify the codebase from these unmaintained codes for object classification.\n\n**Recommendations:** \n- PTv2m2 (good performance)\n- SparseUNet-SpConv (fast, lightweight and easy to install)\n\n(Please email me your recommendations, I might add support in a future version)\n\n### Point Transformer V1 \u0026 V2\n- **PTv2 mode2 (recommend)**\n\nThe original PTv2 was trained on 4 * RTX a6000 (48G memory). Even enabling AMP, the memory cost of the original PTv2 is slightly larger than 24G. Considering GPUs with 24G memory are much more accessible, I tuned the PTv2 on the latest PCR codebase and made it runnable on 4 * RTX 3090 machines.\n\n`PTv2 Mode2` enables AMP and disables _Position Encoding Multiplier_ \u0026 _Grouped Linear_. During our further research, we found that precise coordinates are not necessary for point cloud understanding (Replacing precise coordinates with grid coordinates doesn't influence the performance. Also, SparseUNet is an example). As for Grouped Linear, my implementation of Grouped Linear seems to cost more memory than the Linear layer provided by PyTorch. Benefiting from the codebase and better parameter tuning, we also relieve the overfitting problem. The reproducing performance is even better than the results reported in our paper.\n\nExample running script is as follows:\n\n```bash\n# ptv2m2: PTv2 mode2, disable PEM \u0026 Grouped Linear, GPU memory cost \u003c 24G (recommend)\n# ScanNet\nsh scripts/train.sh -g 4 -d scannet -c semseg-ptv2m2-0-base -n semseg-ptv2m2-0-base\n# ScanNet test benchmark (train on train set and val set)\nsh scripts/train.sh -g 4 -d scannet -c semseg-ptv2m2-1-benchmark-submit -n semseg-ptv2m2-1-benchmark-submit\n# ScanNet200\nsh scripts/train.sh -g 4 -d scannet200 -c semseg-ptv2m2-0-base -n semseg-ptv2m2-0-base\n# S3DIS\nsh scripts/train.sh -g 4 -d s3dis -c semseg-ptv2m2-0-base -n semseg-ptv2m2-0-base\n```\n\nExample training and testing records are as follows:\n\n|     Dataset     | mIoU | mAcc | allAcc | Config |                            Train                             |                             Test                             |                         Tensorboard                          |\n| :-------------: | :--: | :--: | :----: | :----: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |\n|  ScanNet v2 20  | 75.5 | 82.9 |  91.2  | [config](configs/scannet/semseg-ptv2m2-0-base.py) | [log](https://xywu.me/research/pcr/logs/semseg-scannet20-ptv2m2/train.log) | [log](https://xywu.me/research/pcr/logs/semseg-scannet20-ptv2m2/test.log) | [tensorboard](https://tensorboard.dev/experiment/2eyHRBfrRyyywUqej9yh2w/#scalars\u0026_smoothingWeight=0) |\n|  ScanNet v2 200 | 31.9 | 39.2 |  82.7  | [config](configs/scannet200/semseg-ptv2m2-0-base.py) | [log](https://xywu.me/research/pcr/logs/semseg-scannet200-ptv2m2/train.log) | [log](https://xywu.me/research/pcr/logs/semseg-scannet200-ptv2m2/test.log) | [tensorboard](https://tensorboard.dev/experiment/V62nQuVgQKeaBAJKP59juw/#scalars\u0026_smoothingWeight=0) |\n|  S3DIS Area 5   | 72.6 | 78.0 |  91.6  | [config](configs/s3dis/semseg-ptv2m2-0-base.py) | [log](https://xywu.me/research/pcr/logs/semseg-s3dis-ptv2m2/train.log) | [log](https://xywu.me/research/pcr/logs/semseg-s3dis-ptv2m2/test.log) | [tensorboard](https://tensorboard.dev/experiment/DKbqkNvGTX6BxdHZx6Vi7Q/#scalars\u0026_smoothingWeight=0) |\n\n`*Dataset` represents reported results from an older version of the PCR codebase.\n\n- **PTv2 mode1**\n\n`PTv2 mode1` is the original PTv2 we reported in our paper, example running script is as follows:\n\n```bash\n# ptv2m1: PTv2 mode1, Original PTv2, GPU memory cost \u003e 24G\n# ScanNet\nsh scripts/train.sh -g 4 -d scannet -c semseg-ptv2m1-0-base -n semseg-ptv2m1-0-base\n# ScanNet200\nsh scripts/train.sh -g 4 -d scannet200 -c semseg-ptv2m1-0-base -n semseg-ptv2m1-0-base\n# S3DIS\nsh scripts/train.sh -g 4 -d s3dis -c semseg-ptv2m1-0-base -n semseg-ptv2m1-0-base\n```\n\n- **PTv1**\n\nThe original PTv1 is also available in our PCR codebase. I haven't run PTv1 for a long time, but I have ensured that the example running script works well. \n\n```bash\n# ScanNet\nsh scripts/train.sh -g 4 -d scannet -c semseg-ptv1-0-base -n semseg-ptv1-0-base\n# ScanNet200\nsh scripts/train.sh -g 4 -d scannet200 -c semseg-ptv1-0-base -n semseg-ptv1-0-base\n# S3DIS\nsh scripts/train.sh -g 4 -d s3dis -c semseg-ptv1-0-base -n semseg-ptv1-0-base\n```\n\n\n### Stratified Transformer\n1. Uncomment `# from .stratified_transformer import *` in `pcr/models/__init__.py`.\n2. Refer [Optional Installation](installation) to install dependence.\n3. Training with the following example running scripts:\n```bash\n# stv1m1: Stratified Transformer mode1, Modified from the original Stratified Transformer code.\n# ptv2m2: Stratified Transformer mode2, My rewrite version (recommend).\n\n# ScanNet\nsh scripts/train.sh -g 4 -d scannet -c semseg-stv1m2-0-refined -n semseg-stv1m2-0-refined\nsh scripts/train.sh -g 4 -d scannet -c semseg-stv1m1-0-origin -n semseg-stv1m1-0-origin\n# ScanNet200\nsh scripts/train.sh -g 4 -d scannet200 -c semseg-stv1m2-0-refined -n semseg-stv1m2-0-refined\n# S3DIS\nsh scripts/train.sh -g 4 -d s3dis -c semseg-stv1m2-0-refined -n semseg-stv1m2-0-refined\n```\n*I did not tune the parameters for Stratified Transformer and just ensured it could run.*\n\n### SparseUNet\n\nThe PCR codebase provides `SparseUNet` implemented by `SpConv` and `MinkowskiEngine`. The SpConv version is recommended since SpConv is easy to install and faster than MinkowskiEngine. Meanwhile, the PCR codebase will add more support to instance segmentation and object detection in the future version. SpConv is also widely applied in these areas.\n\n- **SpConv (recommend)**\n\nThe SpConv version `SparseUNet` in the codebase was fully rewrite from [Li Jiang](https://llijiang.github.io/)'s code, example running script is as follows:\n\n```bash\n# Uncomment \"# from .sparse_unet import *\" in \"pcr/models/__init__.py\"\n# Uncomment \"# from .spconv_unet import *\" in \"pcr/models/sparse_unet/__init__.py\"\n# ScanNet val\nsh scripts/train.sh -g 4 -d scannet -c semseg-spunet34c-0-base -n semseg-spunet34c-0-base\n# ScanNet200\nsh scripts/train.sh -g 4 -d scannet200 -c semseg-spunet34c-0-base -n semseg-spunet34c-0-base\n# S3DIS\nsh scripts/train.sh -g 4 -d s3dis -c semseg-spunet34c-0-base -n semseg-spunet34c-0-base\n# Semantic-KITTI\nsh scripts/train.sh -g 2 -d semantic-kitti -c semseg-spunet34c-0-base -n semseg-spunet34c-0-base\n```\n\nExample training and testing records are as follows:\n\n|    Dataset     | mIoU | mAcc | allAcc | Config |                            Train                             | Test |                         Tensorboard                          |\n| :------------: | :--: | :--: | :----: | :----: | :----------------------------------------------------------: | :--: | :----------------------------------------------------------: |\n| ScanNet v2 20  | 73.6 | 82.2 |  90.4  | [config](configs/scannet/semseg-spunet34c-0-base.py) | [log](https://xywu.me/research/pcr/logs/semseg-scannet20-spunet34c/train.log) | log  | [tensorboard](https://tensorboard.dev/experiment/A9w7yGCjRe6l4gwzNX2kOA/#scalars\u0026_smoothingWeight=0) |\n| ScanNet v2 200 | 28.8 | 36.1 |  81.1  | [config](configs/scannet200/semseg-spunet34c-0-base.py) | [log](https://xywu.me/research/pcr/logs/semseg-scannet200-spunet34c/train.log) | [log](https://xywu.me/research/pcr/logs/semseg-scannet200-spunet34c/test.log)  | [tensorboard](https://tensorboard.dev/experiment/oJWSEHBeTeOmT7M5uva5Ig/#scalars\u0026_smoothingWeight=0) |\n|  S3DIS Area 5  | 67.7 | 73.1 |  90.1  | [config](configs/s3dis/semseg-spunet34c-0-base.py) | [log](https://xywu.me/research/pcr/logs/semseg-s3dis-spunet34c/train.log) | [log](https://xywu.me/research/pcr/logs/semseg-s3dis-spunet34c/test.log) | [tensorboard](https://tensorboard.dev/experiment/XGfX1SBBTpq0MrfQ6gO4IQ/#scalars\u0026_smoothingWeight=0) |\n\n\n`*Dataset ` represents reported results from an older version of the PCR codebase.\n\n- **MinkowskiEngine**\n\nThe MinkowskiEngine version `SparseUNet` in the codebase was modified from original MinkowskiEngine repo, and example running script is as follows:\n\n```bash\n# Uncomment \"# from .sparse_unet import *\" in \"pcr/models/__init__.py\"\n# Uncomment \"# from .mink_unet import *\" in \"pcr/models/sparse_unet/__init__.py\"\n# ScanNet\nsh scripts/train.sh -g 4 -d scannet -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base\n# ScanNet200\nsh scripts/train.sh -g 4 -d scannet200 -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base\n# S3DIS\nsh scripts/train.sh -g 4 -d s3dis -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base\n# Semantic-KITTI\nsh scripts/train.sh -g 2 -d semantic-kitti -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base\n```\n\n### SPVCNN\n`SPVCNN` is baseline model of [SPVNAS](https://github.com/mit-han-lab/spvnas), it is also a practical baseline for outdoor dataset.\n\n```bash\n# Semantic-KITTI\nsh scripts/train.sh -g 2 -d semantic-kitti -c semseg-spvcnn34c-0-base -n semseg-spvcnn34c-0-base\n```\n\n## Citation\nIf you find this work useful to your research, please cite our work:\n```\n@inproceedings{wu2022point,\n  title     = {Point transformer V2: Grouped Vector Attention and Partition-based Pooling},\n  author    = {Wu, Xiaoyang and Lao, Yixing and Jiang, Li and Liu, Xihui and Zhao, Hengshuang},\n  booktitle = {NeurIPS},\n  year      = {2022}\n}\n```\n\n## Acknowledgement\nThe repo is derived from Point Transformer code and inspirited by several repos, e.g., [MinkowskiEngine](https://github.com/NVIDIA/MinkowskiEngine), [pointnet2](https://github.com/charlesq34/pointnet2), [mmcv](https://github.com/open-mmlab/mmcv/tree/master/mmcv), and [Detectron2](https://github.com/facebookresearch/detectron2).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpointcept%2Fpointtransformerv2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpointcept%2Fpointtransformerv2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpointcept%2Fpointtransformerv2/lists"}