Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning🚀

Dingkang Liang1* ,Tianrui Feng1* ,Xin Zhou1* , Yumeng Zhang2, Zhikang Zou2, and Xiang Bai 1✉️

1 Huazhong University of Science and Technology, 2 Baidu Inc.

(*) equal contribution, (​✉️​) corresponding author.

arXivCode LicensePWCPWCPWCPWC

News

[2025-07-26]PointGST is accepted by TPAMI. 🎉

[2024-10-10]PointGST is released. 🔥

Abstract

Recently, leveraging pre-training techniques to enhance point cloud models has become a hot research topic. However, existing approaches typically require full fine-tuning of pre-trained models to achieve satisfied performance on downstream tasks, accompanying storage-intensive and computationally demanding. To address this issue, we propose a novel Parameter-Efficient Fine-Tuning (PEFT) method for point cloud, called PointGST (Point cloud Graph Spectral Tuning). PointGST freezes the pre-trained model and introduces a lightweight, trainable Point Cloud Spectral Adapter (PCSA) to fine-tune parameters in the spectral domain.

Extensive experiments on challenging point cloud datasets across various tasks demonstrate that PointGST not only outperforms its fully fine-tuning counterpart but also significantly reduces trainable parameters, making it a promising solution for efficient point cloud learning. More importantly, it improves upon a solid baseline by +2.28%, 1.16%, and 2.78%, resulting in 99.48%, 97.76%, and 96.18% on the ScanObjNN OBJ_BG, OBJ_OBLY, and PB_T50_RS datasets, respectively. This advancement establishes a new state-of-the-art, using only 0.67% of the trainable parameters.

Overview

Getting Started

Installation

We recommend using Anaconda for the installation process:

git clone https://github.com/jerryfeng2003/PointGST.git
cd PointGST/

Requirements

conda create -y -n pgst python=3.9
conda activate pgst
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# Chamfer Distance & emdcd ./extensions/chamfer_dist
python setup.py install --user
cd ../emd
python setup.py install --user
# PointNet++
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"# GPU kNN
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl

Datasets

See DATASET.md for details.

Main Results

BaselineTrainable ParametersDatasetConfigAcc.Download
Point-MAE
(ECCV 22)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.5
91.74
90.19
85.29
ckpt
ckpt
ckpt
ckpt
ACT
(ICLR 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.4
93.46
92.60
88.27
ckpt
ckpt
ckpt
ckpt
ReCon
(ICML 23)
0.6MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
93.6
94.49
92.94
89.49
ckpt
ckpt
ckpt
ckpt
PointGPT-L
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
94.8
98.97
97.59
94.83
ckpt
ckpt
ckpt
ckpt
PointGPT-L (voting)
(NeurIPS 24)
2.4MModelNet40
OBJ_BG
OBJ_ONLY
PB_T50_RS
modelnet
scan_objbg
scan_objonly
scan_hardest
95.3
99.48
97.76
96.18
log
log
log
log

The evaluation commands with checkpoints should be in the following format:

CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --config <path/to/cfg> --exp_name <path/to/output> --ckpts <namet># further enable voting mechanism
CUDA_VISIBLE_DEVICES=<GPU> python main.py --test --vote --config <path/to/cfg> --exp_name <path/to/output> --ckpts <name>

All the experiments are conducted on a single NVIDIA 3090 GPU.

t-SNE visualization

# t-SNE on ScanObjectNN
CUDA_VISIBLE_DEVICES=<GPU> python main.py --config <path/to/cfg> --ckpts <path/to/ckpt> --tsne --exp_name <name>

Training

If you plan to fine-tune on top of pretrained models, please download the weights for Point-MAE, ACT, ReCon, or PointGPT accordingly.

CUDA_VISIBLE_DEVICES=<GPU> python main.py --finetune_model --config <path/to/cfg> --ckpts <path/to/ckpt> --exp_name <name>

To Do

  • Release the inference code for classification.
  • Release the checkpoints for classification.
  • Release the training code for classification.

Acknowledgement

This project is based on Point-BERT (paper, code), Point-MAE (paper, code), ACT(paper, code), ReCon (paper, code), PointGPT(paper, code), IDPT (paper, code), and DAPT(paper, code). Thanks for their wonderful works.

Citation

If you find this repository useful in your research, please consider giving a star ⭐ and a citation.

@article{liang2024pointgst,
title={Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning},
author={Liang, Dingkang and Feng, Tianrui and Zhou, Xin and Zhang, Yumeng and Zou, Zhikang and Bai, Xiang},
journal={IEEE transactions on pattern analysis and machine intelligence},
year={2025},
publisher={IEEE}
}

About

[IEEE TPAMI] Parameter-Efficient Fine-Tuning in Spectral Domain for Point Cloud Learning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages