# A Survey on 3D Object Affordance

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

***

## PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation (2017)

* **输入 (Input):**
  * 一个三维点云，表示为一个**无序的点集** {P₁, P₂, ..., Pₙ}。
  * 每个点 Pᵢ 至少包含其三维坐标 (x, y, z)，也可以包含颜色、法线等额外特征。
* **输出 (Output):**
  * 根据任务不同而变化：
    * 对于**分类任务**：一个单一的**全局类别标签**，用于描述整个点云代表的物体（如“椅子”、“桌子”）。
    * 对于**分割任务**：为输入的N个点中的每一个点，都分配一个**局部类别标签**（如“椅腿”、“椅背”）。
* **解决的任务 (Task):**
  * **直接在原始、无序的三维点云上进行深度学习**。
  * PointNet 解决了传统方法在处理点云时，必须先将其转换为规则数据结构（如体素网格或多视图图像）所带来的**计算开销巨大**和**几何信息丢失**的核心痛点。
  * 它通过一个对点的顺序不敏感（置换不变）的架构，为**3D物体分类**、**部件分割**和**场景语义分割**等任务提供了一个统一且高效的基础框架。

### 摘要

PointNet是一篇开创性的深度学习论文，它首次提出了一种能够直接处理三维点云数据（Point Clouds）的神经网络架构。在此之前，处理点云的主流方法是将其转换为规则的格式，如三维体素（Voxel Grids）或多视图二维图像（Multi-view Images）。PointNet通过巧妙的设计，直接在无序的点集上进行学习，有效解决了传统方法的计算量大、信息损失等问题，并为3D分类、部件分割和场景语义分割等任务提供了一个统一、高效且性能强大的框架。

### 动机：为什么需要PointNet？

在PointNet出现之前，将深度学习应用于3D数据面临一个核心挑战：**数据表示的不规则性**。标准的卷积神经网络（CNN）依赖于规则的网格结构（如图像的像素网格），以便进行权重共享和高效计算。然而，点云作为3D传感器（如激光雷达、深度相机）直接输出的原始数据，具有以下特性，使其难以直接用于CNN：

1. **无序性（Unordered）**：点云是一个点的集合，点的顺序不影响其代表的几何形状。一个包含N个点的点云，有N!种可能的排列方式，模型必须对所有这些排列产生相同的输出，这被称为**置换不变性（Permutation Invariance）**。
2. **不规则性（Irregular）**：点云中的点分布不均匀，没有固定的网格结构。

为了规避这些问题，当时的研究主要采用以下两种预处理方法：

* **体素化（Voxelization）**：将点云转换成一个三维的二进制网格（体素）。这种方法虽然能应用3D CNN，但缺点明显：
  * **计算和内存开销巨大**：数据量随分辨率成立方增长（如64x64x64），处理高分辨率点云非常困难。
  * **信息损失**：量化过程会丢失点云的精细几何细节。
* **多视图投影（Multi-view Projection）**：从不同视角将3D模型渲染成多张2D图像，然后使用2D CNN处理。这种方法性能很好，但：
  * **丢失了三维空间信息**：将3D几何投影到2D，损失了固有的空间关系。
  * **不适用于点级别的任务**：难以扩展到需要为每个点进行预测的分割任务。

PointNet的动机就是设计一个**能直接处理原始点云**的网络，从而避免上述方法的弊端，保留最原始的几何信息，并构建一个更高效、更通用的3D理解框架。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/PointNet_overview.png)

### 核心思想与模型架构

PointNet的成功关键在于它巧妙地解决了点云的**置换不变性**和**几何变换不变性**。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/PointNetArchitecture.png)

#### 1. 解决置换不变性：对称函数 (Symmetric Function)

为了让模型对输入点的顺序不敏感，作者采用了一个核心思想：使用**对称函数**来聚合所有点的信息。对称函数是一种输入顺序改变而输出不变的函数，例如 `sum()`、`average()` 和 `max()`。

PointNet选择了 `max pooling` 作为其对称函数。其工作流程如下：

1. **独立特征提取**：网络首先使用一个共享的多层感知机（MLP）独立地处理每个输入点，将每个点从其原始坐标（如3维）映射到一个高维特征空间（如1024维）。由于MLP对所有点是共享的，这步操作与点的顺序无关。
2. **对称聚合**：对所有点的高维特征进行 **element-wise max pooling**。也就是说，对于1024个特征维度中的每一个维度，都取所有点在该维度上的最大值。
3. **生成全局特征**：`max pooling` 的结果是一个1x1024的向量，它聚合了整个点云的信息，形成了一个全局特征描述符。这个向量对输入点的顺序是完全不敏感的，从而解决了置换不变性问题。

这个全局特征向量可以被看作是整个三维形状的“签名”（signature），可用于后续的分类任务。

#### 2. 解决几何变换不变性：T-Net

一个物体的类别或部件不应该随着其在空间中的旋转或平移而改变。PointNet通过一个名为**T-Net (Transformation Network)** 的小型子网络来学习对齐输入的点云。

* **输入对齐网络 (Input T-Net)**：
  * 这是一个迷你的PointNet，它接收原始点云作为输入。
  * 它的任务是预测一个3x3的仿射变换矩阵。
  * 这个预测出的矩阵会直接乘以输入的点云坐标，将点云在进行特征提取前对齐到一个**规范（canonical）的空间**。这使得后续网络学习到的特征对刚体变换更加鲁棒。
* **特征对齐网络 (Feature T-Net)**：
  * 在点被映射到高维特征空间后，作者还引入了另一个T-Net来对齐特征。
  * 这个网络预测一个更高维度的变换矩阵（如64x64），并将其应用于点的特征上。
  * 为了防止优化困难并保持特征变换的稳定性，作者在损失函数中加入了一个**正则化项**，鼓励这个64x64的矩阵近似于一个**正交矩阵**，因为正交变换不会丢失信息。

#### 3. 网络架构详解

PointNet的架构分为两个主要部分：分类网络和分割网络。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/PointNetArchitecture.png)

**a. 分类网络 (Classification Network)**

1. **输入**: N个点，每个点3个坐标 (N x 3)。
2. **输入T-Net**: 预测一个3x3变换矩阵，并应用到输入点云上，实现输入的空间对齐。
3. **共享MLP**: 两个共享的MLP层（如64, 64）将每个点映射到64维特征空间。
4. **特征T-Net**: 预测一个64x64的变换矩阵，并应用到特征上，实现特征空间的对齐。
5. **共享MLP**: 更多的共享MLP层（如64, 128, 1024）进一步提取更高维的特征，得到一个 N x 1024 的特征矩阵。
6. **Max Pooling**: 对 N x 1024 的特征矩阵进行全局最大池化，得到一个 1 x 1024 的全局特征向量。
7. **分类MLP**: 最后，将这个全局特征向量送入一个标准的MLP（如512, 256, k），输出k个类别的得分。

**b. 分割网络 (Segmentation Network)**

分割任务需要为每个点预测一个标签，因此既需要全局信息（知道物体是什么），也需要局部信息（知道点在物体的哪个位置）。

分割网络是分类网络的一个扩展：

1. 它沿用分类网络的流程，直到计算出 **1 x 1024 的全局特征向量**。
2. 然后，它将这个全局特征向量 **拼接（concatenate）** 到每个点的中间层特征（如64维特征）上。这样，每个点的特征就从 N x 64 变成了 N x (64 + 1024)。
3. 现在，每个点的特征向量既包含了它自身的**局部信息**，也融合了整个形状的**全局上下文信息**。
4. 最后，将这些融合后的特征通过几层共享的MLP，为N个点中的每一个点输出m个部件/语义类别的分数（N x m）。

### 理论分析与可视化

PointNet不仅在实验上取得了成功，作者还提供了坚实的理论支持和直观的可视化。

* **通用近似定理（Theorem 1）**：论文证明了PointNet可以近似任何作用于点集上的连续函数。这意味着理论上，PointNet有足够的能力学习任意复杂的形状。
* **瓶颈维度与鲁棒性（Theorem 2）**：网络的输出主要由一个 **关键点集（critical point set）** 决定，即那些在`max pooling`操作中贡献了最大特征值的点。这个关键点集的数量上限由网络瓶颈（即1024维全局特征）决定。
  * **直观解释**：这意味着PointNet通过学习来寻找一个稀疏的、能代表整个形状骨架的关键点集。
  * **可视化（论文图7）**：作者将这些关键点可视化，发现它们确实构成了物体的**骨架或轮廓**。这解释了为什么PointNet对**点丢失**和**异常点**具有很强的鲁棒性——只要关键点大部分还在，非关键点的缺失或干扰对全局特征的影响很小。

### 主要贡献与影响

1. **开创性工作**：PointNet是第一个直接处理无序点云的深度学习模型，开辟了3D点云处理的新方向。
2. **简洁优雅的设计**：通过对称函数（max pooling）和T-Net，巧妙地解决了置换不变性和几何变换不变性这两个核心难题。
3. **统一的框架**：提供了一个单一架构，能够灵活地应用于3D分类、部件分割和场景分割等多种任务。
4. **高效性**：相比于体素和多视图方法，PointNet在计算上非常高效，为实时3D应用提供了可能。
5. **深远的影响**：PointNet成为了后续所有点云处理研究的基石。无数后续工作（如PointNet++, PointCNN, DGCNN等）都在其思想上进行扩展和改进，例如通过引入层次化结构来更好地捕捉局部几何信息。

总之，PointNet通过一个看似简单却蕴含深刻思想的架构，成功地将深度学习的强大能力引入到非结构化的3D点云世界中，是3D计算机视觉领域一座里程碑式的作品。

***

## AffordanceNet: An End-to-End Deep Learning Approach for Object Affordance Detection (2018)

* **输入 (Input):**
  * 一张静态的RGB图像。
* **输出 (Output):**
  * 对于图像中检测到的每一个物体，输出：
    1. 物体的类别标签 (e.g., "杯子", "锤子")。
    2. 物体的边界框 (Bounding Box)。
    3. 一个像素级的**功能可供性掩码 (Affordance Mask)**，其中每个像素都被赋予一个功能标签 (e.g., "可抓握", "可容纳")。
* **解决的任务 (Task):**
  * **端到端的、同步的目标检测与功能可供性检测**。AffordanceNet旨在解决传统方法需要**分步**处理（先检测物体，再分割其功能区域）所带来的速度慢、无法联合优化的弊端。
  * 它通过一个**单一、统一的网络模型**，不仅能回答“这是什么物体？”，还能在像素级别上精细地回答“这个物体的不同部分能用来做什么？”，从而为机器人与环境的交互提供高效且丰富的视觉信息。

### 论文概览

这篇论文提出了一种名为 **AffordanceNet** 的新型深度学习框架，其核心目标是**从单张RGB图像中，端到端地（End-to-End）同时完成多目标检测和其功能可供性（Affordance）的检测**。Affordance，或称“功能可供性”，指的是物体能够提供给人类（或机器人）进行交互的潜在功能区域，例如杯子的“可抓握”部分和“可容纳”部分。AffordanceNet 通过一个统一的网络架构，解决了传统方法中需要分步处理、效率低下且无法联合优化的问题，在保证高精度的同时实现了接近实时的处理速度，使其非常适合机器人应用。

### Motivation

在机器人学和计算机视觉领域，让机器理解物体不仅仅是识别其类别（“这是一个杯子”），更重要的是理解如何与其交互（“杯子的这个部分可以用来抓握”）。这种对物体功能的理解就是功能可供性（Affordance）检测的核心。

传统方法存在以下几个主要问题：

1. **分步式处理（Sequential Approach）**: 先前的先进方法（如论文中引用的\[6]）通常采用两阶段流水线：首先，用一个目标检测网络（如Faster R-CNN）来定位物体；然后，将检测到的物体区域裁剪出来，再送入另一个独立的分割网络来预测其功能可供性。这种方法的**缺点**是：
   * **速度慢**：两个网络串行执行，耗时加倍，难以满足实时应用需求。
   * **非联合优化**：两个网络独立训练，特征提取和任务预测过程是解耦的。目标检测的性能无法从功能可供性任务中受益，反之亦然。这是一种次优的解决方案。
2. **与实例分割的区别**: 虽然功能可供性检测在形式上类似于实例分割（Instance Segmentation），即检测并分割出每个物体实例，但存在一个**根本区别**：
   * **实例分割**：通常是**二分类**问题。对于一个检测到的物体（如“人”），分割任务是区分哪些像素属于这个人（前景），哪些不属于（背景）。
   * **功能可供性检测**：是**多分类**问题。对于一个检测到的物体（如“杯子”），需要将属于该物体的像素进一步细分为多个功能类别，例如“grasp (抓握)”、“contain (容纳)”、“pour (倾倒)”等。因此，传统的实例分割方法（如Mask R-CNN）中用于二分类分割的策略（如per-pixel sigmoid + binary cross-entropy loss）不再适用。

基于以上痛点，作者提出了AffordanceNet，旨在设计一个**单一、统一、端到端**的框架，高效、准确地联合解决这两个问题。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/Affordance_overview.png)

### Architecture

AffordanceNet的整体架构建立在Faster R-CNN的基础上，并进行了关键的扩展，形成一个具有两个并行分支的多任务学习网络。

**整体流程如下**：

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/Affordance_framework.png)

1. **特征提取主干 (Backbone)**：使用一个预训练的卷积神经网络（如VGG16）作为主干网络，从输入的RGB图像中提取深层特征图（Feature Map）。
2. **区域提议网络 (Region Proposal Network, RPN)**：与主干网络共享权重，用于生成一系列可能包含物体的候选区域（Region of Interest, RoI）。
3. **RoIAlign层**: 对于RPN生成的每一个RoI，RoIAlign层会从主干网络的特征图（如VGG的conv5\_3层）中提取并池化出一个固定大小的特征图（例如7x7）。**使用RoIAlign而非RoIPool至关重要**，因为它能解决像素级任务中的坐标对齐问题。
4. **双分支预测头 (Two-Branch Head)**：从RoIAlign输出的7x7特征图开始，网络分为两个并行的分支：
   * **分支一：目标检测分支 (Object Detection Branch)**
     * 将7x7特征图展平后，送入两个全连接层（Fully Connected Layers）。
     * 最终输出两个结果：
       * **分类 (Classification)**：通过一个Softmax层，预测该RoI所属的物体类别（例如“杯子”、“锤子”等，外加一个“背景”类）。
       * **边界框回归 (Bounding Box Regression)**：对RoI的坐标进行微调，以获得更精确的物体定位。
   * **分支二：功能可供性检测分支 (Affordance Detection Branch)**
     * 这是AffordanceNet的核心创新。它同样接收7x7的特征图。
     * 通过一个**卷积-反卷积序列 (Convolutional-Deconvolutional Layers)**，将7x7的低分辨率特征图逐步**上采样**到一个高分辨率的功能可供性掩码（Affordance Mask），例如244x244。
     * 最终通过一个**逐像素Softmax (per-pixel Softmax)** 层，为掩码中的每个像素分配一个最可能的功能可供性标签（例如“grasp”, “contain”, “background”等）。

### 关键技术细节

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/Affordance_framework.png)

AffordanceNet为了有效处理多类别功能可供性检测问题，引入了三个关键组件：

**1. RoIAlign层**

* **问题**: RoIPool（在原始Faster R-CNN中使用）在将RoI坐标从原图映射到特征图时，以及在划分网格时，都进行了粗暴的取整操作。这种量化会导致RoI和提取出的特征之间存在**空间错位**，对于像素级精度的分割任务是致命的。
* **解决方案**: RoIAlign通过**双线性插值**来计算采样点的精确特征值，避免了任何量化操作，从而保证了特征与RoI在空间上的严格对齐。这对于生成高质量的分割掩码至关重要。

**2. 用于高分辨率掩码的反卷积序列 (Deconvolution for High Resolution Mask)**

* **问题**: 作者通过实验发现，像Mask R-CNN中使用的较小尺寸掩码（如14x14或28x28）不足以表达和区分一个物体内部的多种、精细的功能区域。
* **解决方案**: AffordanceNet设计了一个由**三层反卷积**构成的上采样路径。每一层反卷积之前都跟有一个卷积层（+ReLU），用于学习上采样所需的特征。这个结构能将7x7的特征图逐步放大到244x244，生成一个平滑且精细的功能可供性掩码，从而保留足够的细节来区分不同的功能区域。

**3. 鲁棒的掩码重缩放策略 (Robust Resizing Affordance Mask)**

* **问题**: 在训练阶段，需要将原始的、任意大小的真值（Ground Truth）掩码缩放到网络的固定目标尺寸（如244x244）以计算损失。对于多类别标签，简单的图像缩放和单阈值处理（如>0.5则为前景）是行不通的。
* **解决方案**: 作者提出了一种多阈值重缩放策略：
  1. **标签整数化**: 将原始掩码中的唯一功能标签（如 `{'background', 'grasp', 'contain'}`）线性映射为整数（如 `{0, 1, 2}`）。
  2. **重缩放**: 对这个整数标签图进行重缩放。此时，缩放后掩码的像素值会变成浮点数（插值导致）。
  3. **多阈值化**: 对缩放后的掩码中的每个像素值 `p(x, y)`，找到与其最接近的整数标签 `p_hat`。如果 `p_hat - α ≤ p(x, y) < p_hat + α` （其中`α`是一个小超参，如0.005），则该像素的标签被确定为 `p_hat`。这本质上是一种“最近邻”的取整。
  4. 将处理后的整数标签映射回原始的功能标签。

**4. 多任务损失函数 (Multi-Task Loss)** 总损失 `L` 是三个子任务损失的加权和：`L = L_cls + L_loc + L_aff`

* `L_cls` (分类损失): 标准的多类别交叉熵损失。
* `L_loc` (定位损失): Smooth L1 Loss，用于边界框回归。
* `L_aff` (功能可供性损失): 这是与Mask R-CNN的关键区别。它采用 **逐像素的多类别交叉熵损失 (multinomial cross-entropy loss)** 。因为每个像素都需要从 C+1 个功能类别（包括背景）中选择一个，所以网络的最后一层是**逐像素Softmax**，而不是逐像素Sigmoid。

### 实验与结果

* **数据集**: 在两个公开数据集IIT-AFF（场景杂乱，真实世界）和UMD（场景简单，无干扰）上进行了评估。
* **性能**: 在两个数据集上，AffordanceNet的性能均显著超越了当时所有的SOTA方法。在更具挑战性的IIT-AFF数据集上，其Fw得分（一种衡量分割准确率的指标）比次优方法（BB-CNN-CRF）高出**3.7%**。值得注意的是，AffordanceNet在不使用任何CRF等后处理技术的情况下就取得了最佳效果，体现了端到端模型的强大。
* **消融研究 (Ablation Study)**: 论文通过实验（表III）验证了**掩码尺寸**的重要性。结果表明，从14x14增加到244x244，性能有显著提升，证明了其采用反卷积序列生成高分辨率掩码的必要性。
* **泛化能力**: 论文还展示了模型在未见过的测试环境（如Gazebo仿真环境、艺术画作）中的定性结果（图6），证明了其良好的泛化能力。

### 应用与意义

* **机器人应用**: AffordanceNet的输出对机器人来说是**立即可用**的。目标检测分支告诉机器人**物体是什么以及在哪里**；功能可供性检测分支则告诉机器人**如何与物体交互**（例如，应该抓握瓶子的哪个部分，应该将水倒入锅的哪个区域）。论文中展示了在WALK-MAN人形机器人上进行倒水任务的实例，验证了其实用性。
* **实时性**: 约150ms每张图的处理速度（在Titan X GPU上）使其能够用于实时机器人控制系统。
* **学术贡献**: 该工作成功地将实例分割的思想扩展到了更复杂的多类别功能可供性检测任务上，并提出了针对性的解决方案（高分辨率掩码生成、鲁棒重缩放、多类别损失函数），为后续相关研究奠定了坚实的基础。

### 总结

AffordanceNet是一个高效、准确且实用的端到端深度学习框架，用于同时进行目标检测和功能可供性检测。它通过一个巧妙设计的双分支、多任务学习架构，并引入了RoIAlign、反卷积序列和专为多类别分割设计的损失函数，成功解决了传统分步式方法的弊端。该模型不仅在基准数据集上刷新了SOTA记录，更重要的是，它展示了在真实机器人系统中的巨大应用潜力，为实现更智能的人机交互迈出了重要一步。

***

## ScanRefer: 3D Object Localization in RGB-D Scans Using Natural Language (2020)

* **输入 (Input):**
  * 一个由RGB-D扫描仪重建的**3D场景**，以点云（Point Cloud）的形式表示。
  * 一句描述特定目标物体的**自然语言文本（Natural Language Expression）**，例如“在角落里挨着桌子的那把黑椅子”。
* **输出 (Output):**
  * 一个**3D边界框（3D Bounding Box）**，在三维空间中框出被语言所描述的那个物体。
* **解决的任务 (Task):**
  * **3D视觉语言定位（3D Visual-Language Grounding）**。ScanRefer开创性地解决了在完整的3D场景中，根据文本描述来定位具体物体这一全新任务。
  * 它将传统的、局限于2D图像的“引用语理解”任务**提升到了三维空间**，克服了2D方法无法捕捉物体真实物理尺寸和复杂空间关系的根本局限，为机器人、增强现实（AR）等需要与物理世界交互的应用奠定了基础。

### 1. 核心思想

这篇文章的核心思想是解决一个全新的任务：**在三维（3D）场景中，根据一句自然语言描述，定位到其所指代的具体物体**。输入是一个由RGB-D扫描仪重建的3D场景（通常表示为点云），以及一句描述性文本（例如，“在电视柜前面的L形沙发”）。输出是这个被描述物体的3D边界框（3D Bounding Box）。为了实现这一目标，作者们提出了一个名为**ScanRefer**的深度学习模型，并构建了首个针对此任务的大规模数据集，也命名为**ScanRefer**。

### 2. Motivation

在ScanRefer之前，类似的任务——“引用语定位”（Referring Expression Grounding）——主要集中在二维（2D）图像上。即在图片中根据文本找到对应的物体区域。然而，这种2D定位有其根本局限性：

* **缺乏物理世界的空间理解：** 2D边界框无法表达物体的真实物理尺寸、体积和在三维空间中的精确姿态。这对于需要与环境进行物理交互的应用（如机器人抓取、增强现实AR）是远远不够的。
* **视角局限性：** 单张2D图像只能捕捉到场景的一个侧面，物体之间复杂的空间关系（如遮挡、前后、上下）可能无法完全展现，导致定位模糊或错误。

如下图所示，2D任务（左）只能在图像平面上框出长颈鹿，而3D任务（右）则能精确定位沙发的空间位置和尺寸，这对于后续的交互至关重要。因此，作者们认为，将视觉语言理解从2D提升到3D，是迈向更智能、更实用的AI系统的关键一步。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/ScanRefer_overview.png)

### 3. 主要贡献

这篇论文的贡献可以概括为以下三点：

1. **定义了新任务：** 首次系统性地提出了“3D自然语言物体定位”（3D Object Localization using Natural Language）这一新颖且具有挑战性的研究方向。
2. **构建了新数据集 (ScanRefer Dataset)：** 创建了第一个用于此任务的大规模数据集。该数据集基于著名的ScanNet 3D场景数据集，包含了**800个**室内场景中**11,046个**物体的**51,583条**人工标注的、自由形式的自然语言描述。这些描述比传统的2D数据集更长、更复杂，包含了丰富的空间关系、颜色、形状和尺寸信息。
3. **提出了新模型 (ScanRefer Model)：** 设计了一个端到端的神经网络模型，能够有效融合3D点云的几何特征和文本的语义信息，来预测目标物体的3D边界框。该模型在实验中显著优于将2D方法拓展到3D的基线模型，证明了直接在3D空间中进行处理的优越性。

### 4. ScanRefer 数据集

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/ScanRefer_Architecture_sub2.png)

数据集是本文的一大基石，其特点如下：

* **数据来源：** 基于ScanNet数据集，这是一个包含数千个通过RGB-D相机扫描重建的室内场景的集合。
* **数据规模：** 包含51,583条描述，平均每个物体有约4.7条描述，平均描述长度为20.27个单词，远超大多数2D引用语数据集。
* **描述特点：**
  * **自由形式（Free-form）：** 描述由人类标注员（通过亚马逊土耳其机器人AMT）撰写，语言风格自然多样。
  * **内容丰富：** 描述不仅包含物体的基本属性（如“红色的椅子”），还大量使用了**空间关系**（98.7%），如“在桌子旁边”、“最右边的”、“离门最近的”，以及比较级和最高级（“比另一个垃圾桶高”、“最大的沙发”）。
* **标注流程：**
  1. **描述收集 (Annotation)：** 标注员在一个3D交互界面中看到一个高亮的物体，并被要求写下至少两句话来唯一地描述这个物体。
  2. **验证 (Verification)：** 另一批标注员（学生）看到场景和描述，然后尝试在场景中选出描述所指的物体。只有那些能够被唯一、准确识别的描述才会被保留，确保了数据的质量和无歧义性。

### 5. Architecture

ScanRefer模型是一个端到端的架构，主要包含两个核心模块：**检测与编码模块 (Detection & Encoding)** 和 **融合与定位模块 (Fusion & Localization)**。整个流程如图所示。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/ScanRefer_Architecture.png)

#### 5.1 输入表示 (Input Representation)

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/ScanRefer_Architecture_sub1.png)

* **3D场景 (Point Cloud)：** 从ScanNet场景中随机采样40,000个点作为输入。每个点不仅有其三维坐标(x, y, z)，还融合了多种特征，包括：
  * **颜色 (RGB)：** 点的原始颜色信息。
  * **法线 (Normals)：** 描述点所在表面的朝向。
  * **多视角图像特征 (Multi-view Features)：** 作者借鉴了Dai等人的工作，将预训练的2D图像特征（来自ENet）“投影”到3D点上，这为点云带来了更丰富的纹理和视觉外观信息。
* **自然语言 (Text)：** 将输入的描述句子分词，并使用预训练的GloVe词向量模型将每个词转换为300维的向量。

#### 5.2 检测与编码模块 (Detection & Encoding Module)

这个模块并行处理视觉和语言输入。

1. **3D物体检测 (Detection):**
   * **骨干网络：** 采用当时最先进的3D点云物体检测器**VoteNet**作为骨干。
   * **工作原理：** VoteNet受到传统霍夫投票（Hough Voting）的启发。它首先让场景中的每个点都“投票”给它所属物体的中心点。然后，在这些投票聚集的地方形成候选物体（点簇，Point Clusters）。
   * **输出：** 该模块为场景生成一系列物体提议（Object Proposals）。对于每个提议，它会输出一个物体性得分（objectness score，即这里有多大概率是一个物体）和一个初始的3D边界框。
2. **语言编码 (Encoding):**
   * **网络结构：** 使用一个门控循环单元（GRU）网络来处理GloVe词向量序列。
   * **输出：** GRU的最后一个隐藏状态被作为整个句子的语义嵌入向量 **e** (一个256维的向量)，它浓缩了描述的全部信息。

#### 5.3 融合与定位模块 (Fusion & Localization Module)

这是模型的核心，它将视觉提议和语言描述关联起来。

1. **特征融合 (Fusion):**
   * 对于VoteNet生成的**每一个**物体提议（proposals），将其点簇特征 `ci` 与语言嵌入向量 **e** 进行拼接（concatenate）。
   * 为了过滤掉质量差的提议，使用检测模块输出的**物体性得分**作为掩码（mask），与拼接后的特征相乘，有效地抑制了那些不像物体的区域。
   * 最后，将处理过的特征送入一个多层感知机（MLP），得到最终的融合特征 `C'`。此时，每个物体提议都拥有了一个同时包含自身几何信息和全局语言上下文的特征向量。
2. **定位 (Localization):**
   * 另一个简单的MLP接收融合特征 `C'`，为每个物体提议计算一个最终的匹配分数 `S`。这个分数代表该提议与语言描述的匹配程度。
   * 所有提议的分数经过一个Softmax函数进行归一化，得到每个提议是最终目标的概率。
   * 在推理时，选择概率最高的那个物体提议的3D边界框作为最终输出。

### 6. 损失函数

为了有效训练模型，作者设计了一个复合损失函数 `L`，由三个部分加权组成： `L = α * L_loc + β * L_det + γ * L_cls`。

1. **定位损失 (Localization Loss, `L_loc`):**
   * 这是一个交叉熵损失。其目标是训练定位模块。在所有物体提议中，与真实目标物体（ground truth）的交并比（IoU）最高的那一个提议，其标签被设为1，其余为0。该损失函数驱使模型为最匹配的提议赋予最高的分数。
2. **物体检测损失 (Object Detection Loss, `L_det`):**
   * 这部分完全沿用了VoteNet的损失函数，用于训练物体检测器。它内部包含了投票回归损失、物体性分类损失、边界框回归损失和语义分类损失等，确保了模型能准确地生成高质量的物体提议。
3. **语言-物体分类损失 (Language-to-Object Classification Loss, `L_cls`):**
   * 这是一个**辅助损失（auxiliary loss）**，也是一个巧妙的设计。它利用语言嵌入向量 **e** 去直接预测目标物体的类别（如“椅子”、“桌子”等18个ScanNet类别）。
   * **作用：** 这个损失强迫语言编码器不仅要理解描述的整体含义，还要能从中提取出关键的**类别信息**。这为模型提供了额外的监督信号，有助于学习到更具判别力的语言特征，从而提升最终的定位性能。

### 7. 实验与分析

* **评估指标：** 使用Acc@kIoU，即预测的3D边界框与真实边界框的IoU大于阈值k（如0.25或0.5）的样本所占的比例。
* **基线对比：**
  * **2D方法+反向投影：** 将先进的2D引用语定位模型（如SCRC, One-stage）应用到场景的多个2D视图上，找到得分最高的2D框，然后利用深度信息反向投影回3D空间生成一个3D边界框。
  * **结果：** 实验表明，ScanRefer（例如，Acc@0.5IoU为27.40%）显著优于这些2D基线（最高仅9.04%）。这证明了2D方法的视角局限性，以及直接在3D中建模的必要性。
* **任务难度分析（"unique" vs "multiple"）：**
  * 作者将数据集分为两类：**unique**（场景中该类物体只有一个，如一个冰箱）和**multiple**（场景中有多个同类物体，如多把椅子）。
  * **结果：** 在"multiple"场景下，仅靠物体类别无法定位，必须理解描述中的空间关系等详细信息。ScanRefer在这类场景下的性能提升远超随机选择，证明了模型确实学到了语言中的细粒度信息。
* **消融实验 (Ablation)：**
  * **特征重要性：** 实验证明，加入多视角图像特征和法线信息都能提升性能，说明丰富的视觉输入是有效的。
  * **损失函数重要性：** 去掉辅助的 `L_cls` 损失后性能下降，说明该设计是有效的。
  * **端到端训练：** 联合训练检测和定位模块（end-to-end）比分开训练性能更好。

### 8. 结论

ScanRefer是一项开创性的工作。它成功地将视觉语言理解任务从2D图像领域拓展到了更具挑战性也更具实用价值的3D场景领域。通过定义新任务、构建高质量的大规模数据集、并提出一个有效的基线模型，它为后续在机器人、AR/VR、人机交互等领域的研究奠定了坚实的基础，并开启了一个全新的研究方向。

***

## Where2Act: From Pixels to Actions for Articulated 3D Objects (2021)

* **输入 (Input):**
  * 物体的单次视觉观测 (可以是2D RGB图像或3D部分点云)。
  * 一个指定的动作基元 (e.g., “推”、“拉”、“上拉”等)。
* **输出 (Output):**
  * 为物体表面上的**每个像素/点**预测的一组**可操作性信息 (Actionable Information)**，包括：
    1. **可操作性分数 (Actionability Score)**: 在此点进行交互的成功潜力。
    2. **动作提议 (Action Proposals)**: 多个可行的交互姿态（例如机械臂朝向）。
    3. **成功似然度 (Success Likelihoods)**: 对每个提议的成功概率打分。
* **解决的任务 (Task):**
  * **从原始视觉输入直接推断可动物体的交互方式**。该工作旨在让智能体直接从视觉数据中学习一个物体的“功能可见性”（affordance），即“在哪里”（Where）以及“如何”（How）执行一个动作才能成功地与之交互（例如打开抽屉、关上柜门）。
  * 它通过一个端到端的框架，绕过了传统的先完整感知物体状态（如关节、姿态）、再进行规划的复杂两步流程，直接将感知与动作联系起来。

### 概述

《Where2Act》是一篇在2020年ICCV（国际计算机视觉大会）上发表的论文，它解决了一个计算机视觉和机器人学中的核心问题：**如何让智能体从原始的视觉输入（如图像或点云）中，直接理解一个物体可以如何被交互，即推断出“在哪里”（Where）以及“如何”（How）执行动作**。

与传统方法不同，该论文不追求对物体进行完整的几何或物理状态估计（例如精确的关节参数），而是提出了一种端到端的学习框架。这个框架可以直接从像素/点级别预测出针对特定动作基元（如推、拉）的“可操作性信息”，包括可交互的位置、可行的交互姿态以及交互的成功概率。其核心贡献在于提出了一个新的任务范式、一个创新的网络架构，以及一个高效的“从交互中学习”的数据采样策略。

### Motivation

人类与环境的交互是自然而高效的。我们看到一个抽屉，就知道要拉把手；看到一扇门，就知道要推门板。但对于计算机来说，这非常困难。传统的计算机视觉方法存在以下局限性：

1. **被动感知 vs. 主动交互**：大多数视觉任务（如分类、分割、关键点检测）是“被动”的。它们能告诉我们一个物体“是什么”（e.g., 这是一个把手），但不能直接告诉我们“能用它做什么”（e.g., 应该朝哪个方向拉这个把手才能打开抽屉）。**这篇论文旨在弥合被动感知和主动交互之间的鸿沟。**
2. **两阶段方法的脆弱性**：一种常见的机器人学方法是“感知-规划”两阶段模式。首先，一个感知模块费力地估计出物体的完整三维模型、关节类型、运动轴、姿态等信息。然后，一个规划模块基于这些估计信息来规划动作。这种方法的缺点是，感知模块的任何微小误差都可能导致规划的彻底失败，而且它通常需要比实际任务更多的信息（比如，推开一扇门并不需要知道它的精确铰链位置）。

**《Where2Act》的动机正是要绕开这种脆弱且复杂的两阶段流程，提出一个更直接、更鲁棒的端到端方案，直接从像素学习到动作。**

### 任务定义：Where2Act

给定一个物体的单视角观测（2D图像或3D点云）和一个指定的动作基元（例如“拉”），模型需要为场景中的每一个像素（或点）`p` 预测以下三项“可操作性信息”：

* **(a) 可操作性分数 (Actionability Score, $a\_p$)**: 一个在 `[0, 1]` 之间的标量，表示在像素 `p` 处**发起**一个成功的交互的可能性有多大。这回答了“**这个点值得交互吗？**”的问题。例如，对于“拉”动作，把手上的点的 $a\_p$ 会很高，而柜子表面的点则会很低。
* **(b) 动作提议 (Action Proposals, {$R\_{z|p}$})**: 一个交互姿态（这里指机械臂末端执行器的朝向 $R \in SO(3)$）的**集合**。这回答了“**如果在这里交互，应该如何做？**”的问题。模型是一个生成模型，可以生成多个可能的有效姿态。
* **(c) 成功似然度 (Success Likelihood, $s\_{R|p}$)**: 对于一个**具体**的动作提议（由位置 `p` 和姿态 `R` 定义），其成功的概率有多大。这回答了“**这个具体的动作好不好？**”的问题。它可以用来对(b)中生成的多个提议进行排序和筛选。

如图所示，对于一个抽屉和“拉”动作，模型不仅会高亮把手区域（高 actionability），还会为选定的点生成多个交互姿态（action proposals），并给出它们的成功率（success likelihood）。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/where2act_overview.png)

### 模型架构与技术细节

如图所示，模型整体是一个编码器-解码器结构，主要包含四个部分。针对每种动作基元（推、拉、上推、左推等），都会独立训练一个网络。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/where2act_network.png)

#### A. 主干网络 (Backbone Feature Extractor)

负责从输入中提取密集的、逐像素/逐点的特征 `fp`。

* **对于2D图像输入**: 使用 **U-Net** 架构，编码器是预训练的 **ResNet-18**，解码器对称。
* **对于3D点云输入**: 使用 **PointNet++** 的分割网络版本。 最终为每个点输出一个128维的特征向量 `fp`。

#### B. 解码头 (Decoding Heads)

网络有三个并行的解码分支，都由简单的多层感知机（MLP）构成。

1. **可操作性评分模块 (Actionability Scoring Module, $D\_a$)**:
   * **输入**: 特征 `fp`。
   * **输出**: $$单个标量 a_p = D_a(f_p)，经过Sigmoid激活函数得到 `[0, 1]` 之间的分数。$$
   * **功能**: 预测该点是否适合进行交互。
2. **动作提议模块 (Action Proposal Module, $D\_r$)**:
   * **输入**: 特征 `fp` 和一个随机高斯噪声向量 `z`。
   * **输出**: $$一个6D表示的旋转矩阵 R_{z|p} = D_r(f_p, z)$$
   * **功能**: 这是一个**条件生成模型**（类似于cVAE或cGAN的生成器）。通过采样不同的噪声 `z`，可以为一个点生成多个不同的、可能的交互姿态。它的目标是**高召回率（high recall）**，即尽可能覆盖所有成功的姿态。
3. **动作评分模块 (Action Scoring Module, $D\_s$)**:
   * **输入**: 特征 `fp` 和一个**具体**的动作提议 `R`。
   * **输出**: $$单个标量 s_{R|p} = D_s(f_p, R)$$
   * **功能**: 对一个给定的完整动作（位置+姿态）进行打分。它的目标是**高精确率（high precision）**，准确判断某个动作能否成功。

#### C. 训练策略与损失函数

这是本文的一大亮点，因为它采用“从交互中学习”的范式，自己生成训练数据。

**数据收集策略**:

* **离线随机数据采样 (Offline Random Data Sampling)**: 在训练初期，在物体表面随机选择一个点 `p` 和一个姿态 `R`，然后在SAPIEN物理模拟器中执行这个动作，记录其是否成功。这种方法的**缺点是效率极低**，因为成功的交互（尤其是“拉”这种精细动作）在巨大的动作空间中非常稀疏。论文提到“拉”动作的成功率只有1%。
* **在线自适应数据采样 (Online Adaptive Data Sampling)**: 为了解决上述问题，论文提出了一种**在线的、基于当前模型预测的采样策略**。在训练过程中，模型会利用当前学到的网络预测出哪些区域更可能成功，然后**有偏向性地在这些高成功率区域进行更多的交互尝试**。这种“边学边采”的策略（50%随机探索，50%模型引导的利用）极大地提高了采样效率，使得模型能更快地学到关键区域（如把手、边缘）的精细特征。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/where2act_env.png)

**损失函数**:

* **动作评分损失 (`L_s`)**: 对 `D_s` 模块使用标准的**二元交叉熵损失**。这是一个简单的二分类问题：给定的动作 `(p, R)` 究竟是成功 (label=1)还是失败 (label=0)？
* **动作提议损失 (`L_r`)**: 对 `D_r` 模块使用 **Min-of-N 损失**。对于一个已知的成功交互 `(p, R)`，我们用 `D_r` 生成N个（论文中N=100）提议，然后只计算**与真实姿态 `R` 最接近的那个提议**的损失。这种损失函数鼓励生成器 `D_r` 能够**覆盖**所有可能的成功姿态，只要其中一个猜对了就行，非常适合多模态输出的场景。
* **可操作性评分损失 (`L_a`)**: 这是最巧妙的设计。`a_p` 的真值是未知的，论文将其**定义为**：由动作提议模块 `D_r` 生成的随机提议的**期望成功率**。具体计算时，他们用 `D_r` 生成100个提议，再用（正在训练的）`D_s` 对这100个提议打分，取平均值作为 `a_p` 的**伪真值** $\hat{a}\_p$。然后用L2损失（均方误差）让 `D_a` 的预测去逼近这个伪真值。这个损失将三个模块巧妙地联系在了一起。

最终的总损失是这三个损失的加权和：

$$L = L_s + L_r + 100 \times L_a$$

### 实验与分析

* **环境与数据集**: 使用 **SAPIEN** 物理模拟器和 **PartNet-Mobility** 数据集，包含了大量带有关节标注的日常物品。
* **评估指标**:
  1. **F-score**: 评估动作评分模块 $D\_s$ 的二分类准确性。
  2. **Sample-Success-Rate (ssr)**: 这是一个端到端的、更具实践意义的指标。它模拟一个真实机器人的决策流程：首先用 $D\_a$ 选一个点，然后用 $D\_r$ 生成提议，再用 $D\_s$ 选出最好的提议去执行。ssr 统计最终成功交互的比例，**它综合评估了所有三个模块的性能**。
* **基线方法 (Baselines)**:
  * **B-Random**: 随机猜测。
  * **B-Normal**: 只使用物体表面的法线向量作为特征，来验证模型学到的特征是否比简单的几何信息更丰富。
  * **B-PCPNet**: 使用更强的几何特征（法线+曲率）。
* **消融实验 (Ablation Study)**:
  * **Ours w/o OS**: 去掉了在线自适应采样（Online Sampling），验证该策略的有效性。
* **主要结论**:
  * **性能优越**: 无论是在已见类别还是未见类别上，3D-Ours（使用点云输入的模型）在F-score和ssr上都显著优于所有基线方法（见表2）。这证明模型学到了比简单几何更有用的、面向交互的表示。
  * **泛化性强**: 模型不仅在训练类别的未见实例上表现良好，在**全新的、从未见过的物体类别**上也表现出很强的泛化能力。
  * **自适应采样有效**: 与 "Ours w/o OS" 相比，使用在线自适应采样的完整模型性能有明显提升（见表3），证明了该策略的价值。
  * **定性结果直观**: 可视化结果（图4, 5）清晰地显示，模型为不同动作（推/拉）和不同交互方向生成了非常直观且合理的“热力图”。例如，对于“拉”动作，模型会聚焦于把手；对于“推”动作，则会聚焦于平坦的表面。

### 总结与贡献

1. **任务创新**: 首次明确地**定义并解决了 "Where2Act" 这个任务**，即从原始视觉输入中为可动物体预测密集的、像素级的可操作性信息。
2. **架构创新**: 提出了一种**三分支解码网络架构**，分别负责预测交互的可能性（actionability）、生成交互的方式（proposal）和评估交互的质量（scoring），巧妙地解耦了任务难度。
3. **方法创新**: 提出了一个**高效的、结合离线和在线采样的“从交互中学习”的框架**。在线自适应采样策略极大地提升了数据收集效率和模型性能。
4. **实践价值**: 实验证明了该方法在物理模拟中的有效性和强大的泛化能力，为实现更智能的机器人交互提供了新的思路，并成功地将方法迁移到了真实世界的图像和扫描数据上（图6）。

**局限性**: 论文也指出了未来的改进方向，例如：模型目前基于单帧输入，无法解决视角带来的歧义；动作基元是预先定义的，不够灵活；没有显式地建模物体的运动学模型。

***

## CLIPort: What and Where Pathways for Robotic Manipulation (2022)

* **输入 (Input):**
  * 机器人当前的视觉观测 (一个顶视图 RGB-D 图像)。
  * 一句描述任务目标的自然语言指令 (例如：“把所有黄色的方块装进棕色盒子里”)。
* **输出 (Output):**
  * 机器人执行的下一个“抓取-放置”动作，具体包括：
    * 抓取位姿 (Pick Pose)
    * 放置位姿 (Place Pose)
* **解决的任务 (Task):**
  * **语言指令下的高精度桌面物体操作**。
  * CLIPORT 的核心目标是**将抽象的自然语言语义 (What) 与精确的物理空间操作 (Where) 相结合**。
  * 它通过一个创新的双流架构，利用大规模预训练模型 CLIP 的语义理解能力来指导 Transporter 网络进行厘米级的精确抓取与放置，从而让机器人能听懂指令，并泛化到在训练中**未曾见过**的物体和任务组合。

### 概述

CLIPORT 是一篇在机器人学习领域具有重要影响力的论文。它提出了一个创新的端到端框架，旨在解决一个核心挑战：**如何让机器人既能理解抽象的自然语言指令（例如，“把所有黄色的方块装进棕色盒子里”），又能精确地执行物理操作。**

文章的核心思想是巧妙地结合了两种当时最先进的模型：

1. **CLIP (Contrastive Language-Image Pre-training):** 一个由 OpenAI 开发的大规模视觉-语言预训练模型，它擅长理解图像和文本之间的**语义关联**（即“What”，是什么）。
2. **Transporter Networks:** 一个用于机器人操作的模仿学习框架，它通过学习像素级的“动作可供性”（Affordance），在**空间定位**上表现得极为精确（即“Where”，在哪里）。

CLIPORT 将这两者结合在一个受认知科学中“双流假说”（Two-Stream Hypothesis）启发的双流架构中，创建了一个既懂语义又懂空间的智能体，极大地提升了机器人在语言指令下的操作能力、泛化能力和数据效率。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/CLIPort_overview.png)

### Motivation

在 CLIPORT 之前，机器人操作领域主要面临以下两方面的困境：

1. **传统操作策略缺乏语义泛化能力：** 像 Transporter Networks 这样的端到端模仿学习方法虽然在特定任务上精度很高，但它们是“死记硬背”式的学习。例如，一个学会了“打包红笔”的机器人，无法直接理解“打包蓝笔”的指令。如果想换个目标物体或颜色，就需要收集全新的示教数据进行重新训练。这种方式扩展性差，不适应真实世界多变的需求。
2. **大规模预训练模型缺乏空间精度：** 像 CLIP 这样的模型在互联网海量图文数据上进行了预训练，拥有强大的语义理解能力。它可以轻松分辨出什么是“红笔”，什么是“蓝笔”。然而，这些模型学到的是全局的、抽象的表征，缺乏在机器人工作空间中进行厘米级精确操作所必需的**细粒度空间理解**。它知道图片里有只猫，但不知道如何精确地抓取猫的耳朵。

CLIPORT 的动机就是要**弥合语义理解（What）和空间精度（Where）之间的鸿沟**。作者希望创建一个框架，能够利用 CLIP 强大的语义先验知识来指导 Transporter Networks 精确的物理操作，从而实现一个能听懂人话、举一反三的机器人。

### 模型架构与技术细节

CLIPORT 的核心是其双流架构，这个设计灵感来源于人脑视觉皮层处理信息的两种通路：

* **腹侧通路 (Ventral Stream):** 主要处理物体的识别和语义信息（“What”）。
* **背侧通路 (Dorsal Stream):** 主要处理物体的位置和空间关系（“Where”）。

CLIPORT 的架构完美地映射了这一概念。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/CLIPort_architecture.png)

#### A. 基础框架：Transporter 网络

首先，CLIPORT 的动作表示和执行机制建立在 Transporter 网络之上。Transporter 将操作任务分解为一系列的 **“抓取-放置”(Pick-and-Place)** 动作。它的关键在于，它不是去检测物体，而是学习预测**动作的可供性图 (Affordance Map)**。

1. **抓取 (Pick):** 一个全卷积网络 (FCN) 接收场景的视觉输入（RGB-D图像），输出一个与输入图像同样大小的**抓取热力图 (Pick Heatmap)**。图上每个像素的值代表在此处执行抓取动作的成功概率。模型会选择热力图中值最高的像素点作为抓取点。
2. **放置 (Place):** 在确定抓取点后，模型会：
   * 以抓取点为中心，从场景图像中裁剪出一个小图块 (patch)。
   * 一个 **Query 网络** 负责处理这个裁剪的图块，生成一个“查询”特征。
   * 一个 **Key 网络** 负责处理完整的场景图像，生成一个“键”特征图。
   * 通过计算“查询”特征和“键”特征图之间的**互相关 (Cross-Correlation)**，生成一个**放置热力图 (Place Heatmap)**。这个热力图表示了将抓取的物体放置在场景中各个位置的匹配程度。模型同样选择值最高的点作为放置点。

这个框架的优点是**平移等变性 (Translational Equivariance)**，使得模型非常数据高效且泛化性强。

#### B. CLIPORT 的创新：双流架构

CLIPORT 将 Transporter 的 FCN 扩展为一个双流网络，用于处理语言指令。

1. **空间流 (Spatial / Dorsal Stream):**
   * **输入:** RGB-D 图像。
   * **结构:** 与原始 Transporter 网络基本一致，是一个从零开始训练的 ResNet 结构。
   * **目的:** 学习与操作任务直接相关的**精确空间特征**，例如物体的边缘、形状、相对位置等。这是“Where”通路。
2. **语义流 (Semantic / Ventral Stream):**
   * **输入:** RGB 图像和自然语言指令。
   * **结构:** 这是创新的核心。
     * **视觉编码器:** 使用一个**预训练好且被冻结 (frozen) 的 CLIP ResNet50**。冻结意味着在训练 CLIPORT 时，这部分的网络权重不会更新。它只负责将 RGB 图像提取成具有丰富语义信息的特征图。
     * **语言编码器:** 使用 **CLIP 的 Transformer 文本编码器**将自然语言指令（如 "pack the scissors"）编码成一个特征向量 `g`。
     * **语言-视觉融合:** 这是最关键的一步。语言特征向量 `g` 被复制并平铺 (tile) 成与视觉特征图同样的空间维度，然后通过**逐元素相乘 (Element-wise Product / Hadamard Product)** 的方式与视觉特征图进行融合。这一操作可以被理解为用语言指令去“过滤”或“加权”视觉特征，使得网络只关注与指令相关的物体（比如，指令是“红碗”，网络就会更关注图像中红色的、碗状的区域）。
   * **目的:** 理解指令的语义，识别出指令中提到的物体、颜色、属性等。这是“What”通路。
3. **流间融合 (Inter-Stream Fusion):**
   * 为了让语义流也能获得空间流的精确位置信息，作者设计了从**空间流到语义流的横向连接 (Lateral Connections)**。
   * 在解码阶段，两个流的特征图被融合在一起。最终，两个流的输出被结合起来（例如通过相加），生成最终的、同时包含语义和空间信息的**动作可供性图**，用于指导抓取和放置。

#### C. 训练细节

* CLIPORT 通过模仿学习进行训练，使用专家示教的 (图像, 语言, 动作) 数据对。
* 损失函数是标准的交叉熵损失，目标是让模型预测的热力图与专家示教的动作位置尽可能一致。
* **多任务学习 (Multi-task Training):** 在训练时，从多个不同任务的数据集中随机采样进行训练。这使得模型能学习到跨任务共享的通用概念（例如，“方块”这个概念可以在“堆叠方块”和“打包方块”两个任务中共享）。

### 将位姿估计问题转化为像素预测问题

网络的直接输出——“affordance map” 和 “dense features”——并不是直接的机器人位姿坐标 `(x, y, z, rotation)`。从这些网络输出到最终的机器人位姿，中间经历了一个巧妙的、基于图像空间的计算过程。

CLIPORT 框架的基石是将 3D 空间中的位姿估计问题，巧妙地转化为了在 2D 图像平面上的**密集像素预测 (Dense Pixel-wise Prediction)** 问题。这得益于其特定的实验设置：

* **顶视图正交相机 (Top-Down Orthographic Camera):** 机器人感知系统从正上方观察工作台。在这种视图下，工作台上的 `(x, y)` 坐标与相机图像的 `(u, v)` 像素坐标存在一个直接、线性的映射关系。
* **深度信息 (D):** RGB-D 相机提供了每个像素点的深度信息 `z`。

有了这个设置，任何一个像素 `(u, v)` 加上它的深度值 `d`，都可以通过已知的相机内参**反投影 (de-projection)** 回三维空间中的一个点 `(x, y, z)`。因此，**只要能在 2D 图像上找到正确的像素点，就能计算出对应的 3D 坐标。**

网络的任务就是输出一个 **“可供性热力图” (Affordance Heatmap)** ，图上每个像素的值代表了“在此处执行某个动作（如抓取）有多好”。我们只需要找到这个热力图中的最大值点，就能得到最佳的动作执行像素位置。

整个过程分为 **Pick (抓取)** 和 **Place (放置)** 两个独立的阶段。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/CLIPort_architecture.png)

#### 1. 计算抓取位姿 (Pick Pose)

这是比较直接的一步。

1. **网络输入：** 将当前的 RGB-D 图像和语言指令（如 "pack the scissors"）送入 **Pick FCN**（这是一个 CLIPORT 双流网络）。
2. **网络输出：** Pick FCN 输出一个单通道的 **`Q_pick` 热力图**。这个热力图与输入图像等大。图上每个像素 `(u, v)` 的值 `q` 代表了“在 `(u, v)` 对应的工作台位置执行抓取动作的成功概率或价值”。
3. **寻找最佳抓取像素：** 在 `Q_pick` 热力图上找到值最高的像素点，记为 `p_pick = (u_pick, v_pick) = argmax(Q_pick)`。
4. **计算 3D 抓取位姿：**
   * **坐标 `(x, y, z)`:** 使用 `p_pick` 坐标 `(u_pick, v_pick)` 和输入深度图像在该点的深度值 `d_pick`，通过相机反投影公式计算出在机器人工作空间中的三维坐标 `(x_pick, y_pick, z_pick)`。
   * **旋转 `(rotation)`:** 对于顶视图的吸盘抓取，通常只需要考虑绕 Z 轴的旋转。在 **Pick** 阶段，这个旋转通常是不必要的或设为一个固定值（例如，吸盘方向垂直向下），因为吸盘对物体的旋转不敏感。因此，**抓取动作被简化为只需要确定一个三维点**。

至此，机器人已经获得了完整的抓取位姿，可以移动末端执行器去抓取物体。

#### 2. 计算放置位姿 (Place Pose)

这一步更为复杂和精妙，它依赖于“**密集特征 (dense features)**”和“**互相关 (cross-correlation)**”。

1. **准备 Query 输入：** 在机器人“抓住”物体后（即确定了抓取点 `p_pick` 后），从**原始的输入图像**中，以 `p_pick` 为中心裁剪出一个固定大小的图像块 (patch)。这个 patch 代表了“当前机器人手上拿着什么东西”。
2. **网络输入与特征提取：**
   * **Query 特征 (`Φ_query`):** 将裁剪出的 **patch** 和**语言指令**送入 **Query FCN**（这是第二个 CLIPORT 双流网络）。它输出一个 `c x c x d` 的**查询特征核 (query kernel)**。这个特征核 `Φ_query` 编码了被抓取物体的视觉和语义信息。
   * **Key 特征 (`Φ_key`):** 将**完整的场景图像**和**语言指令**送入 **Key FCN**（这是第三个 CLIPORT 双流网络）。它输出一个 `H x W x d` 的**键特征图 (key feature map)**。这个特征图 `Φ_key` 编码了整个场景中所有可能的放置位置的视觉和语义信息。
3.  **使用互相关计算放置热力图：**

    * 这是最关键的一步。通过计算 `Φ_query` 和 `Φ_key` 的**互相关**，来生成最终的 **`Q_place` 放置热力图**。

    ```
    Q_place = Φ_key * Φ_query  (* 代表互相关操作)
    ```

    * **直观理解：** 这个操作可以想象成拿着代表“被抓物体”的特征核 `Φ_query`，在代表“整个场景”的特征图 `Φ_key` 上进行滑动匹配。在每个位置，计算一个相似度分数。最终得到的热力图 `Q_place`，其上每个像素 `(u', v')` 的值就代表了“将手上物体放置在此处的匹配程度或 goodness”。
4. **处理旋转 (Handling Rotation):**
   * 问题：如何确定放置时的最佳旋转角度？
   * **解决方案：** 在第 1 步中，不是只裁剪一个 patch，而是将这个 patch **旋转** `k` 个不同的离散角度（例如，`k=36`，每10度一个角度）。
   * 这会产生 `k` 个不同的旋转后的 patches。将这 `k` 个 patches 分别送入 Query FCN，得到 `k` 个不同的查询特征核 `Φ_query_1, Φ_query_2, ..., Φ_query_k`。
   * 执行 `k` 次互相关操作，得到 `k` 个放置热力图：`Q_place_1, Q_place_2, ..., Q_place_k`。
   * **在所有 `k` 个热力图中寻找全局最大值**。这个最大值所在的像素位置 `p_place = (u_place, v_place)` 和它所属的热力图索引 `k_best`，就共同决定了最佳的放置位置和旋转角度 `θ_place = k_best * (360/k)`。
5. **计算 3D 放置位姿：**
   * 与抓取阶段类似，使用 `p_place` 坐标 `(u_place, v_place)` 和深度图在该点的深度值 `d_place`，反投影得到 3D 坐标 `(x_place, y_place, z_place)`。
   * 最终的放置位姿就是 `(x_place, y_place, z_place)` 加上计算出的旋转角度 `θ_place`。

#### 总结

* **Affordance Map:** 就是指 `Q_pick` 和 `Q_place` 这两个热力图。它们是**动作可能性的空间分布图**，而非直接的坐标。
* **Dense Features:** 就是指中间产物 `Φ_query` 和 `Φ_key`。它们是网络学习到的、用于计算放置可供性（`Q_place`）的**像素级特征表示**。
* **从输出到位姿的桥梁：**
  1. **找最大值点 (argmax):** 从 affordance map 中找到概率最高的 2D 像素位置。
  2. **反投影 (De-projection):** 利用相机几何模型将 2D 像素坐标转换为 3D 物理世界坐标。
  3. **旋转离散化 (Rotation Discretization):** 通过对输入进行多次旋转并分别计算，来找到最佳的放置旋转角度。

这个框架将复杂的 6-DoF 位姿回归问题，简化成了一系列在 2D 图像上进行匹配和选择的、更适合卷积神经网络处理的问题，这也是其能够实现高精度和高效率的关键所在。

### 实验与结果

作者在模拟环境 (Ravens in PyBullet) 和真实机器人 (Franka Panda) 上进行了大量实验。

1. **双流架构的优越性:** 实验结果清晰地表明：
   * **Transporter-only (只有空间流):** 表现平平，因为它无法理解语言指令，只能靠猜测。
   * **CLIP-only (只有语义流):** 表现比 Transporter-only 好，因为它能理解指令，但由于缺乏精确的空间信息（特别是深度信息），在最后一步操作时精度不足，成功率有上限。
   * **CLIPORT (双流):** 显著优于前两者，在所有任务上都取得了最好的性能，证明了结合语义和空间信息的必要性和有效性。
2. **数据效率和少样本学习 (Data Efficiency & Few-shot Learning):**
   * 由于利用了 CLIP 强大的语义先验，CLIPORT 在仅有少量（如10个或100个）示教样本的情况下，就能达到非常高的性能。这对于昂贵的机器人数据采集来说是巨大的优势。
3. **对未见属性的泛化 (Generalization to Unseen Attributes):**
   * 这是最亮眼的成果之一。CLIPORT 能够泛化到在训练中未见过的物体、颜色和组合。例如，一个在训练中只见过“红/绿/蓝”三种颜色的模型，在测试时可以理解并执行涉及“粉色”或“橙色”物体的指令。这证明了它真正实现了从“死记硬背”到“举一反三”的跨越。
4. **多任务学习能力:**
   * 实验表明，训练一个能执行所有10个模拟任务的**单一多任务模型 (multi-task model)**，其性能在很多任务上甚至**超过了**为每个任务单独训练的**单一任务模型 (single-task model)**。这说明不同任务间的知识可以有效迁移，互相促进，使模型变得更加鲁棒和通用。

### 贡献与意义

CLIPORT 的贡献是多方面的：

1. **提出了一个创新的双流架构：** 首次成功地将大规模预训练视觉-语言模型 (CLIP) 与精确的机器人操作框架 (Transporter) 融合，为解决机器人领域的语义-空间鸿沟问题提供了一个优雅且高效的范式。
2. **实现了卓越的泛化能力：** 极大地提升了机器人在语言指令下的零样本/少样本泛化能力，使其能够处理新物体、新属性和新任务，这是通向通用机器人智能的关键一步。
3. **验证了多任务学习的巨大潜力：** 证明了通过在多样化的任务上训练单一模型，可以构建出更强大、更通用的机器人策略。
4. **建立了一个新的基准：** 扩展了 Ravens 模拟环境，提供了一套包含10个语言条件下的操作任务，为后续研究提供了宝贵的基准测试平台。

总而言之，CLIPORT 的意义在于，它展示了一条将互联网级别的海量知识（通过 CLIP）“注入”到机器人物理交互系统中的有效路径。它用一种端到端、数据驱动的方式，优雅地解决了长期困扰机器人领域的“符号接地”（Symbol Grounding）问题，而无需复杂的、人工设计的符号逻辑系统。这篇工作为后续许多基于大规模预训练模型的机器人研究奠定了坚实的基础。

***

## Grounding 3D Object Affordance with Language Instructions, Visual Observations and Interactions (2025)

* **输入 (Input):**
  * 一个**自然语言指令** (e.g., "打开瓶子")。
  * 一张展示人与物体交互的**2D图像** (e.g., 一只手正在拧瓶盖)。
  * 该物体的**三维点云**。
* **输出 (Output):**
  * 一个在三维点云上标记的**可供性热力图 (Affordance Heatmap)**。它指示了点云中每个点与语言指令相关的**可操作性概率**（例如，每个点“可以被抓握用来打开”的概率）。
* **解决的任务 (Task):**
  * **多模态引导的三维物体可供性定位**。该工作让AI能够像人一样，综合理解：
    1. **语言指令** (“该做什么”)
    2. **视觉交互观察** (“别人是怎么做的”)
    3. **三维几何形状** (“物体长什么样”)
  * 最终目标是在三维物体上**精确地定位**出能够执行特定指令的区域，从而为机器人等具身智能体提供更精准、更泛化的操作指导。

### 概述

这篇文章介绍了一项新颖的任务和相应的解决方案，旨在让智能体（如机器人）能够像人一样，结合**语言指令 (Language Instructions)**、**视觉观察 (Visual Observations)** 和 **交互信息 (Interactions)** 来理解和定位三维物体（3D Object）的可供性（Affordance）。可供性指的是物体“能够被如何使用”的属性，例如，杯子的“可被抓握”部分。

为了支持这项任务，作者们构建了第一个多模态、多视角的三维可供性数据集 **AGPIL**，并提出了一个名为 **LMAffordance3D** 的端到端神经网络模型。该模型的核心是利用大型视觉语言模型（VLM）来融合多源信息，从而精确地在三维点云上预测出与指令相关的可供性区域。

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/LMAffordance_overview.png)

### Motivation

这项研究的动机源于当前三维物体理解领域的几个关键挑战：

1. **从2D到3D的鸿沟**：虽然有很多研究从2D图像中识别可供性，但这些结果很难直接应用于需要精确三维空间操作的机器人任务中。机器人需要知道在三维空间中的哪个具体位置进行抓取或操作。
2. **现有3D方法的局限性**：一些直接处理3D数据（如点云）的方法，通常只依赖于几何形状来学习可供性。这导致它们在面对 **未见过（unseen）** 的物体时泛化能力差，并且容易混淆功能相似但形状不同的物体。它们也无法根据人类的动态指令来改变操作目标。
3. **认知科学的启发**：人类学习一个新物体的用法时，是一个综合性的过程。我们会听取他人的**语言描述**（“用这个把手打开门”），观察**他人如何使用**该物体（看到开门动作的图像或视频），并结合对物体**物理形态的观察**。作者希望将这种多模态的学习方式引入到AI模型中。

因此，本文的目标是创建一个更接近人类认知模式的框架，让模型能够通过融合语言、2D图像和3D点云，实现更鲁棒、更泛化的三维可供性定位。

### 主要贡献

1. **提出新任务**：首次定义了“结合语言指令、视觉观察和交互来定位三维物体可供性”这一任务，为具身智能（Embodied AI）领域中的感知与行动连接提供了新的研究方向。
2. **构建新数据集 (AGPIL)**：
   * **多模态**：每个数据样本包含 **(1) 3D点云**、**(2) 交互图像** 和 **(3) 语言指令**。
   * **多视角**：为了模拟真实世界中不完整的观测，数据集包含三种视角设置：
     * **Full-view**：完整的物体点云。
     * **Partial-view**：仅包含物体部分表面的点云（模拟遮挡或单一视角）。
     * **Rotation-view**：部分点云并带有随机旋转（模拟物体姿态变化）。
   * **多设置**：包含 **Seen**（测试集与训练集的物体类别和可供性类别一致）和 **Unseen**（类别不一致）两种设置，用于全面评估模型的泛化能力。
3. **提出新模型 (LMAffordance3D)**：
   * 这是一个端到端、基于视觉语言模型（VLM）的框架。
   * 它创新性地将2D图像特征、3D点云特征与语言指令的语义特征在VLM的语义空间中进行深度融合。
   * 实验证明，该模型在所有设置下，尤其是在**unseen**（未见过）场景中，性能显著优于现有基线方法，展示了强大的泛化能力。

### AGPIL 数据集

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/LMAffordance_dataset.png)

* **数据来源**：点云主要来自 `3D AffordanceNet` 数据集。交互图像主要来自 `AGD20K` 和 `PIAD` 数据集。
* **数据配对**：点云和图像中的物体并非来自同一场景，而是根据**物体类别**进行配对。例如，一个“杯子”的点云可以和任意一张“人手握住杯子”的图像配对。
* **语言指令生成**：使用 `GPT-4` 模型，根据交互图像生成描述性的语言指令。例如，对于一张“手用刀切柠檬”的图片，生成的指令可能是 "Hand slicing a lemon with a knife on a slate board"。
* **标注 (Annotation)**：可供性的真值（ground truth）是一个 `(2048, 1)` 的概率矩阵，其中2048是点云中的点数。每个点都有一个0到1之间的值，表示该点属于特定可供性（如“grasp”）的概率。这个概率图最终可以被渲染成3D热力图（heatmap）进行可视化。

### LMAffordance3D 模型架构

![](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/Computer_Vision/\[assets]3D_object_Affordance/LMAffordance_architecture.png)

LMAffordance3D 模型可以分解为四个核心部分：

1. **视觉编码器 (Vision Encoder)**：
   * **2D编码器**：使用 `ResNet18` 提取2D交互图像的特征 `F_2D`。这些特征包含颜色、场景、交互动作等信息。
   * **3D编码器**：使用 `PointNet++` 提取3D点云的几何特征 `F_3D`。这些特征包含物体的形状、大小和结构信息。
   * **特征融合**：将 `F_2D` 和 `F_3D` 通过一个融合模块（包含MLP和自注意力机制）合并，生成统一的多模态**空间特征 `F_s`**。
2. **视觉语言模型 (Vision-Language Model, VLM)**：
   * **核心**：采用 `LLaVA-7B` 作为模型骨干，利用其强大的先验知识和多模态理解能力。
   * **Tokenizer**：将输入的语言指令文本编码为**文本特征 `F_T`**。
   * **Adapter**：这是一个关键组件。它是一个小型网络（如MLP），负责将融合后的**空间特征 `F_s`** 投影（project）到VLM的语义空间中，生成**投影后的空间特征 `F_SP`**。这一步使得VLM能够“读懂”视觉特征。
   * **VLM输入**：将投影后的空间特征 `F_SP` 和文本特征 `F_T` 拼接在一起，作为VLM的输入。VLM在内部对这些信息进行深度融合和推理，输出一个包含丰富语义和空间上下文的隐藏状态（hidden state）。
3. **解码器 (Decoder)**：
   * **功能**：利用VLM的输出，结合原始的空间特征，最终定位出可供性区域。
   * **机制**：采用\*\*交叉注意力（Cross-Attention）\*\*机制。
     * **Query (查询)**：使用原始的空间特征 `F_s` (它代表“在哪里定位？”)。
     * **Key (键)**：使用VLM输出中的指令相关特征 (它代表“根据什么指令定位？”)。
     * **Value (值)**：使用VLM输出中的语义特征 (它代表“定位出的区域是什么含义？”)。
   * **输出**：解码器输出最终的**可供性特征 `F_A`**。
4. **分割头 (Head)**：
   * 对可供性特征 `F_A` 进行上采样，恢复到原始点云的分辨率。
   * 通过几个线性层和一个 `sigmoid` 激活函数，预测出每个点的可供性概率，得到最终的 `(2048, 1)` 输出 `O`。

### 实验与分析

* **评估指标**：使用 AUC, aIoU, SIM, MAE 四个指标来评估预测热力图与真值之间的相似度和准确性。
* **定量结果 (Quantitative Results)**：如表2所示，LMAffordance3D在所有视图（full, partial, rotation）和设置（seen, unseen）下均显著优于其他基线模型（如3D AffordanceNet, IAG, OpenAD等）。尤其是在**unseen设置**下，性能提升巨大，这证明了VLM带来的强大泛化能力，因为它能利用预训练中学习到的世界知识来理解新的物体和指令。
* **定性结果 (Qualitative Results)**：如图5所示，LMAffordance3D生成的可供性热力图比其他方法更**准确**和**清晰**。例如，在“open the door”任务中，它的预测能精确聚焦于门把手，而其他方法可能会错误地高亮门的其他区域。
* **消融研究 (Ablation Study)**：如表4所示，这项研究验证了模型设计的有效性。
  * **图像的作用**：去掉2D交互图像输入后，模型性能下降，尤其是在unseen设置下。这证明了交互图像提供的视觉上下文（如手的位置和姿态）对于准确理解可供性至关重要。
  * **语言指令的作用**：使用GPT-4生成的完整句子（"Full"）作为指令，效果优于仅使用“动作+物体”（"Action & Object"）或仅使用“动作”（"Action"）的简单指令。这说明更丰富、更自然的语言指令能为VLM提供更好的引导。
* **真实世界泛化能力**：如图6所示，模型能够成功处理在训练集中**从未见过**的动作（如“throw”和“clean”）和物体，这再次凸显了VLM的零样本（zero-shot）或少样本（few-shot）推理能力。

### 结论与未来工作

**结论**：该论文成功地提出了一个更符合人类认知模式的三维可供性定位框架。通过创新的LMAffordance3D模型和全面的AGPIL数据集，它展示了结合语言、2D视觉和3D几何信息在解决复杂三维感知任务中的巨大潜力，尤其是在泛化到新场景方面。

**未来工作**：

1. **机器人部署**：将模型进行量化和压缩，部署到真实机器人上，并结合规划与控制模块，实现实时的物体操作任务。
2. **处理柔性物体**：当前数据集中的物体都是刚体，未来可以研究如何预测柔性物体（如布料、绳子）的可供性。
