superpoint_transformer
Superpoint Transformer 是一款基于 PyTorch 开发的开源深度学习架构,专为大规模 3D 场景的语义分割任务设计。它源自 ICCV'23 等顶级会议的研究成果,旨在解决传统点云处理方法在面对海量数据时计算效率低、显存占用高以及难以捕捉长距离依赖关系的痛点。
该工具的核心亮点在于其独特的“超点”(Superpoint)机制。它首先通过快速算法将原始点云分层聚类为具有语义一致性的超点结构,大幅减少了需要处理的数据单元数量;随后利用自注意力机制,在多尺度上高效挖掘超点间的空间与语义关联。这种设计不仅显著提升了推理速度,还在 S3DIS、KITTI-360 和 DALES 等多个权威数据集上取得了领先的精度表现。此外,项目还衍生支持了全景分割(SuperCluster)及更轻量级的 EZ-SP 方案,展现了极强的扩展性。
Superpoint Transformer 非常适合从事计算机视觉、自动驾驶感知、机器人导航及数字孪生领域的研究人员与开发者使用。如果你需要在资源受限的环境下处理复杂的 3D 点云数据,或希望复现前沿的 3D 分割算法,这将是一个高效且可靠的选择。
使用场景
某自动驾驶感知团队正在处理城市街道的海量激光雷达点云数据,需要实时识别道路、车辆、行人及交通设施以构建高精地图。
没有 superpoint_transformer 时
- 计算资源爆炸:直接对数亿个原始点进行逐点特征提取,显存占用极高,普通工作站无法加载完整街区数据,必须强行切割导致上下文丢失。
- 推理速度缓慢:传统稀疏卷积网络在处理复杂场景时延迟过高,无法满足自动驾驶系统对实时性的严苛要求,帧率远低于安全阈值。
- 小目标识别差:由于缺乏多尺度关联机制,路灯、交通标志等细小物体常被误判为背景噪声,语义分割的边界模糊不清。
- 工程部署困难:模型结构复杂且难以优化,从训练环境迁移到车载边缘设备时,量化精度损失严重,调试周期长达数周。
使用 superpoint_transformer 后
- 内存效率飞跃:利用分层超点(Superpoint)结构将原始点云聚合,显存占用降低一个数量级,轻松在单卡上处理公里级连续场景。
- 实时性能达标:基于超点的自注意力机制大幅减少计算量,推理速度提升数倍,在保持高精度的同时满足车载系统的实时帧率需求。
- 细节捕捉精准:通过多尺度超点图聚类,有效捕捉局部几何特征与全局语义关系,显著提升了细小交通设施的识别准确率与边界清晰度。
- 落地流程顺畅:依托 PyTorch Lightning 和 Hydra 的模块化设计,模型训练与导出流程标准化,快速完成从算法验证到嵌入式端的高效部署。
superpoint_transformer 通过将海量点云转化为高效的超点图结构,彻底解决了大规模 3D 场景语义分割中精度与速度的矛盾,让高精地图构建真正具备工程落地价值。
运行环境要求
- 未说明
必需 NVIDIA GPU(文中多次提及单卡训练和推理),具体型号和显存未说明,需支持 PyTorch 2.2+
未说明

快速开始
Superpoint Transformer
官方实现,用于
高效3D语义分割的Superpoint Transformer(ICCV'23)
基于Superpoint图聚类的可扩展3D全景分割(3DV'24 口头报告)
EZ-SP:快速轻量级的Superpoint基3D分割(ICRA'26)
如果您喜欢或只是使用本项目,请别忘了给仓库点个赞⭐,这对我们意义重大!
📌 描述
Superpoint Transformer
Superpoint Transformer (SPT) 是一种基于superpoint的Transformer架构🤖,能够高效⚡地对大规模3D场景进行语义分割。该方法包含一个快速算法,可以将点云分割成层次化的superpoint结构,同时利用自注意力机制来挖掘不同尺度下superpoint之间的关系。
| ✨ SPT 数据概览 ✨ |
|---|
| 📊 S3DIS 6折交叉验证(76.0 mIoU) |
| 📊 KITTI-360 验证集(63.5 mIoU) |
| 📊 DALES 数据集(79.6 mIoU) |
| 🦋 21.2万参数(与PointNeXt相比减少200倍,与Stratified Transformer相比减少40倍) |
| ⚡ S3DIS 训练在1张GPU上仅需3小时(与PointNeXt相比缩短7倍,与Stratified Transformer相比缩短70倍) |
| ⚡ 预处理速度比SPG快7倍 |
SuperCluster
SuperCluster 是一种基于超点的架构,用于对(非常)大型 3D 场景进行全景分割 🐘,其基础为 SPT。我们将全景分割任务建模为一个 可扩展的超点图聚类 问题。为此,我们的模型被训练来预测一个图优化问题的输入参数,该问题的解即为全景分割结果 💡。这种建模方式使得我们仅需使用节点级和边级的目标函数来监督模型训练,从而避免了在训练时计算实际的全景分割结果以及相关的匹配问题。
在推理阶段,我们高效的并行化算法会求解这个小型的图优化问题,最终生成物体实例 👥。由于其轻量级的骨干网络和可扩展的建模方式,SuperCluster 能够在单个 GPU 上一次性处理前所未有的大规模场景 🚀,且模型参数量不足 100 万 🦋。
| ✨ SuperCluster 数据概览 ✨ |
|---|
| 📊 S3DIS 6-Fold (55.9 PQ) |
| 📊 S3DIS Area 5 (50.1 PQ) |
| 📊 ScanNet Val (58.7 PQ) |
| 📊 KITTI-360 Val (48.3 PQ) |
| 📊 DALES (61.2 PQ) |
| 🦋 212k 参数 (PointGroup ÷ 37) |
| ⚡ S3DIS 训练只需 4 小时,单 GPU |
| ⚡ 7.8km² 的 1800 万点 场景瓦片,仅需 10.1 秒,单 GPU |
EZ-SP (Easy Superpoints)
EZ-SP 相较于 SPT 主要有两项改进:
- 预处理和推理速度大幅提升
- 分割参数化更加简单且可学习
EZ-SP 用一种 快速且可学习的 GPU 加速分割方法 替代了 SPT 中耗时的、基于 CPU 的切分追踪分割步骤。首先,我们训练一个小型卷积骨干网络,将输入场景中的每个点嵌入到低维空间中,在该空间内,来自不同语义类别的相邻点会被相互推开。随后,我们新开发的 GPU 加速图聚类算法 会将具有相似嵌入特征的邻近点分组在一起,同时鼓励形成简洁的簇边界,从而生成语义上同质的超点。这些超点可以进一步用于 SPT 的语义分割框架中。
| ✨ EZ-SP 数据概览 ✨ |
|---|
| 📊 S3DIS 6-Fold (76.1 mIoU) |
| 📊 S3DIS Area 5 (69.6 mIoU) |
| 📊 KITTI-360 Val (62.0 mIoU) |
| 📊 DALES (79.4 mIoU) |
| 🦋 392k 参数 |
| ⚡️ 比 PTv3 全流程语义分割快 72 倍 |
| ⚡️ 比 SPT 全流程语义分割快 5.3 倍 |
注:如果您主要关注的是 EZ-SP 论文(https://arxiv.org/abs/2512.00385)中提出的快速图连通分量及分割算法,请参阅我们的 torch-graph-components 库。
📰 更新
- 31.01.2026 我们的论文EZ-SP:基于超点的快速轻量级3D分割已被**ICRA'26**接收 🥳
- 22.01.2026 将EZ-SP中引入的图连通分量和图划分算法以独立库的形式发布: torch-graph-components。 我们希望这能促进这些核心组件在其他基于图的项目中的应用。
- 27.11.2025 针对我们的可学习、GPU加速的划分的重大代码发布,实现了 EZ-SP:基于超点的快速轻量级3D分割。 新版本对代码库进行了一些不向后兼容的改动。 我们尽力记录了这些破坏性变更,并提供了说明和脚本,帮助旧版本用户迁移到新的代码库。 更多详情请参阅CHANGELOG❗
- 27.06.2024 发布了我们的Superpoint Transformer🧑🏫教程: 幻灯片、 笔记本以及视频。 如果你刚开始接触这个项目,不妨看看这些资料!
- 21.06.2024 Damien将于**📅 27.06.2024 下午1点(CEST)举办一场关于Superpoint Transformer的🧑🏫教程**。 如果你想获得该项目的实际操作经验,一定要来参加! 注册链接。
- 28.02.2024 针对全景分割的重大代码发布,实现了
基于超点图聚类的可扩展3D全景分割。
新版本还实现了备受期待的功能,如Lightning的
predict()行为、 体素分辨率和全分辨率预测。 部分依赖项和仓库结构的更改是不向后兼容的。如果你之前使用过旧版本的代码,建议重新安装你的conda环境,并重新运行数据预处理或数据集处理❗ - 15.10.2023 我们的论文**基于超点图聚类的可扩展3D全景分割被接受在3DV'24上作口头报告** 🥳
- 06.10.2023 欢迎参观我们在**ICCV'23上展示的海报, 主题为利用Superpoint Transformer实现高效的3D语义分割**。
- 14.07.2023 我们的论文**利用Superpoint Transformer实现高效的3D语义分割被ICCV'23**接收 🥳
- 15.06.2023 正式发布 🌱
💻 环境要求
该项目已在以下环境中测试通过:
- Linux操作系统
- 64G 内存
- NVIDIA GTX 1080 Ti 11G、NVIDIA V100 32G、NVIDIA A40 48G
- CUDA 11.8 和 12.1
- conda 23.3.1
🏗 安装
只需运行install.sh,即可在名为spt的新conda环境中安装所有依赖项。
# 创建名为'spt'的conda环境并安装依赖
./install.sh
可选依赖:TorchSparse是一个可选依赖,支持稀疏3D卷积,用于EZ-SP模型中。若需安装包含该依赖的环境,请使用:
# 创建名为'spt'的conda环境并安装所有依赖项 + TorchSparse
./install.sh with_torchsparse
注:请参阅数据集页面,了解如何设置你的数据集路径和文件结构。
🔩 项目结构
└── superpoint_transformer
│
├── configs # Hydra配置文件
│ ├── callbacks # 回调配置
│ ├── data # 数据配置
│ ├── debug # 调试配置
│ ├── experiment # 实验配置
│ ├── extras # 其他工具配置
│ ├── hparams_search # 超参数搜索配置
│ ├── hydra # Hydra配置
│ ├── local # 本地配置
│ ├── logger # 日志配置
│ ├── model # 模型配置
│ ├── paths # 项目路径配置
│ ├── trainer # 训练配置
│ │
│ ├── eval.yaml # 评估主配置
│ └── train.yaml # 训练主配置
│
├── data # 项目数据(详见docs/datasets.md)
│
├── docs # 文档
│
├── logs # 由hydra和lightning日志器生成的日志
│
├── media # 展示项目的媒体资源
│
├── notebooks # Jupyter笔记本
│
├── scripts # Shell脚本
│
├── src # 源代码
│ ├── data # 分层划分的数据结构
│ ├── datamodules # Lightning DataModules
│ ├── datasets # 数据集
│ ├── dependencies # 编译后的依赖
│ ├── loader # DataLoader
│ ├── loss # 损失函数
│ ├── metrics # 指标
│ ├── models # 模型架构
│ ├── nn # 模型构建模块
│ ├── optim # 优化
│ ├── transforms # 变换、预变换等功能
│ ├── utils # 工具函数
│ ├── visualization # 交互式可视化工具
│ │
│ ├── eval.py # 运行评估
│ └── train.py # 运行训练
│
├── tests # 各类测试
│
├── .env.example # 存储私有环境变量的示例文件
├── .gitignore # Git忽略的文件列表
├── .pre-commit-config.yaml # 代码格式化预提交钩子配置
├── install.sh # 安装脚本
├── LICENSE # 项目许可证
└── README.md
注:有关
data/的更多信息,请参阅数据集页面。
注:有关
logs/的更多信息,请参阅日志页面。
🚀 使用
数据集
请参阅数据集页面,以设置你的数据集。
评估
使用以下命令结构从检查点文件 checkpoint.ckpt 评估我们的模型,其中 <task> 应为 semantic 表示使用 SPT,panoptic 表示使用 SuperCluster:
# 在 <dataset> 数据集上评估 <task> 分割任务
python src/eval.py experiment=<task>/<dataset> ckpt_path=/path/to/your/checkpoint.ckpt
一些示例:
# 在 S3DIS 第 5 折上评估 SPT
python src/eval.py experiment=semantic/s3dis datamodule.fold=5 ckpt_path=/path/to/your/checkpoint.ckpt
# 在 KITTI-360 验证集上评估 SPT
python src/eval.py experiment=semantic/kitti360 ckpt_path=/path/to/your/checkpoint.ckpt
# 在 DALES 上评估 SPT
python src/eval.py experiment=semantic/dales ckpt_path=/path/to/your/checkpoint.ckpt
# 在 S3DIS 第 5 折上评估 SuperCluster
python src/eval.py experiment=panoptic/s3dis datamodule.fold=5 ckpt_path=/path/to/your/checkpoint.ckpt
# 在 S3DIS 第 5 折上评估 SuperCluster,将 {wall, floor, ceiling} 定义为 'stuff'
python src/eval.py experiment=panoptic/s3dis_with_stuff datamodule.fold=5 ckpt_path=/path/to/your/checkpoint.ckpt
# 在 ScanNet 验证集上评估 SuperCluster
python src/eval.py experiment=panoptic/scannet ckpt_path=/path/to/your/checkpoint.ckpt
# 在 KITTI-360 验证集上评估 SuperCluster
python src/eval.py experiment=panoptic/kitti360 ckpt_path=/path/to/your/checkpoint.ckpt
# 在 DALES 上评估 SuperCluster
python src/eval.py experiment=panoptic/dales ckpt_path=/path/to/your/checkpoint.ckpt
# 在 DALES 上评估 EZ-SP
python src/eval.py experiment=semantic/dales_ezsp ckpt_path=/path/to/your/checkpoint.ckpt datamodule.pretrained_cnn_ckpt_path=/path/to/your/partition_checkpoint.ckpt
注意:
SPT 和 SPT-nano 模型在 S3DIS 6-Fold、KITTI-360 Val 和 DALES 上的预训练权重可在以下链接获取:
SuperCluster 模型在 S3DIS 6-Fold、S3DIS 6-Fold with stuff、ScanNet Val、KITTI-360 Val 和 DALES 上的预训练权重可在以下链接获取:
EZ-SP 模型在 S3DIS 6-Fold、KITTI-360 Val 和 DALES 上的预训练权重可在以下链接获取:
训练
SPT & SuperCluster
使用以下命令结构在 32G 显存的 GPU 上训练我们的模型,其中 <task> 应为 semantic 表示使用 SPT,panoptic 表示使用 SuperCluster:
# 在 <dataset> 数据集上训练 <task> 分割任务
python src/train.py experiment=<task>/<dataset>
一些示例:
# 在 S3DIS 第 5 折上训练 SPT
python src/train.py experiment=semantic/s3dis datamodule.fold=5
# 在 KITTI-360 验证集上训练 SPT
python src/train.py experiment=semantic/kitti360
# 在 DALES 上训练 SPT
python src/train.py experiment=semantic/dales
# 在 S3DIS 第 5 折上训练 SuperCluster
python src/train.py experiment=panoptic/s3dis datamodule.fold=5
# 在 S3DIS 第 5 折上训练 SuperCluster,并将 {wall, floor, ceiling} 定义为 'stuff'
python src/train.py experiment=panoptic/s3dis_with_stuff datamodule.fold=5
# 在 ScanNet 验证集上训练 SuperCluster
python src/train.py experiment=panoptic/scannet
# 在 KITTI-360 验证集上训练 SuperCluster
python src/train.py experiment=panoptic/kitti360
# 在 DALES 上训练 SuperCluster
python src/train.py experiment=panoptic/dales
若需在 11G 显存的 GPU 上训练 💾(训练时间和性能可能会有所不同),可使用以下命令:
# 在 S3DIS 第 5 折上训练 SPT
python src/train.py experiment=semantic/s3dis_11g datamodule.fold=5
# 在 KITTI-360 验证集上训练 SPT
python src/train.py experiment=semantic/kitti360_11g
# 在 DALES 上训练 SPT
python src/train.py experiment=semantic/dales_11g
# 在 S3DIS 第 5 折上训练 SuperCluster
python src/train.py experiment=panoptic/s3dis_11g datamodule.fold=5
# 在 S3DIS 第 5 折上训练 SuperCluster,并将 {wall, floor, ceiling} 定义为 'stuff'
python src/train.py experiment=panoptic/s3dis_with_stuff_11g datamodule.fold=5
# 在 ScanNet 验证集上训练 SuperCluster
python src/train.py experiment=panoptic/scannet_11g
# 在 KITTI-360 验证集上训练 SuperCluster
python src/train.py experiment=panoptic/kitti360_11g
# 在 DALES 数据集上训练 SuperCluster
python src/train.py experiment=panoptic/dales_11g
注意: 遇到 CUDA 内存不足错误 💀💾 吗?请参阅我们专门的 故障排除部分。
注意: 其他开箱即用的配置文件位于
configs/experiment/。您可以通过组合配置文件轻松设计自己的实验:# 在 DALES 数据集上训练 Nano-3 模型 50 个 epoch python src/train.py datamodule=dales model=nano-3 trainer.max_epochs=50有关配置系统的工作原理以及 Lightning+Hydra 组合的所有强大优势,请参阅 Lightning-Hydra。
注意: 默认情况下,您的日志会自动上传到 Weights and Biases,您可以在那里跟踪和比较您的实验。其他日志记录器可在
configs/logger/中找到。有关日志记录选项的更多信息,请参阅 Lightning-Hydra。
注:当前 EZ-SP 实现支持 <dataset>,取值为 s3dis、kitti360 和 dales。
EZ-SP
我们的 EZ-SP 方法包含两个训练阶段。
我们训练一个小型模型,用于学习超点划分的逐点特征,通过在语义边界上解决对比任务来实现。
然后我们训练一个超点 Transformer 模型,该模型以这些点特征作为输入,并基于相关的层次化划分进行推理,通过解决语义分类任务来完成。
注意: 如果您主要关注的是在 EZ-SP 论文 中介绍的快速图连通分量及划分算法, 请查看我们的 torch-graph-components 库。
1. 训练划分模型
python src/train.py experiment=partition/<dataset>_ezsp
检查点应记录在
logs/train/runs/<run_dir>/checkpoints/last.ckpt
(请检查您的 bash 和 wandb 日志 😉)。
注意:
config/experiments/partition中的实验会训练一个用于 EZ-SP 的小型稀疏 CNN,该网络将每个点嵌入到低维空间中,使得来自不同语义类别的相邻点被相互推开。 这一训练阶段由model.training_partition_stage参数控制。
2. 训练语义模型
python src/train.py experiment=semantic/<dataset>_ezsp datamodule.pretrained_cnn_ckpt_path=<partition_ckpt_path>
请确保设置划分模型的检查点路径 pretrained_cnn_ckpt_path。为此,您可以按照步骤 1 的说明训练您自己的划分模型,或者使用我们提供的预训练检查点(名为 ezsp_partition_<dataset>.ckpt)。
注意:
config/experiments/semantic中以_ezsp结尾的实验会训练完整的 EZ-SP 模型用于语义分割。请注意,这些配置需要指定划分模型的检查点路径,通过datamodule.pretrained_cnn_ckpt_path参数进行设置。预训练的划分模型用于在预处理阶段计算层次化的超点划分,而完整模型则在此基础上进行训练时的推理。
PyTorch Lightning predict()
SPT 和 SuperCluster 均继承自 LightningModule,并实现了 predict_step() 方法,这使得可以使用
PyTorch Lightning 的 Trainer.predict() 机制。
from src.models.semantic import SemanticSegmentationModule
from src.datamodules.s3dis import S3DISDataModule
from pytorch_lightning import Trainer
# 对语义分割任务从 torch DataLoader 中进行预测
dataloader = DataLoader(...)
model = SemanticSegmentationModule(...)
trainer = Trainer(...)
batch, output = trainer.predict(model=model, dataloaders=dataloader)
不过,这仍然需要您实例化一个 Trainer、一个 DataLoader,以及一个具有相关参数的模型。
为了更简便起见,我们所有的数据集都继承自 LightningDataModule,并实现了 predict_dataloader() 方法,默认指向各自的数据集测试集。这使得可以直接将数据模块传递给
PyTorch Lightning 的 Trainer.predict()
而无需显式地实例化 DataLoader。
from src.models.semantic import SemanticSegmentationModule
from src.datamodules.s3dis import S3DISDataModule
from pytorch_lightning import Trainer
# 对 S3DIS 数据集上的语义分割任务进行预测
datamodule = S3DISDataModule(...)
model = SemanticSegmentationModule(...)
trainer = Trainer(...)
batch, output = trainer.predict(model=model, datamodule=datamodule)
有关如何实例化这些组件以及我们模型输出格式的更多详细信息,我们强烈建议您尝试我们的
demo notebook,并查看 src/eval.py 脚本。
全分辨率预测
根据设计,我们的模型在训练过程中只需对 $P_1$ 分区级别的超点生成预测。所有损失和指标都是以超点为单位定义的。这在训练和评估时能够有效节省计算资源和内存。
然而,在推理阶段,我们通常需要获得 $P_0$ 分区级别的体素预测,或对全分辨率输入点云的预测。为此,我们提供了辅助函数来恢复体素级和全分辨率的预测结果。
有关这些内容的详细信息,请参阅我们的 demo notebook。
在自定义数据上使用预训练模型
如需在您自己的点云数据上运行预训练模型,请参考我们的教程幻灯片、笔记本以及视频。
在自定义数据上参数化超点划分
我们的层次化超点划分是在预处理阶段计算的。其构建过程涉及多个步骤,这些步骤的参数化需要根据您的特定数据集和任务进行调整。请参考我们的教程幻灯片、笔记本以及视频,以便更好地理解这一过程,并根据您的需求进行优化。
超簇图聚类的参数化
超簇的一个特殊之处在于,该模型并非直接训练用于进行全景分割,而是用于预测超像素图聚类问题的输入参数,而该问题的解即为全景分割结果。
因此,针对这一图优化问题的超参数是在训练完成后,通过在训练集或验证集上进行网格搜索来选择的。我们发现,在所有数据集上,使用大致相同的超参数都能获得最佳性能(详见我们的论文附录)。不过,您可能仍希望针对自己的数据集探索这些超参数。为此,请参阅我们的演示笔记本,以了解如何对全景分割进行参数化。
笔记本与可视化
我们提供了笔记本,帮助您快速上手操作我们的核心数据结构、配置加载、数据集和模型实例化、各数据集上的推理以及可视化。
特别地,我们开发了一个交互式可视化工具✨,可用于生成可分享的HTML文件。关于如何使用该工具的演示已在笔记本中提供。此外,此类HTML文件的示例也已收录在media/visualizations.7z中。
📚 文档
| 位置 | 内容 |
|---|---|
| README | 项目概述 |
docs/data_structures |
介绍本项目的核心数据结构:Data、NAG、Cluster 和 InstanceData |
docs/datasets |
介绍我们实现的数据集、BaseDataset 类,以及如何创建您自己的继承自该类的数据集 |
docs/logging |
介绍日志记录及项目的 logs/ 目录结构 |
docs/visualization |
介绍我们的交互式3D可视化工具 |
注:我们尽可能地为代码添加了注释,以使该项目易于使用。如果您在
docs/中未能找到所需答案,请务必查看源代码和过往的问题。即便如此,若您仍觉得某些部分不够清晰,或认为需要更多文档说明,请随时通过提交问题告知我们!
👩🔧 故障排除
以下是一些常见问题及其解决方法。
SPT 或超簇在 11G 显存的 GPU 上运行
我们的默认配置是为 32G 显存的 GPU 设计的。然而,SPT 和超簇也可以在**11G 显存的 GPU 💾**上运行,只是在时间和性能上会有一些细微差异。
我们在 configs/experiment/semantic 中提供了在**11G 显存的 GPU 💾**上训练 SPT 的配置:
# 在 S3DIS 第5折上训练 SPT
python src/train.py experiment=semantic/s3dis_11g datamodule.fold=5
# 在 KITTI-360 验证集上训练 SPT
python src/train.py experiment=semantic/kitti360_11g
# 在 DALES 数据集上训练 SPT
python src/train.py experiment=semantic/dales_11g
同样地,我们在 configs/experiment/panoptic 中提供了在**11G 显存的 GPU 💾**上训练超簇的配置:
# 在 S3DIS 第5折上训练超簇
python src/train.py experiment=panoptic/s3dis_11g datamodule.fold=5
# 将 {墙、地板、天花板} 视作“stuff”类别,在 S3DIS 第5折上训练超簇
python src/train.py experiment=panoptic/s3dis_with_stuff_11g datamodule.fold=5
# 在 ScanNet 验证集上训练超簇
python src/train.py experiment=panoptic/scannet_11g
# 在 KITTI-360 验证集上训练超簇
python src/train.py experiment=panoptic/kitti360_11g
# 在 DALES 数据集上训练超簇
python src/train.py experiment=panoptic/dales_11g
CUDA 内存不足错误
遇到一些 CUDA OOM 错误 💀💾 吗?以下是一些可以根据错误发生时机调整的参数,以减少 GPU 内存占用。
影响 CUDA 内存的参数。
图例: 🟡 预处理 | 🔴 训练 | 🟣 推理(包括训练过程中的验证和测试)
| 参数 | 描述 | 发生阶段 |
|---|---|---|
datamodule.xy_tiling |
根据规则的 XY 网格,将数据集瓦片分割成 xy_tiling^2 个更小的瓦片。适合 DALES 那样的理想正方形瓦片。请注意,这会影响训练步数。 | 🟡🟣 |
datamodule.pc_tiling |
根据数据点的主要成分,将数据集瓦片分割成 2^pc_tiling 个更小的瓦片。适合 S3DIS 和 KITTI-360 那样的形状不一的瓦片。请注意,这会影响训练步数。 | 🟡🟣 |
datamodule.max_num_nodes |
限制 训练批次 中 $P_1$ 分割节点/超点的数量。 | 🔴 |
datamodule.max_num_edges |
限制 训练批次 中 $P_1$ 分割边的数量。 | 🔴 |
datamodule.voxel |
增大体素大小会缩短预处理、训练和推理时间,但会降低性能。 | 🟡🔴🟣 |
datamodule.pcp_regularization |
分割层级的正则化项。值越大,超点数量越少。 | 🟡🔴🟣 |
datamodule.pcp_spatial_weight |
超点分割中 3D 位置的重要性。值越小,超点数量越少。 | 🟡🔴🟣 |
datamodule.pcp_cutoff |
超点的最小尺寸。值越大,超点数量越少。 | 🟡🔴🟣 |
datamodule.graph_k_max |
超点图中每个节点的最大邻接节点数。值越小,超边数量越少。 | 🟡🔴🟣 |
datamodule.graph_gap |
超点图中相邻超点之间的最大距离。值越小,超边数量越少。 | 🟡🔴🟣 |
datamodule.graph_chunk |
在 RadiusHorizontalGraph 预处理超点图时,减小该值以避免内存不足。 |
🟡 |
datamodule.dataloader.batch_size |
控制加载的瓦片数量。每个 训练批次 由 batch_size*datamodule.sample_graph_k 次球面采样组成。推理则在 整个验证和测试瓦片 上进行,不进行球面采样。 |
🔴🟣 |
datamodule.sample_segment_ratio |
在每个分割层级随机丢弃一部分超点。 | 🔴 |
datamodule.sample_graph_k |
控制 训练批次 中的球面采样次数。 | 🔴 |
datamodule.sample_graph_r |
控制 训练批次 中球面采样的半径。设置为 sample_graph_r<=0 可以不进行球面采样,直接使用整个瓦片。 |
🔴 |
datamodule.sample_point_min |
控制 训练批次 中每个超点采样的 $P_0$ 点的最小数量。 | 🔴 |
datamodule.sample_point_max |
控制 训练批次 中每个超点采样的 $P_0$ 点的最大数量。 | 🔴 |
callbacks.gradient_accumulator.scheduling |
梯度累积。可用于以较小的批次进行训练,从而增加训练步数。 | 🔴 |
💬 引用我们的工作
如果您在工作中使用了本代码的全部或部分内容,请务必包含以下引用:
@article{robert2023spt,
title={高效三维语义分割的超点Transformer},
author={Robert, Damien and Raguet, Hugo and Landrieu, Loic},
journal={IEEE/CVF国际计算机视觉会议论文集},
year={2023}
}
@article{robert2024scalable,
title={可扩展的三维全景分割:基于超点图的聚类},
author={Robert, Damien and Raguet, Hugo and Landrieu, Loic},
journal={IEEE三维视觉国际会议论文集},
year={2024}
}
@article{geist2025ezsp,
title={EZ-SP:快速轻量级的超点基三维分割},
author={Geist, Louis and Landrieu, Loic and Robert, Damien},
journal={arXiv},
year={2025},
}
📄 您可以在arXiv上找到我们的论文:
另外,如果您喜欢或只是使用了这个项目,请别忘了给仓库点个⭐,这对我们来说意义重大!
💳 致谢
- 本项目基于Lightning-Hydra模板构建。
- 本工作的主要数据结构依赖于PyTorch Geometric。
- 部分点云操作受到Torch-Points3D框架的启发,尽管目前尚未与官方项目合并。
- 对于KITTI-360数据集,部分代码源自官方KITTI-360项目。
- 一些与超点图相关的操作灵感来自Superpoint Graph。
- 在SPT和SPC中,我们使用了Parallel Cut-Pursuit来计算层次化的超点划分和图聚类。需要注意的是,在EZ-SP中,这一步已被我们基于GPU的算法所取代。
本项目得到了Romain Janvier的大力支持。此次合作得益于3DFin项目。3DFin项目由英国斯旺西大学野火研究中心与西班牙CSIC生物多样性研究所、西班牙奥维耶多大学采矿工程系共同开发。该项目获得了英国NERC项目(NE/T001194/1)——“推进用于野火行为及风险缓解建模的三维燃料测绘”——以及西班牙知识创造项目(PID2021-126790NB-I00)——“应用人工智能处理三维地面点云以提升野火碳排放估算水平”的资助。
此外,本项目还受益于**Louis Geist**的贡献,其工作得到了PEPR IA SHARP项目的资助。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备