P3-SAM:Native 3D Part Segmentation

P3-SAM:Native 3D Part Segmentation

一句话理解

P3-SAM 可以看作 3D 版本的 SAM:在某个零件上点一下,模型就找出与这个点属于同一零件的所有区域。

它不是直接做 K-means 聚类,而是做 “提示点条件下的部件归属预测”。

1. 整体流程

flowchart TD A[输入 3D Mesh] --> B[表面采样点和法线] B --> C[Sonata / Point Transformer V3] C --> D[得到每个点的 3D 特征] D --> E[输入一个提示点 p] E --> F[融合点特征、点坐标、提示点坐标] F --> G[三个候选 Mask] G --> H[第二阶段用全局信息细化] H --> I[IoU 预测器评分] I --> J[选择最佳 Mask] J --> K[得到提示点所在的部件]

2. 每个点的特征怎么得到

从 Mesh 表面采样点:

\[P = \{x_i\}_{i=1}^{N}, \qquad N = \{n_i\}_{i=1}^{N} \]

其中 \(x_i\) 是点坐标,\(n_i\) 是法线。

Sonata 使用 Point Transformer 让每个点观察周围邻居,并逐层融合不同范围的几何信息:

flowchart LR A[点坐标 x] --> C[局部邻域建模] B[法线 n] --> C C --> D[浅层特征:边缘、曲面] D --> E[深层特征:局部结构和整体形状] E --> F[多尺度特征融合] F --> G[每点 512 维特征]

每个点的特征可以理解为一张描述卡片,包含:

  • 它在哪里;
  • 表面朝向是什么;
  • 周围的几何形状是什么;
  • 它在整体结构中可能扮演什么角色。

论文中将多尺度特征融合后,用 MLP 得到点特征:

\[f_i = \mathrm{MLP}\big(\mathcal{E}(P,N)_1, \mathcal{E}(P,N)_2, \ldots, \mathcal{E}(P,N)_L\big)_i \]

3. 提示点如何产生一个部件 Mask

假设提示点是 \(p\),对每个采样点 \(x_i\),模型构造:

\[z_i = [f_i, x_i, p] \]

然后分割头预测该点属于提示点所在部件的概率:

\[s_i = \mathrm{Seg}(z_i) \]

根据阈值生成 Mask:

\[m_i = \mathbb{1}(s_i > 0.5) \]

也就是说,模型实际在回答:

“第 \(i\) 个点,和提示点 \(p\) 是不是同一个部件?”

多个候选 Mask

模型会同时生成 3 个候选 Mask,因为一个提示点可能对应不同尺度的部件:

flowchart TD A[点特征 + 提示点] --> B[候选 Mask 1] A --> C[候选 Mask 2] A --> D[候选 Mask 3] B --> E[第二阶段细化] C --> E D --> E E --> F[IoU 预测器] F --> G[选出质量最高的 Mask]

因此,P3-SAM 的核心不是计算点与点之间的简单距离,而是让网络学习一个 提示点条件的二分类器。

4. 如何自动分割整个模型

交互模式只需要一个提示点;自动模式则自动生成很多提示点:

flowchart TD A[输入 Mesh] --> B[FPS 采样大量提示点] B --> C[每个提示点运行一次 P3-SAM] C --> D[得到很多候选 Mask 和 IoU 分数] D --> E[按 IoU 从高到低排序] E --> F[NMS 删除重复 Mask] F --> G[点 Mask 映射到 Mesh 面] G --> H[邻域投票和 Flood Fill 补全空洞] H --> I[输出多个部件标签]

其中:

  • FPS:尽量均匀地选择提示点,避免漏掉小部件;
  • NMS:两个 Mask 重叠太多时,只保留质量更高的一个;
  • 投票和 Flood Fill:把采样点结果恢复到完整 Mesh 面上,并补齐未覆盖区域。

5. 它和“特征聚类”的区别

方式 P3-SAM 直接聚类
是否需要提示点 需要 不需要
判断方式 根据提示点预测部件 Mask 根据特征距离分组
是否需要预设部件数量 不需要 通常需要或需要调参数
是否直接进行 K-means 否 是
自动分割方式 多个提示点 + NMS 聚类后直接分组

最准确的概括是:

一次提示点得到一个部件 Mask;多个提示点重复执行,再通过 NMS 去重并恢复成完整的部件分割。

6. 训练时学什么

训练时,从一个真实部件中随机选一个点作为提示点,让模型恢复该部件的真实 Mask:

flowchart LR A[真实部件 Mask] --> B[随机选一个部件内的点] B --> C[P3-SAM 预测 Mask] C --> D[Dice Loss + Focal Loss] C --> E[预测 IoU] E --> F[MSE Loss]

这样模型逐渐学会:

“给定部件中的一个点,如何利用几何特征找回整个部件。”

7. 最终总结

flowchart LR A[3D 几何特征] --> B[提示点条件分割] B --> C[单个部件 Mask] C --> D[多提示点重复预测] D --> E[NMS 去重] E --> F[完整 3D 部件分割]

P3-SAM 的核心逻辑可以压缩成一句话:

先为每个 3D 点提取几何特征,再以提示点为条件判断哪些点属于同一个部件,最后通过多个提示点和 Mask 去重实现全模型自动拆分。

posted @ 2026-10-15 15:07  S-X-Q  阅读(11)  评论(0)    收藏  举报