真实面经题目 · 原创解析

视觉 Transformer 处理非均匀采样 3D 点云时,Patch Embedding 应如何改进?

这题考的是把 2D ViT 的 Patch Embedding 思路迁移到 3D 点云时,如何处理点云无序、非均匀密度、局部几何和变长邻域。好的回答不能只说把点云分块后送 Transformer,而要讲清采样中心、邻域构造、密度归一、局部聚合、3D 位置编码和多尺度鲁棒性。

出现于:小米 · 算法

60 秒回答模板

我会先说明,3D 点云和图像 patch 最大的区别在于点云是无序集合,而且采样密度不均匀:有些区域点很多,有些区域稀疏甚至缺失。如果直接按固定网格或固定点数做 Patch Embedding,密集区域会被过度表示,稀疏区域会丢几何结构,Transformer 后面看到的 token 质量就会很差。改进思路可以分几层。第一,token center 不要简单随机取,可以用 FPS、体素中心、superpoint 或密度感知采样,让 token 覆盖空间而不是被密集点拖偏。第二,局部邻域不要只用固定 kNN 或固定半径,可以用 kNN 和 radius 混合:kNN 保证每个 token 有足够点,radius 保证局部几何尺度一致。第三,Patch Embedding 内部要做局部几何聚合,把相对坐标、距离、法向、强度、点数密度、局部尺度等特征通过 PointNet/MLP、局部 attention 或轻量卷积聚合成 token。第四,要做密度归一和 mask,避免点多的 patch 权重大、点少的 patch 噪声大。第五,位置编码要适配 3D,可以使用绝对坐标、相对坐标、体素索引、距离编码和多尺度层级位置,而不是照搬 2D 行列编码。最后要用采样扰动、点 dropout、不同密度场景和下游任务指标验证,证明改进不是只在均匀采样数据上有效。

考点 密度不是语义
难度 真实面经题
回答目标 让候选人能把点云 ViT 的 Patch Embedding 回答成一套密度感知的 3D tokenization 方案:采样中心、邻域构造、局部几何聚合、密度归一、3D 位置编码、多尺度结构和鲁棒评估都要讲清楚。

深入解析

01

先识别点云和图像 patch 的差异

图像 patch 天然有规则网格、固定邻域和稳定像素顺序,而点云是无序、不规则、变密度的 3D 采样。Patch Embedding 在点云里不只是切块投影,而是要把一个局部点集合转成稳定 token,关键在于覆盖空间、保留几何、抑制密度偏差。

02

采样中心要避免被密集区域支配

如果直接随机采点或按原始点密度取 token,密集区域会产生过多 token,稀疏但重要的边界、薄结构和远距离区域可能被忽略。常见做法是用 FPS 保证空间覆盖,用体素中心降低密度偏差,或结合语义/几何显著性选择 token center。

03

邻域构造要兼顾点数和尺度

固定 kNN 能保证每个 token 有足够点,但在密集区覆盖半径很小、稀疏区覆盖半径很大,局部尺度不一致;固定 radius 保证物理尺度一致,但稀疏区可能点数不足。实践中可以混合 kNN 与 radius,或者使用多半径邻域,让模型同时看到细节和上下文。

04

局部聚合要显式编码几何关系

Patch 内不能只平均点特征。更稳的做法是把每个点相对 token center 的坐标、距离、方向、法向、颜色或强度、局部密度等作为输入,用共享 MLP、max/mean pooling、局部 attention 或 point convolution 聚合。这样 token 表示的是局部形状,而不是一组无结构坐标。

05

密度归一减少非均匀采样偏差

非均匀点云中,点数多不一定代表信息更重要,可能只是传感器距离、视角或反射材质造成的采样差异。可以把点数、局部平均距离、体素占据率作为密度特征输入,也可以做加权池化、随机下采样、点 dropout 或归一化,避免模型把密度误当语义。

06

3D 位置编码不能照搬 2D 行列编码

点云 token 需要表达三维位置和相对几何。可以使用 token center 的 3D 坐标、体素层级索引、相对距离偏置、方向编码、多尺度坐标或旋转鲁棒特征。若任务对旋转敏感,要保留朝向信息;若任务希望旋转不变,就要通过数据增强或局部坐标系降低绝对姿态依赖。

07

层级和多尺度让稀疏区域更稳

单一尺度 patch 很难同时处理大平面、小物体、边缘和空洞。可以先在局部形成细粒度 token,再层级下采样形成更大感受野;也可以对同一中心使用不同半径的邻域。这样 Transformer 既能建模全局关系,也不会丢掉局部几何细节。

08

验证要覆盖密度扰动和下游效果

评估时不能只看标准数据集总分。要对不同采样密度、遮挡、远近距离、随机点 dropout、稀疏边界和小物体切片做 ablation,比较普通 fixed patch、FPS、体素、kNN/radius、多尺度和密度特征的贡献,证明改进确实解决非均匀采样问题。

易错点

  • 把 3D 点云直接当成 2D 图像切 patch,忽略无序、稀疏和非均匀采样。
  • 只说用 Transformer 做全局建模,没有说明 Patch Embedding 如何生成可靠 token。
  • 固定 kNN 一路用到底,忽略不同密度区域下局部物理尺度不一致。
  • 固定 radius 一路用到底,忽略稀疏区域点数不足和空邻域问题。
  • 把点数多的区域默认当成更重要,未做密度归一或采样均衡。
  • 只使用绝对坐标位置编码,忽略相对几何、尺度变化和旋转鲁棒性。
  • 没有 mask 和置信度处理,让空 patch、少点 patch 和噪声 patch 与正常 patch 等价。
  • 只在标准总指标上验证,不看密度扰动、遮挡、小物体和稀疏边界切片。

面试官追问

kNN 和 radius 邻域怎么选?

kNN 适合保证每个 patch 有固定点数,训练和 batch 处理更稳定;radius 更符合物理空间尺度,能避免密集区只看极小范围。非均匀点云里通常不建议二选一,可以用 kNN 保底、radius 限制尺度,或使用多半径邻域再让模型学习融合。

为什么只用固定体素网格不够?

体素能降低密度偏差并方便并行,但固定体素会遇到空体素、边界割裂、薄结构丢失和分辨率成本问题。更好的做法是把体素作为候选 token 或空间索引,再结合局部点聚合和层级结构保留细节。

如何避免稀疏区域 token 噪声太大?

可以设置最小点数、邻域扩展、相邻 token 共享上下文、密度特征、mask 标记和置信度权重。模型需要知道这个 token 来自少量点,后续 attention 或分类头才能降低不可靠局部特征的影响。

点云 ViT 是否需要保持点的输入顺序?

不应该依赖原始输入顺序。Patch 内部通常用共享 MLP、池化、局部 attention 等 permutation-invariant 或 permutation-equivariant 结构处理点集合;token 之间再通过 3D 位置编码和 attention 建模空间关系。

位置编码要不要做旋转不变?

取决于任务。自动驾驶或机器人坐标系中,绝对方向可能有业务含义;通用物体识别可能更希望对旋转鲁棒。可以通过相对坐标、局部坐标系、旋转增强或等变结构控制这个取舍。