前言
Superpoint Transformer 和 Superpoint Graph 的核心区别在于它们的架构设计和数据处理方式。
Superpoint Graph (SPG):
基于图结构:
将点云划分为超点(superpoints),每个超点表示具有相似几何和语义属性的点集。
构建超点之间的 图结构,图的节点是超点,边是超点之间的关系(如几何相邻性、相似性等)。
使用 图神经网络 (GNN) 在超点图上进行推理。
超点分割:
通过传统的分割算法(如基于欧几里得距离、法向量聚类)对点云进行分割。
不需要处理所有点,而是通过图节点的稀疏化表示大幅降低计算复杂度。
Superpoint Transformer (SPT):
基于 Transformer:
将超点看作序列,使用 Transformer 架构 对超点进行推理。
自注意力机制捕获超点之间的全局依赖关系,无需显式构建图结构。
超点生成:
类似 SPG,先通过几何特征生成超点,但在超点之间的推理中采用了不同的方法(基于自注意力)。
Superpoint Graph (SPG):
输入表示:
图结构 G=(V,E)G=(V,E),其中 VV 是超点节点,EE 是节点之间的边。
每个节点有一个特征向量,表示超点的属性(如大小、平均颜色、几何特性)。
图神经网络 (GNN):
在图上运行 GNN,例如 Edge Convolution (EdgeConv),用来捕获超点之间的几何关系。
通过消息传递机制更新节点特征。
依赖图结构,因此需要预定义超点之间的连接关系。
限制:
图结构构建可能存在信息丢失,尤其是在点云稀疏或超点划分质量不高的情况下。
图操作可能对并行性支持不够,特别是在大规模数据上。
Superpoint Transformer (SPT):
输入表示:
超点序列 S=[s1,s2,...,sn]S=[s1,s2,...,sn],每个超点 sisi 是一个特征向量,表示超点的属性。
不需要构建显式图结构。
Transformer 架构:
使用 多头自注意力机制 (Multi-head Self-Attention) 计算超点之间的相关性:
Attention(Q,K,V)=softmax(QK⊤dk)V
Attention(Q,K,V)=softmax(dk
QK⊤)V 其中 QQ, KK, VV 是超点的特征表示。
每个超点的表示更新时,会考虑所有其他超点的全局关系,适合捕获长距离依赖。
优势:
全局感知能力强,自注意力机制可以捕获远程依赖关系。
支持并行计算,尤其适合 GPU 加速。
github链接🔗 https://github.com/drprojects/superpoint_transformer
1. 安装依赖
./install.sh
检查安装是否成功
激活环境:
conda activate spt
测试 PyTorch 是否正确安装并支持 GPU:
python -c "import torch; print(torch.cuda.is_available())"
返回 True 表示安装成功。
如果本地cuda环境不匹配,可以在虚拟环境里面安装新的cuda
conda create -n spt python=3.9 -y
conda activate spt
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
python -c "import torch; print(torch.cuda.is_available())"
install.sh 中有硬性 CUDA 检查逻辑,需要跳过它
关键修改点 1:跳过 CUDA 版本检查
在脚本中,CUDA 检查部分会导致问题,因为它检测的是系统 CUDA,而不是虚拟 CUDA。可以直接跳过这部分检查。
找到以下代码:
CUDA_VERSION=`nvcc --version |