# DepthAnything3与SAM3阅读笔记

@[TOC](https://github.com/UnderTurrets/notes/blob/master/Vision/%E6%96%87%E7%AB%A0%E7%9B%AE%E5%BD%95/README.md)

***

## Depth Anything 3: Recovering the Visual Space from Any Views (2025)

* **输入 (Input):**
  * **任意数量的RGB图像** (可以是单张图片、多张无序图片或连续视频流)。
  * (可选) **相机位姿信息** (模型可处理已知位姿，也可处理完全未知的位姿)。
* **输出 (Output):**
  * 每张图像对应的 **高精度深度图 (Depth Map)**。
  * 每张图像对应的 **射线图 (Ray Map)** (用于隐式表示相机几何信息)。
  * (由此导出的) **相机位姿 (Camera Poses)** 和统一的 **3D点云 (Point Cloud)**。
* **解决的任务 (Task):**
  * **全能视觉空间恢复 (All-purpose Visual Space Recovery)**。
  * DA3 旨在统一传统的单目深度估计、多视图立体几何 (MVS) 和相机位姿估计任务。它使用单一的 Transformer 模型，解决了从任意形式的视觉输入（无论是一张图还是多张图）中同时恢复一致的 **3D几何结构** 和 **相机运动轨迹** 的问题，且无需复杂的专用架构。

### Motivation

**背景与痛点：** 传统的3D视觉任务（如单目深度估计、多视图立体几何MVS、SLAM、Structure-from-Motion）通常被视为独立的任务，拥有各自专用的模型架构。虽然近期出现了一些尝试统一这些任务的工作（如VGGT, DUSt3R），但它们存在显著局限性：

1. **架构复杂且无法利用预训练模型：** 往往需要重新设计复杂的架构，导致无法直接继承大规模预训练模型（如DINOv2）的强大特征提取能力。
2. **训练目标冗余：** 为了兼顾多任务，模型往往预测冗余的目标（如同时预测位姿、局部/全局点云、深度），导致优化困难。
3. **数据困境：** 真实世界的3D数据（如LiDAR）往往稀疏且充满噪声，难以直接用于训练高质量的几何模型。

**DA3 的核心理念：** DA3 提出了一种\*\*“极简主义” (Minimalism)\*\* 的策略。它试图回答两个核心问题：

1. **是否需要复杂的专用架构？** 答案是否定的。DA3 证明了一个标准的、未经修改的 Vision Transformer (ViT) 加上简单的 Token 重排，就足以处理任意数量的视图。
2. **是否存在最小的预测目标集？** 答案是肯定的。DA3 发现，仅预测**深度 (Depth)** 和 **射线 (Ray)** 就足以恢复完整的3D空间和相机位姿，无需显式回归复杂的旋转矩阵或冗余的点云图。

### Methodology

这是论文最核心的部分，DA3 将“从任意视图恢复几何”定义为一个**密集预测任务 (Dense Prediction Task)**。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/DA3_pipeline.png)

#### 问题定义

输入是一个包含 N 张图像的集合。

* 如果 N=1，则是单目深度估计。
* 如果 N>1，则是多视图重建或视频处理。
* 输入可以是已知相机位姿（Posed），也可以是未知位姿（Unposed）。

模型的目标是为每一张输入图像 I<sub>i</sub>，输出像素对齐的：

1. **深度图 (Depth Map) D**<sub>**i**</sub>
2. **射线图 (Ray Map) M**<sub>**i**</sub>

#### 核心创新：深度-射线表示

这是 DA3 能够统一位姿估计和几何重建的关键技术。

**为什么要用射线图？** 直接预测相机旋转矩阵 `R` 很难，因为必须满足正交性约束。DA3 选择隐式地通过“逐像素射线”来表示相机位姿。

**射线图的定义：** 对于图像中的每个像素 `p`，其对应的相机射线 `r` 定义为原点 `t` 和方向 `d` 的组合：

$$
\mathbf{r} = (\mathbf{t}, \mathbf{d}), \mathbf{t} \in \mathbb{R}^3, \mathbf{d} \in \mathbb{R}^3
$$

* **射线原点：** 即相机的中心在世界坐标系下的位置。对于同一张图的所有像素，这个值理论上是相同的。
* **射线方向：** 定义为像素在相机坐标系下的方向旋转到世界坐标系。

  $$
  \mathbf{d} = \mathbf{R} \mathbf{K}^{-1} \mathbf{p}
  $$

  **注意：** 这里的 `d` **没有归一化**。保留其模长是为了保持投影的尺度。

因此，一个像素 `p` 在世界坐标系下的3D点 `P` 可以简单地通过以下公式计算：

$$
\mathbf{P} = \mathbf{t} + D(u, v) \cdot \mathbf{d}
$$

这种表示法使得模型输出的**射线图**（前3通道为原点，后3通道为方向）和**深度图**可以通过简单的元素级运算直接生成一致的点云。

#### 从射线图中解算相机参数

虽然训练时预测的是密集的射线图，但在推理时我们可能需要明确的相机参数 `(K,R,t)`。DA3 设计了一套基于**单应性 (Homography)** 的解算方法：

1. **计算相机中心：** 直接对预测的密集射线原点求平均。

   $$
   \mathbf{t}*c = \frac{1}{H \times W} \sum*{h,w} \mathbf{M}(h, w, :3)
   $$
2. **解算旋转 R 和内参 K：**

   * 定义一个“单位相机”（Identity Camera），

   $$
   其内参 \mathbf{K}\_I = \mathbf{I}。其射线方向为 \mathbf{d}\_I = \mathbf{p}。
   $$

   * 目标相机的射线方向与单位相机射线之间存在线性变换关系：

   $$
   \mathbf{d}\_{cam} = \mathbf{K} \mathbf{R} \mathbf{d}\_I
   $$

   * 令 `H = KR`。这是一个单应性矩阵。问题转化为寻找一个矩阵 `H`，使得它能将单位射线映射到模型预测的射线方向上。
   * 这是一个标准的最小二乘问题，可以通过 **直接线性变换 (DLT)** 算法求解。
   * 求出 `H*` 后，由于 `K` 是上三角矩阵，`R` 是正交矩阵，可以通过 **RQ分解** 唯一地分离出 `K` 和 `R`。

#### 辅助相机头

尽管上述从射线图解算位姿的方法很精确，但在大规模推理时，对百万级像素进行DLT和SVD分解计算量过大。 因此，DA3 增加了一个轻量级的 **Transformer Camera Head**。

* 它只处理每张图对应的 **Camera Token**（见下文架构部分）。
* 直接回归预测：视场角 FOV (`f`)、旋转四元数 (`q`)、平移向量 (`t`)。
* 这在推理时极快，且实验证明其精度与密集射线解算相当。

### Architecture

DA3 的架构设计极度克制，旨在保持简洁并复用预训练权重。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/DA3_pipeline.png)

#### 单一 Transformer 骨干

* 使用标准的 **ViT** (如 DINOv2) 作为骨干网络。
* **不修改模型结构**，不增加新的注意力层。

#### 动态跨视图注意力

为了处理多视图之间的信息交互，DA3 并没有引入新的层（如Epipolar Attention），而是通过**重排 Token (Rearranging Input Tokens)** 来实现：

* **阶段一 (Within-View)：** 在前 L<sub>s</sub> 层，保持 Token 结构不变，Attention 仅在单张图像内部进行（标准的自注意力）。
* **阶段二 (Cross-View)：** 在后 L<sub>g</sub> 层，将所有图像的 Token 拼接到一起。此时的 Self-Attention 变成了**跨视图注意力**，允许不同图片之间的像素进行交互和匹配。
* 这种设计是“输入自适应”的：如果是单张图片输入，它就自动退化为标准的单目模型，没有额外计算开销。

#### 相机条件注入

为了统一处理“已知位姿”和“未知位姿”的情况：

* 在每张图片的 Patch Tokens 序列前，插入一个 **Camera Token c**<sub>**i**</sub>。
* **已知位姿时：** 通过一个 MLP 将 `K, R, t` 编码成 embedding 作为 c<sub>i</sub>。
* **未知位姿时：** 使用一个可学习的、共享的 Token 作为 c<sub>i</sub>。
* 这个 Token 参与所有的 Attention 运算，充当几何上下文的载体。

#### 双 DPT 头

解码器部分基于 DPT (Dense Prediction Transformer)，但做了改进：

* **共享重组 (Reassemble)：** 特征图的提取和上采样是共享的。
* **双分支融合 (Dual Fusion)：** 在最后阶段分为两个分支，一个输出深度，一个输出射线。
* 这种设计既保证了两个任务共享底层特征，又避免了输出层的相互干扰。

### 数据流转

#### 阶段 1：Image Patch Embed (图像块嵌入)

**目标**：将二维的像素图像转化为 Transformer 可以处理的一维 Token 序列。

1. **输入数据**：
   * 假设输入了 N 张图像。
   * 维度：`[N, 3, H, W]` (N张图，3通道RGB，高H，宽W)。
2. **切块 (Patchify)**：
   * 将每张图切成 14 x 14 的小方块。
   * 块的数量：h = H/14，w = W/14。总块数 L = h x w。
   * 维度变化：`[N, 3, H, W]` → `[N, L, 14*14*3]`。
3. **线性投影 (Linear Projection)**：
   * 通过一个卷积层或全连接层，将每个 Patch 的像素值映射为特征向量，维度为 D。
   * 维度变化：→ `[N, L, D]`。
4. **注入相机 Token (Camera Token)**：
   * 对于每张图，生成一个代表相机参数的 Token（维度 1 x D）。
   * 将其拼接到 Patch Token 序列的最前面。
   * **最终阶段 1 输出**：`[N, L+1, D]`。
   * *(注：这里的 N 是图片数量，(L+1) 是每张图的序列长度，包含1个相机Token和 L 个图像Patch)*

#### 阶段 2：Single Transformer (单一 Transformer 主干)

**目标**：在特征空间提取几何信息，并进行“图内”和“图间”的信息交互。

这个阶段虽然是一个单一的模型，但在计算 Attention 时有两种模式（通过 Reshape 张量实现，无需改变模型结构）：

1. **前半部分层 (Within-View Attention)**：
   * **逻辑**：每张图片只看自己，提取单张图的特征。
   * **操作**：保持输入维度不变，将 N 视为 Batch Size。
   * **维度**：`[N, L+1, D]` → Self-Attention → `[N, L+1, D]`。
2. **后半部分层 (Cross-View Attention)**：
   * **逻辑**：模型需要对比不同视角的图片来推断 3D 结构（比如通过视差）。
   * **操作**：将所有图片的 Token 拼在一起，形成一个超长的序列。
   * **变形**：`[N, L+1, D]` → `[1, N * (L+1), D]`。
   * **Attention**：现在的 Attention 矩阵允许第 1 张图的 Patch 看到第 2、3 张图的 Patch。
   * **还原**：计算完后，再变回原来的形状。
   * **维度**：→ `[N, L+1, D]`。
3. **提取多层特征**：
   * 为了做密集预测，DPT 需要用到 Backbone 中不同深度的特征（例如第 5, 11, 17, 23 层的输出）。
   * 我们在输出前**移除相机 Token**，并将序列 Reshape 回二维特征图。
   * **最终阶段 2 输出**：4 个不同尺度的特征图列表。由于 ViT 是柱状结构，出来的特征图大小通常是一样的：
     * Feature 1: `[N, D, h, w]`
     * Feature 2: `[N, D, h, w]`
     * ...

#### 阶段 3：Dual-DPT Head (双分支 DPT 解码头)

**目标**：将提取的高维特征解码为像素级的深度图和射线图。

这里是 DA3 的创新点。DPT (Dense Prediction Transformer) 通常包含“重组(Reassemble)”和“融合(Fusion)”两步。

1. **重组 (Reassemble) - 共享模块**：
   * ViT 输出的特征图通常分辨率是固定的 (1/14)。
   * Reassemble 模块使用卷积和上/下采样，将那 4 个特征图转化为类似 ResNet 的金字塔结构（分辨率从 1/4 到 1/32 不等，通道数也调整）。
   * **数据**：变成了一组多尺度的特征图 {f\_1, f\_2, f\_3, f\_4}。
2. **双路融合 (Dual Fusion) - 独立模块**：
   * 这里分叉了！虽然输入特征是一样的，但有两套独立的融合路径。
   * **路径 A (Depth)**：使用一套权重将 {f\_1, f\_2, f\_3, f\_4} 从低分辨率逐级上采样并融合到高分辨率。
   * **路径 B (Ray)**：使用另一套**完全独立**的权重进行同样的融合操作。
   * *为什么？* 因为深度（标量）和射线（向量）的物理意义不同，需要不同的解码参数。
3. **预测头 (Prediction Heads)**：
   * **Depth Head**：
     * 输入：融合后的高分辨率特征。
     * 操作：卷积投影到 1 通道，双线性插值上采样回 H x W。
     * **输出维度**：`[N, H, W]` (每张图每个像素 1 个深度值)。
   * **Ray Head**：
     * 输入：融合后的高分辨率特征（Ray 分支的）。
     * 操作：卷积投影到 6 通道（前3通道是射线原点 t，后3通道是射线方向 d），上采样回 H x W。
     * **输出维度**：`[N, 6, H, W]` (每张图每个像素 6 个数值)。

#### 数据维度变化全景

| 阶段       | 步骤               | 数据形状 (Tensor Shape)    | 备注                               |
| -------- | ---------------- | ---------------------- | -------------------------------- |
| **输入**   | 原始图片             | `[N, 3, H, W]`         | N张图片                             |
| **阶段 1** | Patch Embedding  | `[N, h*w, D]`          | 变为一维序列                           |
|          | + Camera Token   | `[N, h*w+1, D]`        | 增加1个Token                        |
| **阶段 2** | Transformer      | `[N, h*w+1, D]`        | 形状保持不变 (内部 reshape 做 Cross-view) |
|          | 提取特征 (Reshape)   | List of `[N, D, h, w]` | 变回二维特征图，移除相机Token                |
| **阶段 3** | Reassemble       | List of Pyramids       | 变为多尺度特征金字塔                       |
|          | **分支 A (Depth)** | $$\downarrow$$         | 独立融合                             |
|          | **Output A**     | **`[N, H, W]`**        | **最终深度图**                        |
|          | **分支 B (Ray)**   | $$\downarrow$$         | 独立融合                             |
|          | **Output B**     | **`[N, 6, H, W]`**     | **最终射线图**                        |

### 训练策略：教师-学生范式

DA3 的成功在很大程度上归功于其训练数据的处理方式。

### 为什么要用 Teacher？

真实世界的3D数据（如 ScanNet, 7Scenes）的 Ground Truth (GT) 深度往往是**稀疏的、有噪声的**，且缺乏高频细节。直接用这些数据训练会导致模型学不到精细的几何结构。

#### 构建 Teacher 模型

* 训练一个强大的**单目深度估计模型**作为 Teacher。
* **数据：** 仅使用**合成数据**（Synthetic Data, 如 Hypersim, TartanAir）训练 Teacher。合成数据的深度是完美、稠密且无噪声的。
* **预测目标：** Teacher 预测的是 Scale-Shift-Invariant 的**深度 (Depth)**（不同于 DA2 预测视差 Disparity）。对于近处物体，采用指数深度表示以增加区分度。

#### 伪标签对齐

在训练 DA3 (Student) 时，使用真实图片：

1. Teacher 生成高质量、稠密的**相对深度**。
2. 数据集提供稀疏、含噪的**绝对深度** (Metric Depth)。
3. **RANSAC 对齐：** 使用 RANSAC 算法计算线性变换参数（Scale `s` 和 Shift `t`），将 Teacher 的预测对齐到真实的稀疏深度上。

   $$
   \mathbf{D}*{aligned} = s \cdot \mathbf{D}*{teacher} + t
   $$
4. Student 学习这个对齐后的稠密深度。这既保留了真实世界的度量尺度，又学会了合成数据级别的精细细节。

#### 损失函数

训练目标包含多项 Loss 的加权和：

$$
\mathcal{L} = \mathcal{L}\_D + \mathcal{L}\_M + \mathcal{L}\_P + \dots
$$

1. **深度损失 L**<sub>**D**</sub>**：** 预测深度与 GT/伪标签的 L1 Loss。
2. **射线损失 L**<sub>**M**</sub>**：** 预测射线图与 GT 射线的 L1 Loss。
3. **重投影点云损失 L**<sub>**P**</sub>**：** 显式约束生成的 3D 点云 `P` 的一致性。
4. **表面法向量损失 (Surface Normal Loss)：** 这是一个改进点。不仅计算梯度的 Loss，还通过采样邻域点计算几何法向量，强制模型学习平滑且准确的表面细节。

### 实验与总结

**基准测试 (Benchmark)：** 作者建立了一个新的 Visual Geometry Benchmark，包含相机位姿估计、几何重建精度、新视图合成质量等多个维度。

**结果：**

* **位姿估计：** DA3 在 ScanNet++ 等数据集上大幅超越 SOTA (如 VGGT, DUSt3R)，提升约 35.7%。
* **几何重建：** 重建精度提升约 23.6%。
* **单目能力：** 即使回退到单目模式，其性能也超越了 Depth Anything 2。

**应用：前馈 3D Gaussian Splatting (Feed-Forward 3DGS)** 作者展示了 DA3 可以作为一个通用的几何基座。通过微调一个轻量级的 Head 来预测 3D 高斯参数，DA3 在新视图合成 (NVS) 任务上也击败了专门设计的模型（如 pixelSplat, MVSplat）。

Depth Anything 3 的核心在于 **“去繁就简”**。它证明了不需要复杂的几何偏置网络，只需一个强大的预训练 Transformer，配合 **“射线图”** 这一精巧的表示法和 **“教师-学生”** 的高质量数据策略，就能统一单目、多目、有姿态、无姿态的各种3D感知任务。这是一篇将 3D Vision Foundation Model 推向实用化的重要论文。

***

## SAM 3: Segment Anything with Concepts (2025)

* **输入 (Input):**
  * 一张 **图像 (Image)** 或一段 **视频 (Video)**。
  * **概念提示 (Concept Prompts)**：主要是 **文本**（简短的名词短语，如“黄色校车”）或 **图像示例**（Exemplars，即给一张参考图），也可以是两者的多模态组合。
  * （可选）传统的视觉提示（点、框），用于交互式地修正结果。
* **输出 (Output):**
  * 图像或视频中 **所有** 符合该概念对象的 **实例分割掩码 (Instance Masks)**。
  * 如果在视频中，输出 **具有跨帧一致性ID的对象轨迹 (Object Tracks/Masklets)**。
* **解决的任务 (Task):**
  * **提示驱动的概念分割 (Promptable Concept Segmentation, PCS)**。传统的SAM 1/2只能根据位置提示（点/框）分割单个物体，且不理解语义；SAM 3 能够理解语义概念，自动检测、分割并跟踪场景中符合该概念的**所有**实例（例如“分割视频里所有的猫”）。
  * 它弥合了开放词汇检测（Open-Vocabulary Detection）与高质量交互式分割（Promptable Segmentation）之间的差距，利用解耦的“识别-定位”架构，在保证掩码质量的同时实现了对任意概念的语义理解和视频跟踪。

### Motivation

**现有技术的局限性：**

1. **SAM 1 & SAM 2 的局限：** 之前的SAM系列模型主要专注于**Promptable Visual Segmentation (PVS)**。用户给一个点或框，模型分割出对应的*单个*物体。虽然几何分割能力极强，但它们缺乏**语义理解**。例如，你不能直接告诉SAM 2“分割视频里的所有猫”，你必须手动点击每一只猫。
2. **开放词汇分割（Open-Vocabulary Segmentation）的不足：** 现有的开放词汇检测/分割模型（如OWLv2, GroundingDINO等）虽然能理解文本，但在分割的精细度（Mask Quality）和视频跟踪的一致性上，往往不如SAM系列。
3. **识别与定位的冲突：** 在开放世界检测中，模型既需要知道“这个物体是不是在这个图里”（识别），又需要知道“它具体在哪里”（定位）。强行让所有的Object Queries同时负责这两件事（特别是在处理负样本短语时）会导致性能下降。

**SAM 3 的目标：** 提出 **Promptable Concept Segmentation (PCS)** 任务。给定一个概念提示（文本或图像示例），模型需要：

* **检测、分割并跟踪**输入中符合该概念的**所有**实例。
* 保持SAM系列的高质量掩码和交互能力。
* 能够处理视频中的物体一致性。

### 核心任务定义

在深入模型之前，必须理解SAM 3定义的PCS任务：

* **输入：** 图像或视频 + 概念提示（Concept Prompt）。
  * 概念提示可以是：短名词短语（如 "yellow school bus"）、图像示例（Exemplar）、或者二者的结合。
* **输出：** 所有匹配该概念的对象的实例掩码（Instance Masks）、语义掩码，并在视频中保持ID一致性。
* **约束：** 文本限制为原子性的名词短语，不包含复杂的引用表达（Referring Expressions，如“那个坐在椅子上的男人”）。复杂的推理交由上层的 **SAM 3 Agent**（结合MLLM）处理。

### Method

SAM 3 的架构是 **检测器（Detector）** 和 **跟踪器（Tracker）** 的统一体，它们共享同一个视觉编码器。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/SAM3_architecture.png)

#### 统一的主干网络

SAM 3 没有使用SAM 2的Hiera（MAE预训练），而是采用了 **Perception Encoder (PE)**。

* **原因：** SAM 2的MAE骨干几何能力强但语义弱。SAM 3需要理解开放词汇文本，因此需要一个像CLIP一样图文对齐的特征空间。
* **实现：** PE使用对比学习在54亿图文对上进行预训练。SAM 3使用PE的图像编码器处理视频帧，只需提取一次特征，供检测器和跟踪器共用。

#### 图像检测器架构

这是SAM 3的核心创新部分，基于DETR架构但在多个方面进行了针对性改进。

1. **输入编码 (Encoders)：**
   * **图像编码器：** 输出非条件化的图像Embedding。
   * **文本编码器：** 编码文本提示。
   * **几何与示例编码器 (Geometry and Exemplar Encoder)：** 这是一个关键组件。它不仅像SAM 2一样处理点/框提示，还专门用于编码**图像示例（Image Exemplars）**。如果用户提供一张“参考猫”的图片，该编码器提取其ROI特征和位置嵌入。
   * **融合编码器 (Fusion Encoder)：** 将图像Embedding与“提示Tokens”（文本+示例）进行交叉注意力（Cross-Attention）融合，输出**条件化帧嵌入 (Conditioned Frame-Embeddings)**。
2. **解码器 (Decoder)：**
   * 标准的Transformer解码器，包含6层。
   * 使用 **Learned Object Queries**（学习到的对象查询向量）。
   * Queries通过自注意力相互通信，并通过交叉注意力从“提示Tokens”和“条件化帧嵌入”中获取信息。
   * **输出：** 边界框（Box）和分类分数。
3. **Presence Head (存在性预测头) —— 核心创新点：**
   * **问题：** 传统的DETR直接预测 $$p(\text{query}\_i \text{ matches NP})$$ 这要求每个Query不仅要定位好，还要判断整个图片里到底有没有这个物体（全局上下文）。这对于局部Query很难。
   * **解决方案：** **解耦识别（Recognition）与定位（Localization）**。
   * 引入一个全局的 **Presence Token**。
   * **公式分解：**

     $$
     p(\text{query}\_i \text{ matches NP}) = p(\text{query}\_i \text{ matches NP} | \text{NP present}) \cdot p(\text{NP present})
     $$
   * **实现细节：**
     * **Global：** Presence Token 经过一个MLP，预测该概念出现在图像中的全局概率 $$p(\text{NP present})$$
     * **Local：** Object Queries 只需要预测“如果该物体存在，我是不是最佳匹配”。
     * **推理时：** 最终得分为两者的乘积。
   * **优势：** 极大地提高了对**负样本短语**（Hard Negatives）的鲁棒性。如果模型确信“图像里没有狗”，Global分数接近0，所有的Query分数都会被压低，从而减少误检。
4. **Ambiguity Head (歧义处理头)：**
   * **问题：** 文本具有多义性。例如 "conductor" 既可以是“列车员”也可以是“导体”。
   * **解决方案：** 混合专家模型（Mixture of Experts, MoE）。
   * 模型并行训练 K 个专家（实验中 K=2 效果最好）。
   * **训练策略 (Winner-Takes-All)：** 计算所有专家的Loss，只对Loss最小的那个专家进行梯度回传。这样不同的专家会专门负责不同的语义解释。
   * **推理时：** 训练一个额外的分类头来预测哪个专家的解释最可能是用户想要的。
5. **Mask Head:**
   * 改编自MaskFormer，基于解码器的输出和条件化特征生成最终的分割掩码。

#### 视频跟踪器与推理

SAM 3 的视频处理结合了检测器的强语义能力和SAM 2的强时序传播能力。

1. **架构继承：** 跟踪器部分直接继承自SAM 2，拥有记忆库（Memory Bank）、记忆注意力（Memory Attention）和记忆编码器。
2. **跟踪逻辑 (The Loop)：** 对于视频的每一帧 t：
   * **Step 1: 传播:** 跟踪器利用记忆库，将上一帧 t-1 的掩码 M<sub>t-1</sub> 传播到当前帧，得到预测。这处理了物体的运动和形变。
   * **Step 2: 检测:** 检测器在当前帧 I<sub>t</sub> 上独立运行，找到所有符合文本提示的新物体 O<sub>t</sub>。
   * **Step 3: 匹配与更新:**
     * 使用IoU（交并比）作为匹配函数，将跟踪器的预测与检测器的结果 O<sub>t</sub> 进行关联。
     * **未匹配的检测框**被视为新出现的物体，初始化新的Tracklet。
     * **已匹配的轨迹**利用检测结果进行校准。
3. **时序消歧策略 (Temporal Disambiguation Strategies):** 为了解决视频中遮挡、拥挤场景下的ID跳变问题，SAM 3引入了精细的逻辑：
   * **Masklet Detection Score (MDS):** 一个轨迹在时间窗口内与检测器结果匹配的一致性得分。如果MDS过低，说明跟踪器可能“跟丢了”或者产生了幻觉，该轨迹会被抑制。
   * **Track Confirmation Delay:** 不立即输出新发现的物体，而是延迟 T 帧（例如15帧）。只有当物体在后续帧中持续被检测到，才确认为有效轨迹。这有效过滤了闪烁的误检。
   * **Periodic Re-Prompting (周期性重提示):** 每隔 N 帧，或者当跟踪置信度低但检测置信度高时，强制使用检测器的Mask重置跟踪器的状态。这能把跑偏的跟踪拉回来。

### 数据引擎

SAM 3 的成功很大程度上归功于其构建的庞大、高质量数据集（SA-Co）。这是一个\*\*人机回环（Human-in-the-loop）\*\*的系统。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/SAM3_dataengine.png)

* **Phase 1: Human Verification:** 使用现有的检测器（如OWLv2）生成伪标签，人类只负责“是/否”的验证。
* **Phase 2: Human + AI Verification (关键提速):**
  * 训练了一个基于Llama的多模态模型作为 **AI Verifier**。
  * **Mask Verification (MV):** AI判断掩码质量好坏。
  * **Exhaustivity Verification (EV):** AI判断是否漏检了物体（即掩码是否覆盖了所有实例）。
  * 这一步将标注效率提升了2倍，使模型能够从大规模噪声数据中学习。
* **Phase 3: Scaling & Domain Expansion:**
  * 利用AI挖掘网络上的长尾概念（Long-tail concepts）和困难负样本（Hard Negatives）。
  * 生成合成数据（Synthetic Data），并用AI Verifier清洗。
* **Phase 4: Video Annotation:**
  * 将上述流程扩展到视频，重点标注那些跟踪失败的拥挤场景。

**最终产出：**

* **SA-Co-HQ:** 5.2M 图片，4M 独特概念，高质量人工/AI验证标注。
* **SA-Co-SYN:** 39M 图片，大规模合成数据。

### Experiments

* **基准测试：** 提出了 **SA-Co Benchmark**，包含207K个独特概念，比现有的LVIS等数据集大50倍以上。
* **性能对比：**
  * 在LVIS上，Zero-shot AP达到 **48.8**（现有最佳OWLv2为38.5）。
  * 在SA-Co Benchmark上，性能是现有基线的 **2倍以上**。
  * 视频分割性能也大幅超越现有SOTA。
* **消融实验：** 证明了 **Presence Head** 和 **Hard Negative Training** 对性能提升至关重要。

### 总结

SAM 3 是“分割一切”从几何层面迈向语义层面的关键一步。它的核心技术亮点在于：

1. **统一架构：** 使得图像检测和视频跟踪在同一特征空间下无缝协作。
2. **解耦设计 (Presence Head)：** 巧妙地解决了开放世界检测中“是否存在”与“在哪”的矛盾。
3. **数据引擎：** 利用AI辅助标注（LLM as Judge/Verifier）实现了对千万级概念的高质量覆盖，这是模型泛化能力的根本来源。

***

## SAM 3D: 3Dfy Anything in Images (2025)

* **输入 (Input):**
  * 一张单视角的 **RGB自然图像** (Real-world image)，通常包含复杂的背景或遮挡。
  * 一个指示目标物体的 **2D分割掩码 (Segmentation Mask)** (通常结合SAM模型生成)。
  * (可选) 场景的 **稀疏深度图/点图 (Pointmap)**，用于辅助更精确的布局估计。
* **输出 (Output):**
  * 目标物体的 **3D几何形状 (Geometry/Shape)**。
  * 目标物体的 **高保真纹理 (Texture)**。
  * 物体在相机坐标系下的 **3D布局 (Layout)** (包含6D旋转、平移和缩放)。
  * (最终形式) 可直接用于渲染或编辑的 **3D网格 (Mesh)** 或 **3D高斯 (3D Gaussian Splats)**。
* **解决的任务 (Task):**
  * **真实场景下的视觉引导3D物体重建**。与以往仅能在去背景的合成图像上工作的模型不同，SAM 3D 能够在复杂、杂乱且存在遮挡的自然图像中，利用上下文信息恢复物体的完整3D结构。
  * **全景3D化 (3Dfy)**。不仅仅重建形状，还同时解决“放在哪里”的问题（Pose/Layout），将2D照片中的物体逆向映射回3D空间，实现从单张照片到可组合3D场景的转换。

### Motivation

**核心痛点：自然场景下的3D重建缺乏数据与鲁棒性。**

1. **从“多视图几何”到“视觉认知”的转变：** 传统的计算机视觉依赖多视图几何（如SfM, SLAM）来恢复3D结构。但在单张图像中，人类依靠的是“识别”和“先验知识”（Pictorial Cues）。现有的单图转3D模型（如Trellis, LRM等）通常是在去背景的、孤立的合成数据集（如Objaverse）上训练的。
2. **泛化能力差：** 当这些模型应用于真实世界的自然图像时，由于复杂的遮挡（Occlusion）、杂乱的背景（Clutter）以及缺乏绝对尺度信息，表现往往很差。
3. **数据壁垒（Data Barrier）：** 最大的挑战在于缺乏大规模的\*\*“自然图像-3D真值”\*\*成对数据。人类标注员很难凭空为一个自然图像中的物体创建完美的3D模型，也很难精准地标定其在3D空间中的位置。

**SAM 3D的解决方案：** 通过构建一个 **人机回环（Human- and Model-in-the-Loop, MITL）** 的数据引擎，结合合成数据预训练（Pretraining）和真实世界对齐（Real-world Alignment），像训练LLM一样训练3D大模型，通过SFT（监督微调）和DPO（直接偏好优化）让模型适应真实世界。

### Architecture

SAM 3D 采用了一种两阶段的**基于流匹配（Flow Matching）的生成架构**，并支持输出 Mesh 或 3D Gaussian Splats。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/SAM3D_architecture.png)

#### 输入编码

模型利用 **DINOv2** 作为图像编码器，提取强语义特征。为了兼顾细节和全局上下文，输入包含四组Token：

1. **Cropped Object:** 基于Mask裁剪的物体图像特征（提供高分辨率细节）。
2. **Full Image:** 全图特征（提供场景上下文、光照、遮挡关系）。
3. **Binary Masks:** 对应的物体掩码。
4. **(可选) Pointmap:** 粗糙的场景深度/点云图（如果由传感器或深度估计模型提供），用于辅助布局预测。

#### 第一阶段：几何模型

* **目标：** 预测物体的**粗糙形状（Coarse Shape）** 和 **布局（Layout: Rotation `R`, Translation `t`, Scale `s`）**。
* **核心架构：Mixture of Transformers (MoT)**
  * 为了同时处理高维的形状Token（4096个）和低维的布局Token（1个），模型采用了MoT架构。
  * **双流设计：** 包含两个Transformer，一个专注于Shape，一个参数共享但专注于Layout。
  * **交互机制：** 通过多模态自注意力层（Multi-Modal Self-Attention）进行信息交互，但保持参数和处理流的独立性。这允许模型在训练时对不同模态（如只微调Layout）进行解耦控制。
* **生成方式：** 基于流匹配（Flow Matching），将噪声去噪为 16<sup>3</sup> x 8 的潜在体素特征。

#### 第二阶段：纹理与精细化模型

* **目标：** 基于粗糙形状，生成**精细几何细节**和**纹理**。
* **核心架构：Sparse Latent Flow Transformer (SLAT)**
  * 它只处理粗糙形状中的“活跃体素”（Active Voxels），通过稀疏注意力机制提高效率。
  * 它以上一阶段的粗糙形状为条件，生成高分辨率的潜在特征。

#### 3D解码器

* **Depth-Aware VAE (深度感知变分自编码器):**
  * 这是本文的一个技术改进点（在Appendix C.6）。
  * 传统的VAE会将图像特征反向投影到所有体素，导致遮挡部分产生伪影（如物体底部变黑）。
  * **改进：** 仅将特征投影到当前视角下**可见**的体素上（利用深度图过滤）。
  * 解码器可以将潜在特征解码为 **Mesh（网格）** 或 **3D Gaussian Splats（高斯泼溅）**。

### Training

这是文章最精华的部分，SAM 3D 复用了 LLM 的训练范式：**Pretraining（预训练） -> Mid-training（中期训练/持续预训练） -> Post-training（后训练/对齐）**。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/SAM3D_training.png)

#### Step 1: 合成数据预训练

* **数据集 (Iso-3DO):** 约270万个来自Objaverse-XL等数据集的合成3D物体。
* **训练目标：** 学习基础的3D形状和纹理先验。
* **形式：** 渲染孤立物体的图像，训练模型从图像重建3D。
* **规模：** 训练了2.5 Trillion (2.5万亿) token。

#### Step 1.5: 半合成中期训练

为了让模型学会处理“遮挡”和“场景布局”，但又利用合成数据的精确3D真值，作者构建了 **RP-3DO (Render-and-Paste)** 数据集。

* **Render-and-Paste (渲染并粘贴) 技术：**
  * **Flying Occlusions (FO):** 将渲染的3D物体随机粘贴到自然图像上作为遮挡物。这迫使模型学习**形状补全（Shape Completion）**，即不仅重建可见部分，还要推断被遮挡的部分。
  * **Object Swap (OS):** 这是一个更高级的策略。
    * 利用2D分割Mask和深度估计，将自然图像中的真实物体“挖掉”。
    * 在原位置“填入”一个形态相似的合成3D物体（保持合理的深度关系）。
    * **目的：** 创造出既有真实背景上下文，又有完美3D真值（Layout和Shape）的数据。这让模型学会了**Mask-following（遵循掩码）和Layout estimation（布局估计）**。

#### Step 2: 真实世界对齐与数据引擎

这是SAM 3D能够处理真实照片的关键。作者构建了一个 **MITL（Model-In-The-Loop）** 数据管道，生成了名为 **SA-3DAO** 的基准和训练集。

**数据引擎的工作流 (The Data Flywheel):**

1. **Stage 1: 目标选择 (Choosing Target Objects)**
   * 从海量自然图像（如SA-1B）中，利用SAM模型和人工筛选，确定要重建的目标物体Mask `M`。
2. **Stage 2: 形状与纹理选择 (Object Model Ranking and Selection)**
   * **生成/检索：** 对于给定的物体，使用当前的SAM 3D模型（或早期的检索模型、其他SOTA模型）生成 `N` 个3D候选模型。
   * **人类反馈 (Best-of-N):** 标注员从 `N` 个候选中选出最好的一个，并打分。
   * **专家介入 (Artist Loop - Art-3DO):** 这是一个关键设计。如果模型生成的所有 `N` 个结果都很差（通常是长尾物体或复杂结构），这些样本会被路由给**专业3D艺术家**。
   * **价值：** 艺术家手动创建的高质量Mesh（Art-3DO）是极其宝贵的“种子数据”，用于教会模型它目前完全不会的概念，从而“推平”数据分布的长尾部分。
3. **Stage 3: 场景布局对齐 (Aligning Objects to 2.5D Scene)**
   * 标注员在一个交互界面中，将选定/创建的3D物体，放置回原图生成的2.5D点云（由单目深度估计得到）中。
   * 标注员调整 `R` (旋转), `t` (平移), `s` (缩放)，使其与点云完美贴合。

**后训练策略 (Post-Training Strategy):** 利用上述引擎收集的数据（约100万张图像，300万个Mesh），进行两个阶段的训练：

1. **SFT (Supervised Fine-Tuning):**
   * 直接在收集的高质量数据（MITL-3DO 和 Art-3DO）上微调模型。这让模型从“合成域”迁移到“真实域”。
2. **DPO (Direct Preference Optimization):**
   * 为了进一步对齐人类审美和物理合理性（如对称性、完整性），作者采用了DPO。
   * **数据对：** 使用数据引擎Stage 2中产生的“胜者”（Winner, x<sub>w</sub>）和“败者”（Loser, x<sub>l</sub>）。
   * **目标函数：** 优化模型使得生成 x<sub>w</sub> 的概率远大于 x<sub>l</sub>。

#### 核心损失函数与公式

**1. 基础流匹配损失 (Conditional Rectified Flow Matching):** 模型学习一个速度场 v<sub>θ</sub> 来拟合从噪声 x<sub>0</sub> 到数据 x<sub>1</sub> 的直线轨迹。

$$
\mathcal{L}*{\text{CFM}} = \sum*{m \in \mathcal{M}} \lambda\_m \mathbb{E}*{\tau, \mathbf{x}*\tau^m} \left\[ | \mathbf{v}^m - \mathbf{v}*\theta^m(\mathbf{x}*\tau^m, c, \tau) |^2 \right]
$$

其中 `m` 代表不同的模态（形状、旋转、平移等），`c` 是条件（图像、Mask）。

**2. DPO损失 (针对流匹配的适配):** 作者将Diffusion-DPO适配到了Flow Matching中。核心思想是增加Preferred样本的似然，降低Dis-preferred样本的似然。

$$
\mathcal{L}*{\text{DPO}} = -\mathbb{E}*{(x\_0^w, x\_0^l) \sim \mathcal{D}, \tau \sim U(0,T)} \left\[ \log \sigma \left( -\beta T w(\tau) \cdot \Delta \right) \right]
$$

其中 Δ 是两个样本在模型下的误差差值：

$$
\Delta = | \mathbf{v}^w - \mathbf{v}*\theta(x*\tau^w, c, \tau) |^2 - | \mathbf{v}^l - \mathbf{v}*\theta(x*\tau^l, c, \tau) |^2
$$

这里省略了参考模型项（Reference Model）以简化理解，实际计算中需要减去参考模型的误差。

**3. 模型蒸馏 (Model Distillation - Shortcut Models):**

为了加速推理（从25步减少到4步），作者使用了**Shortcut Models**技术。这不是简单的减少步数，而是训练模型预测“未来一步跨越 `d` 步”的结果。

$$
\mathcal{L}*{S}(\theta) = \mathbb{E} \left\[ | \mathbf{v} - \mathbf{v}*\theta(x\_\tau, c, \tau, d=0) |^2 + | \mathbf{v}*{\text{consistency}} - \mathbf{v}*\theta(x\_\tau, c, \tau, 2d) |^2 \right]
$$

这结合了标准流匹配损失和\*\*自一致性（Self-Consistency）\*\*损失。

### 总结

SAM 3D 是一篇工程与算法并重的工作。

* **算法上：** 它是目前SOTA的基于Flow Matching的3D生成模型，支持多模态（Shape+Layout+Texture）联合生成。
* **数据上（最重要）：** 它揭示了如何通过 **合成数据 -> 半合成数据（Render-Paste） -> 人机回环真实数据（MITL + Artists）** 的路径，解决真实世界3D重建数据匮乏的问题。特别是引入3D艺术家处理长尾困难样本（Art-3DO），并在训练中引入DPO，是其效果大幅超越前人（如Trellis, LRM）的关键原因。

***

## SAM 3D Body: Robust Full-Body Human Mesh Recovery (2025)

* **输入 (Input):**
  * 一张包含人物的 **单目RGB图像**。
  * (可选) 用户或系统提供的 **提示 (Prompts)**，如2D关键点、分割掩码 (Masks) 或边界框。
  * (可选) **手部裁剪图像** (用于增强手部细节)。
* **输出 (Output):**
  * **3D人体网格模型**，具体为 **Momentum Human Rig (MHR)** 参数（包含解耦的骨架结构、身体形状、姿态和相机参数）。
  * 高保真的 **全身 (身体+双手) 3D重建结果**。
* **解决的任务 (Task):**
  * **鲁棒的单目全身3D人体网格恢复 (Full-Body HMR)**。
  * 解决现有模型在“野生”场景（严重遮挡、罕见姿态、非常规视角）下表现不佳的问题。
  * 实现**可提示 (Promptable) 的3D重建**，允许用户通过交互式提示来引导或修正模型预测，同时在一个统一框架下精确恢复身体整体和手部细节。

### Motivation

尽管近年来 3D 人体网格恢复（HMR）取得了显著进展，但在实际应用（如机器人、生物力学）中，现有模型在处理非受控场景图片时仍表现出鲁棒性不足。主要挑战归结为以下几点：

1. **数据稀缺与质量问题**：
   * 高质量的“图像-3D网格”配对数据获取昂贵且困难。
   * 现有数据集要么是在实验室环境下采集，缺乏多样性；要么依赖伪标签（pseudo-labeling），导致网格质量低且包含系统性误差。
   * 模型往往在常见姿态上过拟合，而在罕见姿态、严重遮挡或非常规视角下失效。
2. **模型架构的局限性**：
   * 现有架构难以同时兼顾身体整体姿态和手部精细姿态的优化。身体和手部在输入分辨率、相机估计和监督目标上存在冲突。
   * 缺乏交互性：大多数模型是“黑盒”预测，无法利用用户的提示（如点击、关键点）来修正模糊或困难的预测。
3. **人体表示模型的缺陷**：
   * 大多数工作基于 SMPL 模型。SMPL 将骨架结构（skeleton structure）和软组织形状（shape）纠缠在一起，导致参数的可解释性和可控性较差（例如，改变形状参数可能会意外改变骨骼长度）。

**核心解决方案**： Meta 提出了 **SAM 3D Body (3DB)**，这是一个\*\*可提示（Promptable）\*\*的 HMR 模型。

* **新表示**：首次使用 **Momentum Human Rig (MHR)**，这种新的参数化模型解耦了骨架结构和表面形状。
* **新数据引擎**：构建了一个基于视觉语言模型（VLM）的数据引擎，挖掘了 **700万** 张具有挑战性的图像，并通过多阶段标注流水线获取高质量注释。
* **新架构**：采用 Encoder-Decoder 架构，支持辅助提示（如 2D 关键点、掩码），并设计了独立的身体和手部解码器。

### Architecture

3DB 的目标是从单张图像中恢复准确、鲁棒且可交互的 3D 人体网格（即预测 MHR 参数）。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting@master/SAM3Dbody_architecture.png)

#### 总体设计

模型采用 **可提示的 Encoder-Decoder** 架构（类似于 SAM），包含以下核心组件：

1. **图像编码器 (Image Encoder)**：提取图像特征。
2. **提示编码器 (Prompt Encoder)**：处理用户输入的 2D 关键点、掩码等提示。
3. **双解码器 (Dual Decoders)**：包含 **Body Decoder** 和 **Hand Decoder**，分别负责全身和手部的预测。

#### 人体表示：Momentum Human Rig (MHR)

与 SMPL 不同，MHR 显式地解耦了 **骨架结构 (Skeletal Structure)** 和 **身体形状 (Body Shape)**。模型预测的参数集合为 $$\theta = {P, S, C, S\_k}$$

* P：姿态 (Pose)
* S：形状 (Shape)
* C：相机参数 (Camera pose)
* S<sub>k</sub>：骨架参数 (Skeleton)

### Method详细拆解

#### 输入处理与编码

* 输入图像 `I` 经过归一化和裁剪。
* 使用视觉骨干网络（如 ViT-H 或 DINOv3）生成密集特征图 `F`。
* **可选的手部裁剪**：如果提供手部裁剪图像 I<sub>hand</sub>，同样通过编码器提取手部特征图 F<sub>hand</sub>。

  $$
  F = \text{ImgEncoder}(I), \quad F\_{\text{hand}} = \text{ImgEncoder}(I\_{\text{hand}})
  $$

#### 解码器 Token 设计

解码器通过查询 Token（Query Tokens）来预测参数。3DB 设计了四种类型的 Token，这种设计赋予了模型极强的灵活性和交互能力。

1. **MHR+Camera Token**：

   * 这是用于预测核心 MHR 参数和相机参数的 Token。
   * 它是一个可学习的嵌入向量 `E` 经过编码后的结果。

   $$
   T\_{\text{pose}} = \text{RigEncoder}(E\_{\text{init}}) \in \mathbb{R}^{1 \times D}
   $$
2. **2D Keypoint Prompt Tokens**：

   * 这是实现“可提示”功能的关键。如果用户或检测器提供了 2D 关键点 `K`，模型会将其编码为 Token。
   * 每个关键点包含 (x, y, label)。

   $$
   T\_{\text{prompt}} = \text{PromptEncoder}(K) \in \mathbb{R}^{N \times D}
   $$
3. **Hand Position Tokens**：

   * 用于在身体解码器中定位手部位置。这是一个可选 Token，即使没有它，身体解码器也能输出含手部的全身结果。

   $$
   T\_{\text{hand}} \in \mathbb{R}^{2 \times D}
   $$
4. **Auxiliary Keypoint Tokens**：

   * 为了增强模型对特定关节的推理能力和交互性，引入了针对所有 2D 和 3D 关键点的**可学习 Token**。
   * 这些 Token 允许模型显式地推理每个关节的位置，不仅限于回归最终网格参数。

   $$
   T\_{\text{keypoint2D}} \in \mathbb{R}^{J\_{2D} \times D}, \quad T\_{\text{keypoint3D}} \in \mathbb{R}^{J\_{3D} \times D}
   $$

#### 解码器 (MHR Decoder) 工作流

所有的 Token 被拼接在一起形成完整的查询集合 `T`：

$$
T = \[T\_{\text{pose}}, T\_{\text{prompt}}, T\_{\text{keypoint2D}}, T\_{\text{keypoint3D}}, T\_{\text{hand}}]
$$

1. **Body Decoder（身体解码器）**：
   * 利用交叉注意力机制（Cross-Attention），让查询 Token `T` 与全图特征 `F` 进行交互。
   * 输出 $$O = \text{Decoder}(T, F)$$
   * 输出中的第一个 Token 经过一个 MLP 层，直接回归出最终的 MHR 网格参数 θ。
2. **Hand Decoder（手部解码器 - 可选）**：
   * 这是一个专门的设计，为了解决手部在全图分辨率下特征不清晰的问题。
   * 它接收同样的提示信息，但与**手部裁剪特征** F<sub>hand</sub> 进行交互。
   * 输出 O<sub>hand</sub>，用于计算更精细的手部 MHR 参数。
   * **融合策略**：在推理时，可以将手部解码器的预测结果与身体解码器的结果合并，以获得更高保真度的手部细节。

#### 训练损失函数

3DB 使用多任务损失函数进行训练： $$\mathcal{L}\_{\text{train}} = \sum\_i \lambda\_i \mathcal{L}\_i$$

1. **2D/3D Keypoint Loss**：
   * 使用 L<sub>1</sub> 损失监督关节位置。
   * 引入了可学习的\*\*每关节不确定性（per-joint uncertainty）\*\*来调节损失权重（置信度越低，权重越小）。
   * **归一化**：在计算损失前，以骨盆（针对身体）和手腕（针对手部）为中心进行归一化。
   * **提示一致性**：如果用户提供了关键点提示，会增加该点的损失权重，强制模型输出与提示一致。
2. **Parameter Losses**：
   * 对 MHR 参数（姿态、形状）使用 L<sub>2</sub> 回归损失。
   * **关节限制惩罚**：防止生成解剖学上不可能的姿态。
3. **Hand Detection Loss**：
   * 模型内置了一个手部检测器。使用 GIoU 损失和 L<sub>1</sub> 损失来监督手部边界框的回归。
   * 如果在推理时检测到手部被遮挡，模型会自动关闭手部解码器。

#### 推理策略

* **默认模式**：使用身体解码器的输出。
* **增强模式**：如果检测到手部，且未被遮挡，则运行手部解码器。
* **融合（Merge）**：利用手腕和手肘的关键点作为“锚点”，将手部解码器的高精细度预测对齐并拼接到全身网格上。

### 数据引擎

为了解决数据多样性问题，作者开发了一个基于 VLM 的数据挖掘和标注引擎。

#### VLM 驱动的挖掘策略

* 不依赖随机采样，而是利用 VLM（视觉语言模型）来寻找**高价值、高难度**的图像。
* **失败分析闭环**：
  1. 在当前数据上运行 3DB。
  2. 找到预测失败（误差大）的样本。
  3. 人工用简短文字描述这些失败案例（例如：“做倒立的人”、“被部分遮挡的舞者”）。
  4. 将这些描述作为提示词输入 VLM，在海量图库中检索相似的困难图像。
  5. 将新挖掘的图像送入标注流水线。
* **覆盖场景**：遮挡、罕见姿态（杂技）、人与物体交互、极端尺度、低能见度等。

#### 多阶段标注流水线

如何为这些“野生”图片获取高质量 3D 真值？

1. **人工标注 (Manual Annotation)**：人工修正 2D 关键点，并标记可见性（遮挡处理）。
2. **单图网格拟合 (Single-Image Mesh Fitting)**：
   * 使用高容量的检测器预测**密集 2D 关键点**。
   * 使用 3DB 的当前版本初始化 MHR 参数。
   * **优化**：通过梯度下降优化 MHR 参数，最小化投影误差。
   * **约束**：引入了几何约束、参数先验（防止漂移）和正则化项。
3. **多视角网格拟合 (Multi-View Mesh Fitting)**：
   * 对于视频或多视角数据，利用时空一致性。
   * 先三角化生成稀疏 3D 关键点，再结合时间平滑性（Temporal Smoothness Loss）进行联合优化。

最终构建了包含 **700万** 张带有高质量标注的图像数据集，并在新的 **SA1B-Hard** 基准上进行了评估。

### 总结

SAM 3D Body 的核心贡献在于：

1. **全能性**：统一了身体和手部的高精度恢复。
2. **可控性**：通过 Promptable 架构（Token机制）实现了用户交互。
3. **鲁棒性**：通过 VLM 数据引擎专门攻克“长尾”和困难样本。
4. **解耦性**：使用 MHR 替代 SMPL，实现了骨架与形状的解耦。
