DS-MAE:融合全局与局部视角的点云自监督学习新范式

发布时间:2026/5/26 12:30:26

DS-MAE:融合全局与局部视角的点云自监督学习新范式 1. 项目概述与核心动机在三维视觉领域点云数据正变得无处不在从自动驾驶的激光雷达扫描到工业质检的精密测量再到医疗影像的三维重建它为我们理解物理世界提供了最直接的几何信息。然而与规整的二维图像不同点云是一组无序、不规则的三维坐标点集合这种“天生”的特性使得直接应用成熟的深度学习模型变得困难重重。更棘手的是为海量点云数据打上精确的标签比如标注一个复杂机械零件的每个部件属于哪个类别或者分割出城市街景中每一个行人、车辆其成本高昂到令人望而却步。这就像给你一堆散落的乐高积木却不告诉你最终要拼成什么你得自己摸索出积木块之间的组合规律。自监督学习Self-Supervised Learning, SSL正是为了解决这个“无米之炊”的困境而生的。它的核心思想是让模型从数据自身中寻找监督信号通过完成一些预设的“前置任务”Pretext Task来学习数据的内在结构和特征而无需任何人工标注。在众多自监督范式中掩码自编码器Masked Autoencoder, MAE近年来异军突起。它的灵感来源于我们小时候玩的“完形填空”随机遮盖掉一段文本或一张图片的一部分然后让模型根据上下文去预测被遮盖的内容。在这个过程中模型被迫去理解数据的整体结构和局部细节从而学到强大的特征表示。然而当我深入研究和实践现有的点云MAE方法时发现了一个普遍存在的“跷跷板”问题。以Point-MAE为代表的方法擅长捕捉点云的全局结构比如一个飞机的整体轮廓但它对机翼上的铆钉、座舱盖的弧度等局部精细特征的感知能力就相对较弱。反之像Point-M2AE这类引入多尺度层次化编码的方法在刻画局部细节上表现出色但在把握整体形状的连贯性上有时会力不从心容易“只见树木不见森林”。这就好比一位画家要么擅长用大笔触勾勒写意山水的气势要么精于用工笔描绘花鸟的羽毛纹理但很难在一幅画中同时兼顾宏大的布局与精微的细节。DS-MAEDual-Siamese Masked Autoencoders正是为了打破这个僵局而设计的。我们的核心想法很直接为什么不把擅长全局感知的“画家”和擅长局部描绘的“画家”请到一起让他们协同工作呢这个框架的核心创新在于我们设计了一个双孪生Dual-Siamese的架构其中一个分支全局分支专注于学习点云的整体形状和空间布局另一个分支层次分支则负责解析从粗糙到精细的多尺度局部特征。最关键的是我们通过一种一致的补丁嵌入策略确保这两个分支处理的是空间位置完全对齐的“同一块画布”让它们的“对话”有共同的基础。最后通过交叉注意力孪生解码器让两个分支在重建被掩码部分时不仅能参考自己分支的信息还能交叉参考另一个分支的见解实现真正的特征融合与互补。经过在ModelNet40、ScanObjectNN等标准数据集上的大量实验验证DS-MAE在线性分类、少样本学习、部件分割等多个下游任务上都稳定地超越了之前的SOTA方法。这不仅仅是数字上的提升更意味着我们让模型学会了一种更全面、更鲁棒地“观察”和理解三维世界的方式。无论你是刚接触点云处理的新手还是正在寻找更优自监督方案的从业者理解DS-MAE的设计思路和实现细节都将为你打开一扇新的大门。2. 核心设计思路为何要“双管齐下”在深入代码和公式之前我们有必要先厘清DS-MAE最根本的设计哲学。很多优秀的工程方案其背后都有一个简洁而有力的核心思想。对于DS-MAE这个思想就是全局语境与局部细节的协同感知是理解三维形状不可或缺的两个维度而自监督学习的目标就是让模型自主建立这两者之间的关联。2.1 全局与多尺度一对互补的视角让我们用一个更生活的例子来理解。假设你面前有一个复杂的乐高城堡模型。全局视角就像你退后几步看到城堡的整体轮廓、塔楼的高低布局、城墙的蜿蜒走向。这个视角帮助你快速把握“这是一个城堡”这个整体概念以及它的基本结构。多尺度局部视角则像你拿起放大镜凑近观察这一块是带有凹槽的砖块最细尺度这几块砖组合成了一个拱形窗户中等尺度而多个拱窗又排列成了一面墙较粗尺度。这个视角让你理解模型的构造细节和局部组件之间的关系。在点云处理中全局特征关注的是点云作为一个整体的统计特性如质心、包围盒、主轴方向等。它对物体的类别识别是飞机还是汽车至关重要但对物体表面的细微变化如飞机的舷窗形状不敏感。多尺度特征通过层次化的分组例如从单个点到点的小邻域再到更大的区域来捕获特征。它能很好地描述局部几何如边缘、角点、曲面但如果不加约束高层特征可能会“遗忘”底层细节或者不同尺度的特征之间缺乏对齐。现有的方法大多只取其一。Point-MAE可以看作是那位只关注全局轮廓的画家而Point-M2AE则是那位沉迷于局部纹理的画家。DS-MAE的想法是让两位画家并肩作画并且确保他们画的是同一个物体的不同方面最后把两幅画的信息融合起来得到一幅既气势恢宏又细节饱满的作品。2.2 双孪生架构对称之美与对比学习“孪生”Siamese网络并不是一个新概念它在度量学习、人脸验证等领域早有应用。其核心是权值共享的两个或多个子网络用于处理不同的输入并鼓励这些输入的表征在特征空间中是相近的对于相似样本或相远的对于不相似样本。在DS-MAE中我们将“孪生”的思想用在了两个层面分支内的孪生在每个分支全局或层次内部我们都有一个孪生编码器。它同时处理原始点云补丁和经过数据增强如随机抖动、旋转的补丁。这两个编码器共享参数。这样做的目的是学习一种增强不变性Augmentation Invariance。即无论点云因为噪声、视角或轻微形变发生何种变化模型学到的关于该物体“本质”的特征应该是不变的。这极大地提升了特征的鲁棒性。分支间的双生我们有两个并行的分支全局和层次它们结构相似但分工明确共同构成了一个“双”孪生系统。它们不是完全独立的而是通过我们设计的一致补丁嵌入和交叉注意力解码器紧密耦合。这种设计带来一个关键优势它自然地引入了对比学习的思想但以一种更优雅、更高效的方式。传统的对比学习需要精心构造正负样本对计算复杂度高且对负样本采样策略敏感。而在DS-MAE中通过孪生编码器处理原始和增强视图模型隐式地在学习让同一物体的两种扰动版本的特征相互靠近。同时通过交叉注意力两个分支的特征被鼓励相互对齐和补充这可以看作是在全局和局部视角之间进行了一种“跨视角”的对比与融合。2.3 一致补丁嵌入搭建沟通的桥梁这是DS-MAE能够成功融合双分支信息的技术基石。如果两个分支各自为政用完全不同的方式把点云切成小块补丁那么后续的特征就如同鸡同鸭讲根本无法有效融合。我们的策略非常巧妙让两个分支共享同一套“锚点”。锚点生成首先我们使用最远点采样FPS在原始点云上选取一组“组中心”Group Centers。这些中心点就像是用来划分区域的“地标”。层次分支划分对于层次分支我们以这些组中心为起点构建一个三层的层次结构。最底层L层的补丁就是围绕每个组中心取其k个最近邻点。上一层的组中心则通过对下一层的组中心进行FPS下采样得到并同样取其最近邻的“下层组中心”作为该层的补丁。这样就形成了一个从细到粗的层次化补丁结构。全局分支划分关键来了全局分支的补丁划分直接使用层次分支最底层L层的组中心作为自己的中心。也就是说全局分支的每一个补丁其空间中心位置与层次分支最精细尺度的补丁中心是完全重合的。注意这里有一个非常重要的实操细节。FPS的随机性会导致每次运行产生的组中心顺序可能不同。在实现时必须确保在划分两个分支的补丁前将FPS的随机种子固定或者通过索引明确传递组中心坐标以保证两个分支拿到的中心点集是严格一致的。任何微小的坐标偏差都会导致后续的特征对齐失败。通过这种“一致的双分支补丁嵌入策略”我们确保了全局分支和层次分支的“对话”是在同一个空间坐标系下针对同一个局部区域进行的。全局分支说“第5号区域整体上是一个平滑的曲面。”层次分支可以回应“是的第5号区域在最精细的尺度下它由256个点构成其中包含一个小凸起。”这种精确的空间对齐是后续交叉注意力机制能够有效工作的前提。3. 模型架构深度拆解理解了核心思想我们现在像拆解一台精密仪器一样深入DS-MAE的每一个模块。我会结合论文中的公式和图表并补充大量实现时必须关注的细节。3.1 一致的双分支补丁嵌入模块详解这个模块的输入是一个原始点云P {pi ∈ R^3}_{i1}^N输出是四组Token Embedding层次分支的原始/增强补丁嵌入和全局分支的原始/增强补丁嵌入。整个过程如图2所示我们可以分解为以下步骤3.1.1 共享组中心采样首先使用FPS从N个点中采样G个点作为初始组中心{c_g}_{g1}^G。这里G是一个超参数决定了最终补丁的数量。FPS能保证采样的点在整个空间分布上尽可能均匀避免了随机采样可能导致的区域聚集。# 伪代码示意FPS实现要点 def farthest_point_sample(xyz, npoint): xyz: (B, N, 3) 批量的点云 npoint: 需要采样的点数 G return: (B, npoint) 采样点的索引 device xyz.device B, N, C xyz.shape centroids torch.zeros(B, npoint, dtypetorch.long).to(device) distance torch.ones(B, N).to(device) * 1e10 # 初始化距离为很大 farthest torch.randint(0, N, (B,), dtypetorch.long).to(device) # 随机选择第一个点 for i in range(npoint): centroids[:, i] farthest # 记录当前最远点索引 centroid xyz[torch.arange(B), farthest, :].view(B, 1, 3) # 取出当前中心点坐标 dist torch.sum((xyz - centroid) ** 2, -1) # 计算所有点到该中心的距离 mask dist distance distance[mask] dist[mask] # 更新每个点的最近中心距离 farthest torch.max(distance, -1)[1] # 选择距离最大的点作为下一个中心 return centroids3.1.2 层次化补丁构建假设我们设定层次数 L3。我们从最精细的第3层L层开始构建第3层以FPS采样的G个点{c_g^3}为中心为每个中心寻找其在整个点云P中的k3个最近邻点形成第3层的补丁集合。第2层对第3层的G个中心再次进行FPS采样出G2个点G2 G作为第2层的中心{c_g^2}。然后每个第2层的中心在第3层的中心点集{c_g^3}中寻找k2个最近邻。注意这里“最近邻”找的是下层中心点而不是原始点。这意味着第2层的每个补丁实际上是由一组第3层的补丁中心构成的从而形成了层次结构。第1层同理对第2层中心下采样得到G1个中心{c_g^1}并在第2层中心中找k1个最近邻。最终一个层次化的补丁H_g包含了从第1层到第3层的所有嵌套组信息。这种结构使得编码器能够自然地捕获从局部到全局的上下文。3.1.3 全局分支补丁构建全局分支的构建就简单直接得多。它直接使用层次分支最底层第3层的组中心{c_g^3}作为自己的中心。对于每个中心在原始点云P中寻找kG个最近邻点形成一个补丁S_g。这里kG通常与层次分支最底层的k3相同或相近以保证补丁大小的一致性。3.1.4 数据增强与掩码策略数据增强我们对每个补丁无论是层次分支的H_g还是全局分支的S_g应用相同的空间变换T得到其增强版本~H_g和~S_g。T通常包括随机平移抖动、旋转和小尺度缩放。关键点必须对两个分支的对应补丁应用完全相同的变换参数以保持空间一致性。例如如果对第5号全局补丁施加了一个绕Z轴旋转10度的变换那么对第5号层次补丁也必须施加完全相同的旋转。掩码策略我们随机选择一定比例例如75%的补丁索引进行掩码。至关重要的一步这个掩码向量M一个长度为G的0/1向量1表示掩码必须同时应用于两个分支的对应补丁。也就是说如果决定掩码第5号补丁那么层次分支的第5号补丁和全局分支的第5号补丁会同时被掩码。这保证了两个分支学习重建的是同一个缺失区域。3.1.5 Token与位置嵌入Token嵌入对于未被掩码的补丁我们需要将其从一堆三维点转换为一个固定长度的特征向量Token。这里使用一个轻量级的PointNet或简单的MLP作为嵌入函数E(·)。对于层次分支的补丁由于它包含多层嵌套信息嵌入函数需要能聚合多尺度信息。一个常见的做法是将每一层的点或中心坐标分别嵌入后拼接或相加。位置嵌入为了弥补掩码导致的空间信息丢失我们需要为每个补丁添加位置信息。直接使用补丁中心坐标c_g通过一个MLP映射到与Token嵌入相同的维度然后与Token嵌入相加。这告诉解码器“这里原本应该有一个补丁它的中心位置在(x,y,z)。”至此我们得到了编码器的输入对于每个分支的每个版本原始/增强都是一组融合了位置信息的Token向量其中被掩码的位置用了一个可学习的[MASK] token填充。3.2 双分支孪生编码器特征提取的核心编码器部分相对标准由多层Transformer Encoder堆叠而成。其特殊性在于“孪生”结构。每个分支全局/层次拥有自己独立的编码器参数但在每个分支内部原始视图和增强视图共享同一个编码器。即F_H Encoder_H(Z_H)和~F_H Encoder_H(~Z_H)使用的是同一个Encoder_H。F_G Encoder_G(Z_G)和~F_G Encoder_G(~Z_G)使用的是同一个Encoder_G。这里的Encoder_H和Encoder_G可以是结构相同的标准Transformer但参数不共享。这是因为两个分支学习的目标不同全局分支的编码器需要学会忽略细节噪声抓住整体形状层次分支的编码器则需要学会解析局部几何的层次关系。实操心得编码器深度与宽度在资源有限的情况下需要对两个编码器的容量进行权衡。我们的实验发现由于层次分支需要处理更复杂的信息流多层特征给予其比全局分支更深的层数或更宽的隐藏层往往能带来更好的性能。例如全局分支用6层Transformer层次分支可以用8层。但这也会增加计算量需要根据具体任务和硬件条件进行调优。3.3 交叉注意力孪生解码器特征融合与重建的艺术解码器是DS-MAE的灵魂所在也是创新最集中的部分。它不仅要完成重建任务还要承担起分支内和分支间特征对齐的重任。3.3.1 解码器输入构造解码器的输入由三部分组成可见补丁的特征来自编码器输出的、对应未掩码位置的特征F[*][g](g ∈ V)。掩码Token一个可学习的向量m用于填充被掩码的位置 (g ∈ U)。位置嵌入与编码器阶段相同的、基于补丁中心坐标p_g计算的位置向量。对于每个分支的每个版本我们构造一个完整的序列H_[*]^{(0)}[g] F_[*][g] p_g(如果g可见) 或m p_g(如果g被掩码)。这样解码器就知道每个位置应该有什么以及它在哪里。3.3.2 分支内交叉注意力Cross-Siamese Attention这是每个分支解码器的核心操作。以层次分支的解码器Decoder_H为例查询Q来自原始点云的特征H_H。键K和值V来自增强点云的特征~H_H。解码器通过交叉注意力机制利用增强视图的特征作为上下文来重建原始视图的特征。这个过程强迫模型去思考“在经历了这些扰动增强之后这个物体的‘本来面目’应该是什么” 这比标准的自注意力用自己重建自己更具挑战性也更能学习到增强不变的本质特征。公式表示为D_H Decoder_H(H_H, ~H_H)。3.3.3 分支间交叉注意力Cross-Branch Attention这是实现全局与局部信息融合的关键。我们让一个分支的解码过程可以去“参考”另一个分支的信息。层次分支解码器除了参考自己的增强视图(~H_H)还可以参考全局分支的增强视图(~H_G)~D_H Decoder_H(H_H, ~H_G)。同理全局分支解码器也可以参考层次分支的增强视图(~H_H)~D_G Decoder_G(H_G, ~H_H)。这个设计的精妙之处在于它为特征对齐提供了一个天然的桥梁。例如当层次分支在重建一个被掩码的机翼细节时它不仅可以看自己分支里机翼其他未被掩码部分的增强特征还可以去“询问”全局分支“从你的整体视角看这个位置大概应该是什么形状” 全局分支可能会回答“这里应该是一个平滑的、略微上翘的曲面。” 层次分支就可以将这个全局先验信息与自己的局部观察结合起来做出更准确的预测。3.3.4 特征聚合与重建最终每个分支的重建特征是两个解码路径输出的和^F_H D_H ~D_H^F_G D_G ~D_G然后通过一个轻量的预测头MLP将位于掩码位置g ∈ U的特征向量^F_[*][g]映射回点坐标空间预测出被掩码的那些点^H_g或^S_g。3.3.5 损失函数损失函数衡量预测点集与真实点集之间的差异。这里采用在点云生成中常用的倒角距离Chamfer Distance, CD。它计算两个点集之间最近点距离的对称和对点的排列顺序不敏感非常适合点云重建。层次分支重建损失L_H (1/|U|) * Σ_{g∈U} CD(^H_g, H_g)全局分支重建损失L_G (1/|U|) * Σ_{g∈U} CD(^S_g, S_g)总损失L L_H L_G通过最小化这个联合损失模型同时学习重建全局形状和局部细节并在重建过程中迫使两个分支的特征相互对齐、相互补充。4. 实验配置与结果分析理论再优美也需要实验的验证。DS-MAE在多个标准基准测试中进行了全面评估下面我将结合论文数据深入解读这些结果背后的含义并分享一些复现过程中的关键配置。4.1 数据集与预训练设置数据集预训练使用ShapeNet数据集57,448个合成物体55个类别。这是目前点云自监督学习最常用的预训练池数据干净、类别丰富。分类任务评估ModelNet4012,311个合成物体40个类别。是点云分类的“基准测试”。ScanObjectNN约15,000个真实扫描物体15个类别。包含遮挡、背景噪声极具挑战性是检验模型泛化能力的“试金石”。分割任务评估使用ShapeNet Part数据集16,880个样本16个类别50个部件标签评估部件级分割能力。预训练关键参数点云规模每个样本统一采样或补全到2048个点。数据增强随机抖动平移、随机旋转扰动。这是提升模型鲁棒性的关键但强度不宜过大以免破坏物体结构。优化器AdamW。权重衰减5e-2对于防止过拟合很重要。学习率初始1e-3采用10个epoch的线性warm-up至1e-3然后使用余弦退火Cosine Annealing策略下降至0。训练周期300个epoch。自监督预训练通常需要更长的训练时间来收敛。掩码比例75%。这是一个经验值较高的掩码比例迫使模型更多依赖上下文推理而非简单插值。批次大小64。在单张RTX 4090上可以运行若显存不足可减小批次大小并累积梯度。注意事项预训练成本在ShapeNet上预训练300个epoch在RTX 4090上大约需要2-3天时间。这是自监督学习无法回避的成本。对于学术研究这是值得的对于工业应用可以考虑在更小的数据集或使用更小的模型进行预训练或者直接使用我们开源的预训练权重。4.2 线性SVM评估特征质量的“试金石”线性SVM评估是自监督学习领域的标准协议。其逻辑是冻结预训练好的编码器权重仅用其提取的特征来训练一个简单的线性SVM分类器。如果特征质量高那么一个简单的线性分类器就能取得很好的效果。这直接反映了预训练模型学到的特征是否具有判别性、是否线性可分。结果分析对应论文表1ModelNet40DS-MAE达到93.2%的准确率比之前的SOTA方法Point-M2AE92.9%高出0.3%。这个提升看似微小但在竞争激烈的基准测试上尤其是超过90%以后每0.1%的提升都来之不易。它证明了双分支融合的有效性。ScanObjectNN (OBJ-BG)DS-MAE达到86.5%比Point-M2AE84.1%大幅提升2.4%。这是更具说服力的结果。ScanObjectNN来自真实扫描充满噪声和遮挡。DS-MAE在此表现更优说明其学到的特征尤其是全局与局部融合的特征对真实世界的扰动更具鲁棒性。相比早期方法如DGCNNJigsaw59.5%提升更是达到了27个百分点这凸显了自监督预训练的巨大潜力。4.3 下游任务微调实战性能检验预训练后我们在下游任务上对整体模型进行微调这是更贴近实际应用的评估方式。4.3.1 合成数据分类ModelNet40无投票DS-MAE达到93.7%优于Point-M2AE的93.4%和Point-MAE的93.2%。有多视图投票DS-MAE达到94.1%同样领先。值得注意的是Point-MAE使用8000个点输入达到了94.0%而DS-MAE仅用1000个点就达到了94.1%。这说明DS-MAE从每个点中提取的信息更有效率。4.3.2 真实数据分类ScanObjectNN这是真正的挑战。DS-MAE在三个官方分割OBJ-BG, OBJ-ONLY, PB-T50-RS上全面领先尤其是在最难的PB-T50-RS包含平移、旋转、缩放等扰动上达到88.26%比Point-M2AE高出1.83%。这强有力地证明了DS-MAE架构对于复杂、嘈杂的真实场景的优越泛化能力。4.3.3 少样本学习在5-way 10-shot和5-way 20-shot等设置下DS-MAE取得了最佳或并列最佳的性能如96.9% 98.3%并且其准确率的标准差±1.2 ±1.1比对比方法更小。这具有重要的实际意义它意味着DS-MAE学到的特征具有很好的可迁移性和稳定性即使在每个类别只有极少量10或20个标注样本的情况下也能快速适应新任务这对于标注数据稀缺的应用场景如医疗、特殊工业部件价值巨大。4.3.4 部件分割ShapeNet Part在部件分割任务中DS-MAE在类别平均交并比mIoUC和实例平均交并比mIoUI上均达到最优85.2% 86.6%。分割任务要求模型对局部几何有极其精细的理解。DS-MAE的层次分支专门负责学习多尺度局部特征而全局分支提供的上下文信息又能帮助区分语义上相似但属于不同物体部分的区域例如椅子的腿和桌子的腿因此取得了更好的分割边界和一致性。4.4 消融实验每个组件贡献几何消融实验是理解模型设计必要性的关键。论文中的三个消融实验清晰地量化了每个组件的价值。消融组件ModelNet40线性SVM准确率性能下降核心结论完整DS-MAE93.2%-基线仅用全局分支91.5%-1.7%缺失多尺度细节性能显著下降仅用层次分支92.6%-0.6%缺失全局结构信息性能也有损失移除孪生编码器仅用原始视图92.4%-0.8%数据增强对比学习对提升特征鲁棒性至关重要移除分支间交叉注意力92.7%-0.5%全局与局部特征融合能带来明确增益双分支的必要性单独使用全局分支或层次分支性能都有明显下降且全局分支单独使用下降更严重-1.7%。这说明多尺度局部细节对于分类任务可能比单纯的全局轮廓更重要但两者结合效果最佳。孪生编码器的作用移除孪生结构即不对增强视图进行编码对比性能下降0.8%。这验证了通过对比原始与增强视图来学习增强不变性的有效性是提升特征判别力的重要手段。交叉注意力的价值移除分支间的交叉注意力性能下降0.5%。这证明了我们设计的特征融合机制是有效的它确实让两个分支的信息产生了“112”的协同效应。5. 实现细节与避坑指南纸上得来终觉浅绝知此事要躬行。根据我们的实现经验这里总结几个关键的实现细节和容易踩坑的地方。5.1 补丁划分的一致性保证这是实现中最容易出错的一环。两个分支的补丁中心必须严格一致。陷阱在PyTorch中FPS操作通常不是确定性的即使设置torch.manual_seed在多GPU或不同设备上也可能产生不同结果。解决方案在采样组中心时将FPS函数封装确保其输入和随机状态是确定的。更好的做法是先调用一次FPS得到组中心坐标然后将这个坐标张量同时传递给层次分支和全局分支的补丁划分函数而不是让它们各自独立调用FPS。def consistent_patch_embedding(xyz, n_centers, k_neighbors): 保证一致性的补丁嵌入函数 xyz: (B, N, 3) return: global_patches, hierarchical_patches (centers aligned) B, N, _ xyz.shape # 1. 确定性地采样组中心 with torch.no_grad(): # 使用确定的随机种子或使用自定义的确定性FPS实现 center_indices deterministic_fps(xyz, n_centers) # (B, n_centers) centers index_points(xyz, center_indices) # (B, n_centers, 3) # 2. 全局分支以centers为中心在原始点云中找邻居 global_idx knn_point(k_neighbors, xyz, centers) # (B, n_centers, k) global_patches index_points(xyz, global_idx) # (B, n_centers, k, 3) # 3. 层次分支以centers作为最底层中心构建层次 # 假设构建L层这里以L3为例 # 第3层中心就是 centers level3_centers centers # 对centers进行FPS下采样得到第2层中心 level2_centers_idx deterministic_fps(level3_centers, n_centers//4) level2_centers index_points(level3_centers, level2_centers_idx) # 第2层补丁在第3层中心中找邻居 level2_idx knn_point(k_neighbors//2, level3_centers, level2_centers) level2_patches index_points(level3_centers, level2_idx) # 注意这里索引的是中心点坐标 # ... 类似地构建第1层 # 最终 hierarchical_patches 是一个包含各层补丁信息的结构体或字典 hierarchical_patches { level3: global_patches, # 最底层与全局分支补丁空间对齐 level2: level2_patches, level1: level1_patches } return global_patches, hierarchical_patches, centers5.2 层次分支的嵌入设计层次分支的每个补丁包含多层信息如何将其编码为一个Token是一个设计点。简单方法将每一层的点坐标分别通过一个共享的轻量级PointNet或MLPMaxPool得到该层的特征然后将所有层的特征拼接起来再通过一个线性层映射到目标维度C。进阶方法可以考虑在层次内部引入自注意力先融合不同尺度的信息再输出最终Token。但这会增加计算量需要权衡。5.3 交叉注意力解码器的实现细节解码器中的交叉注意力是模型融合信息的关键。Query, Key, Value的来源务必严格按照设计来。对于分支内注意力Q来自本分支原始特征K、V来自本分支增强特征。对于分支间注意力Q来自本分支原始特征K、V来自另一分支的增强特征。梯度流在计算分支间注意力时梯度会通过K、V流回另一个分支的编码器。这实现了双分支的协同训练。确保你的计算图是正确的。解码器层数解码器通常比编码器浅。在我们的实现中编码器有12层解码器只有4层。这是因为解码任务相对简单且预训练的主要目标是学习一个好的编码器。5.4 训练技巧与调参经验学习率warm-up对于Transformer类模型训练初期的学习率warm-up至关重要能稳定训练防止梯度爆炸。我们采用10个epoch的线性warm-up。梯度裁剪虽然AdamW优化器相对稳定但在训练深度Transformer时偶尔仍会出现梯度爆炸。设置一个全局梯度裁剪范数如1.0是良好的保险措施。掩码比例75%是一个较高的比例但效果很好。如果发现重建损失一直很高不下降可以尝试降低到60%或50%让任务简单一些。数据增强强度随机旋转的角度范围如[-10°, 10°]和抖动的幅度需要仔细调节。过强的增强会让任务变得不可能模型学不到东西过弱的增强则起不到正则化效果。特征维度C这是一个重要的超参数。我们设置为384这是一个在表达能力和计算成本之间的良好平衡点。如果显存紧张可以尝试256如果追求更高性能可以尝试512或768。5.5 常见问题与排查损失不下降或波动大检查数据增强首先关闭所有数据增强看模型能否在简单任务上过拟合训练集损失快速下降。如果不能可能是模型结构或代码有bug。检查掩码可视化一些被掩码和重建的补丁看模型是否在尝试做有意义的重建还是输出无意义的点云。检查梯度使用torch.autograd.grad或调试工具查看各层梯度是否正常传播是否存在梯度消失或爆炸。下游任务微调效果差检查特征提取确保在提取特征用于SVM或微调时使用的是编码器的输出而不是解码器的输出。编码器的输出才是学到的“特征”。学习率策略下游微调时通常使用比预训练更小的学习率如1e-4并对预训练部分进行更细致的学习率调整如分层设置学习率编码器部分的学习率更小。过拟合如果下游数据集很小如少样本学习微调时需加入更强的正则化如Dropout、权重衰减或尽早停止。显存溢出减小批次大小最直接有效的方法。梯度累积如果无法减小批次大小可以使用梯度累积来模拟大批次训练。混合精度训练使用PyTorch的AMP自动混合精度可以显著减少显存占用并加速训练。检查注意力矩阵Transformer的注意力矩阵大小为[B, num_heads, seq_len, seq_len]其中seq_len是补丁数量。如果补丁数量很多例如1024这会消耗巨大显存。可以考虑使用稀疏注意力、局部注意力或降低补丁数量。DS-MAE通过其精巧的双分支孪生设计和交叉注意力融合机制为点云自监督学习提供了一条新的思路。它告诉我们在追求更强大表征能力的道路上让模型学会从多个互补的视角协同地观察和理解数据往往比单纯地堆叠更深的网络或设计更复杂的模块更为有效。希望这篇详细的拆解能帮助你不仅理解这篇论文更能将其思想应用到你的实际项目中。

相关新闻