> ## Documentation Index
> Fetch the complete documentation index at: https://kensou.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Plana3r zero shot metric planar 3d reconstruction  dissection

[//]: # "<!-- ontology-5axis
problem: reconstruction
representation: mesh
sensor: stereo
paradigm: learned
time: feed-forward
ref: ../../cheat-sheet/ontology.md §5
\-->"

# Plana3R：零样本度量平面三维重建的前馈平面 splatting (Plana3R: Zero-shot Metric Planar 3D Reconstruction via Feed-Forward Planar Splatting)

> **发布时间**：2026-10-25（arXiv 2510.18714v3；编号 `2510` 提示 2025-10 首发，v3 为 2026-10 修订）
> **论文 / 模型名**：**Plana3R**（Planar 3D Reconstruction）
> **核心定位**：把"稀疏平面基元 + 可微平面 rasterization"做成前馈范式，用**只需深度+法向标签**的训练绕开平面标注依赖，同时**摆脱相机位姿依赖**——无位姿双目输入、单次前向、度量尺度输出，且零样本泛化到域外室内场景。
> 本体标注（5 轴）：problem=`reconstruction` / representation=`mesh`（本文实际为 sparse planar primitives，merged 后成平面面片）/ sensor=`stereo` / paradigm=`learned` / time=`feed-forward`

现有室内平面重建被两个依赖限制：前馈方法要**稠密平面标注**（数据只能卡在 ScanNetV2 / Matterport3D），优化方法要**精确位姿的多视图**（稀疏两视图直接不可用）。Plana3R 的结论是：只要监督信号退化成"深度 + 法向"，用 PlanarSplatting 的可微渲染器把平面基元渲染成全分辨率深度/法向图来算损失，就能在四百万对图上 scale 起来，并且在从未训练过的 Matterport3D 上反超专门在该数据集训练的方法。

***

## X-Ray 开场

Plana3R 解决的是"**没有位姿、没有平面标注、还要度量尺度**"的室内两视图平面重建。它做三件事：Siamese ViT 一次前向同时回归**相对位姿**和一组**稀疏 3D 平面基元**（每个 ViT patch 一个基元，分 H/16 与 H/8 两档）；训练时不自比平面标注，而是把基元用 PlanarSplatting 的 CUDA 可微 rasterizer 渲成**全分辨率深度图和法向图**，与 GT 做 L1；推理后用**法向 + 距离阈值**把基元合并成平面面片，顺带免费得到实例级平面分割。

对 spatial AI 研究者的意义：这是一条"**用可微渲染器把弱标签变成强监督**"的通用配方——平面标注难拿，但深度/法向到处都是（拿不到还能用 Metric3Dv2 造伪标签）。它把 DUSt3R/MASt3R 的稠密点云表示换成结构化稀疏基元，在结构化室内场景里同时换来紧凑性、可解释性和分割副产品。

***

## 📍 研究全景时间线

```
【单视图平面重建】        【两视图 + 平面标注】      【稠密 stereo 基础模型】    【per-scene 平面优化】      【本文】
PlaneNet/PlaneAE      →  PlaneFormers          →  DUSt3R                →  PlanarSplatting       →  Plana3R
PlaneRCNN/PlaneTR        SparsePlanes              MASt3R                   (posed multi-view,        (unposed 2-view,
PlaneRecTR               NOPE-SAC                  (dense point cloud,      可微平面 splatting)        sparse planar
(per-pixel/逐平面 mask)  (需单视图 3D 平面 GT       metric 点云)                                        primitives, metric)
                         + 两视图平面对应)
     │                        │                        │                        │                        │
   标注贵、表示稠密        数据被 2 个数据集锁死     表示冗余、无平面语义     必须 posed、必须稠密多视图   ✅ 免平面标注
     └────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘
                                    演进主轴：标注依赖 ↓ 、位姿依赖 ↓ 、表示紧凑度 ↑

本文的局限（作者自述 + 结构推导）：
  · 只支持两视图；≥3 视图需 N−1 次前向 + 公共系合并（非单次前向）
  · 强平面假设，非平面/弱纹理区靠更小基元硬凑
  · 位姿头只吃 H/16 低分辨率特征 → 严格阈值下平移精度有限（Table 4 RTA@5 = 0.3935）
```

***

## 1 · 核心架构 / 方法总览

### 1.1 系统组件对比表

| 模块 | 输入 | 输出 | 训练 / 推理差异 |
| - | - | - | - |
| Siamese ViT encoder（DUSt3R 512-DPT 权重初始化） | `I^i ∈ ℝ^{3×H×W}`，i=1,2 | `F^i ∈ ℝ^{H/16×W/16×D_enc}` | 无差异；两图共享权重 |
| Transformer decoder ×2（cross-attention） | `F^1, F^2` | `G_low^i ∈ ℝ^{H/16×W/16×D_dec}` | 无差异 |
| **Pose head**（独立回归头） | `concat(G_low^1, G_low^2)` | `P_rel = [t ∈ ℝ³, q ∈ ℝ⁴]`（metric） | 训练受 Eq.5 监督；推理直接输出 6-DoF |
| Deconvolution 上采样网 | `G_low^i` | `G_high^i ∈ ℝ^{H/8×W/8×D_dec}` | 无差异 |
| **三回归头 ×2 分辨率** | `G_low^i` / `G_high^i` | 每 patch 一组 `(d_π, r_π, q_π)`，法向 `n_π=R(q_π)[0,0,1]ᵀ` | 同为逐 patch 回归，**不做 per-pixel 预测** |
| **HPPA 选择器**（无学习参数） | 低分辨率法向 patch 的梯度幅值 + 阈值 `g_th` | 二值 mask：哪些 patch 启用高分辨率基元 | 训练时用于选 `selected` 基元做渲染；推理时用于决定输出基元集合；`g_th = 0.5` 固定 |
| **PlanarSplatting CUDA 可微 rasterizer** | 3D 平面基元集合 `{(d_π, r_π, q_π)}` + 位姿 + 内参 | 全分辨率 `D_render ∈ ℝ^{1×H×W}`、`N_render ∈ ℝ^{3×H×W}` | **训练**：loss 里要求梯度反传到基元参数（含 radii）；**推理**：只用来渲图/取深度，平面合并走另一条路 |
| Patch loss 分支（warm-up 专用） | 逐 patch 的 `D_patch`、`N_patch` | L1 损失（Eq.3） | **只在第 1 个 epoch** 生效，之后由渲染损失接管 |
| 3D Plane Merge（后处理，Sec 3.4） | 预测基元全集 | 合并后的平面面片 + 实例语义 | **仅推理**；法向/距离阈值启发式，细节在 Sec A.2 |

### 1.2 关键机制

**⚡ Eureka Moment：训练时用 PlanarSplatting 的可微平面 rasterizer 当"监督适配器"——只要 GT 深度 + 法向，梯度就能穿过全分辨率渲染图反传到每个平面基元的中心深度、半径和朝向，平面级标注被整条从训练流程里删掉。**

三个配套机制让它真的跑得起来：

1. **两档分层基元（HPPA）而非 per-pixel**：室内像素天然成片共面，per-pixel 表示是冗余的。低分辨率 H/16 网格（512×384 下 = 32×24 = **768** 个基元）覆盖平面区域；只在**低分辨率法向 patch 梯度幅值 > `g_th`** 的 patch 上才启用 H/8 高分辨率基元（最多 64×48 = **3072** 个）。判据用"法向变化大 → 需要更小更多基元"这一几何观察，**零额外学习参数**。
2. **Warm-up patch loss → 渲染 loss 的两段式训练**：初始化随机时基元常落在 GT 视锥外，直接渲染没有有效梯度。所以第 1 个 epoch 先用逐 patch 的 `(d, n)` L1（Eq.3）把位置/朝向"稳"进视野，之后再引入全分辨率渲染损失（Eq.4）——只有渲染损失才能监督到 **radii** 并提升几何保真度。
3. **度量尺度全程不归一化**：Eq.3/4/5 全部直接吃 metric depth 和 metric pose，杜绝了归一化带来的尺度歧义——这是它能"零样本 metric"的前提，也解释了为什么只用室内数据（human-scale 物体尺寸分布跨场景相近）。

### 1.3 信息流

```
 I¹,I² (3×H×W) + K¹,K²
        │
        ├──► Siamese ViT ──► F¹,F² (H/16×W/16)
        │                        │
        │                        ├──► Decoder×2 (cross-attn) ──► G_low¹, G_low²
        │                        │            │
        │                        │            ├──► Pose Head ──► P_rel=[t,q]  (metric, 6-DoF)
        │                        │            │
        │                        │            ├──► 3 heads ──► 低分辨率基元 (d_π,r_π,q_π)     768 @512×384
        │                        │            │
        │                        │            └──► Deconv ──► G_high¹,G_high² (H/8×W/8)
        │                        │                              └──► 3 heads ──► 高分辨率基元   3072 @512×384
        │                        │
        │                        └──► HPPA 选择：‖∇N_low_patch‖ > g_th ?
        │                                   ├─ 否 → 用低分辨率基元
        │                                   └─ 是 → 用高分辨率基元
        ▼
 ┌───────────────────────────┐        ┌──────────────────────────────┐
 │ 训练：CUDA 可微 rasterizer │        │ 推理：rasterizer（渲深度/法向）│
 │  → D_render,N_render @H×W │        │  → 3D Plane Merge（法向+距离） │
 │  → Eq.4 反传到 (d,r,q)     │        │  → 平面面片 + 实例分割         │
 └───────────────────────────┘        └──────────────────────────────┘
```

***

## 2 · 数学核心

📌 **Napkin Formula**

```
L = ‖D_render − D_gt‖₁ + ‖N_render − N_gt‖₁ + ‖1 − N_renderᵀ N_gt‖₁
    其中 (D_render, N_render) = Splat_ CUDA( { (d_π, r_π, R(q_π)[0,0,1]ᵀ) } ),  基元由 ViT+Deconv 逐 patch 回归
```

一句话：**渲染图与 GT 图之间的 L1（法向再加一项 1−cos 项），把梯度送回每个平面基元。**

### 2.1 目标与输出定义

$\mathcal{F}:\big\{(I^{i},\mathbf{K}^{i})\big\}_{i=1,2}\Rightarrow\big\{(d_{\pi}^{i},\ \mathbf{r}_{\pi}^{i},\ \mathbf{q}_{\pi}^{i,j})\big\}_{i=1,2;\ j=1}^{N_{i}},\ P_{\text{rel}} \tag{1}$

| 符号 | 含义 | 说明 |
| - | - | - |
| `d_π ∈ ℝ⁺` | 基元中心的深度 | 沿参考系 j 的相机 Z 轴 |
| `r_π = (r_π^x, r_π^y) ∈ ℝ⁺²` | 平面基元半径 | 决定 splat 覆盖的椭圆尺寸，**只有渲染损失能监督到它** |
| `q_π ∈ ℝ⁴` | 基元朝向四元数 | 经 `R(q_π)` 转旋转矩阵 |
| `P_rel = [t, q]` | 6-DoF 相对位姿 | 训练时固定 `j = 1`，`I¹` 为参考系，其 GT 位姿设为单位阵 |
| `N_i` | 该视图的基元数 | H/16×W/16 ≤ N ≤ H/8×W/8 |

法向定义：

$\mathbf{n}_{\pi}=\mathbf{R}(\mathbf{q}_{\pi})[0,0,1]^{T} \tag{2}$

沿 PlanarSplatting 约定，X/Y 轴取相同正方向，法向因此由四元数唯一确定（不引入符号二义）。

### 2.2 三个损失

**Patch loss（warm-up，Eq.3）**——只监督位置与朝向，逐 patch 分辨率（H/16 或 H/8）：

$\mathcal{L}^{\text{patch}}_{\ast}=\alpha_{1}\big\|1-(\mathbf{N}^{\text{patch}}_{\ast})^{\top}\mathbf{N}^{\text{r.gt}}_{\ast}\big\|_{1}+\alpha_{1}\big\|\mathbf{N}^{\text{patch}}_{\ast}-\mathbf{N}^{\text{r.gt}}_{\ast}\big\|_{1}+\alpha_{2}\big\|\mathbf{D}^{\text{patch}}_{\ast}-\mathbf{D}^{\text{r.gt}}_{\ast}\big\|_{1},\quad \ast\in\{\text{low},\text{high}\}$

**渲染损失（Eq.4）**——全分辨率 `H×W`，监督范围含 radii：

$\mathcal{L}^{\text{render}}_{\ast}=\beta_{1}\big\|1-(\mathbf{N}^{\text{render}}_{\ast})^{\top}\mathbf{N}^{\text{gt}}\big\|_{1}+\beta_{1}\big\|\mathbf{N}^{\text{render}}_{\ast}-\mathbf{N}^{\text{gt}}\big\|_{1}+\beta_{2}\big\|\mathbf{D}^{\text{render}}_{\ast}-\mathbf{D}^{\text{gt}}\big\|_{1},\quad \ast\in\{\text{low},\text{high},\text{selected}\}$

**位姿损失（Eq.5）**——平移 L1 + 四元数（归一化后）L1 + 平移方向余弦：

$\mathcal{L}^{\text{pose}}=\gamma_{1}\|\mathbf{t}^{\text{gt}}-\mathbf{t}\|_{1}+\gamma_{2}\Big\|\mathbf{q}^{\text{gt}}-\tfrac{\mathbf{q}}{\|\mathbf{q}\|}\Big\|_{1}+\gamma_{3}\Big(1-\tfrac{\mathbf{t}\cdot\mathbf{t}^{\text{gt}}}{\|\mathbf{t}\|\|\mathbf{t}^{\text{gt}}\|}\Big)$

**直觉**：法向用"1 − 内积"是为了在近平行时仍给出稳定梯度（纯 L1 在 n≈n\_gt 时梯度退化）；深度用纯 L1 保住 metric 绝对误差；`selected` 这一支是 HPPA 的产物——只对"被选中"的基元集合算渲染损失，直接对齐推理时的稀疏预算。

### 2.3 HPPA 的选择判据（无学习参数）

对每个低分辨率 patch 计法向梯度幅值，超阈值才启用高分辨率基元：

```
use_high(p) = 1  ⟺  ‖∇ N_low_patch(p)‖  >  g_th        (g_th = 0.5，训练与推理一致)
```

合并时用二值 mask **只取各分辨率的有效 patch**，而不是把两档基元全部堆上去——这是"紧凑"这一卖点的实现落点。

***

## 3 · 带数字走一遍（玩具设定，数字为演示）

**设定**：输入 `512×384`，`fx = fy = 500`，`cx = 256, cy = 192`。

**① 基元数量**

* 低分辨率网格：`512/16 × 384/16 = 32 × 24 = 768`
* 高分辨率网格：`512/8 × 384/8 = 64 × 48 = 3072`
* 与论文一致：基元数在 **\[768, 3072]** 区间，由 `g_th` 调节。
* 论文 Table 5 实测 `g_th = 0.5` 时每视图均值 **1417** → 反推约 `1417 − 768 = 649` 个高分辨率 patch 被激活，占 3072 的约 21%；而 `g_th = 0` 时是 3072（全开）。**约 46% 的基元数换到 Chamfer 0.10→0.11 的微小退化**——这就是"稀疏够用"的量化证据。

**② 单个基元在世界里有多大**
取某低分辨率 patch 的中心像素 `(u,v) = (100, 80)`，预测中心深度 `d_π = 2.5 m`，朝向使 `n_π = (0,0,1)ᵀ`（正对相机）：

```
K⁻¹[u,v,1]ᵀ = ((100−256)/500, (80−192)/500, 1) = (−0.312, −0.224, 1)
c_π = 2.5 × (−0.312, −0.224, 1) = (−0.78, −0.56, 2.50)  m
```

该 patch 覆盖 16×16 像素；在 2.5 m 处，半个 patch（8 px）对应

```
Δ = 8 / fx × d = 8/500 × 2.5 = 0.04 m
```

即 **一个低分辨率基元的半径量级约 4 cm**。若该 patch 被判为高梯度（法向在此剧烈变化，例如桌沿），换成 H/8 的 8×8 像素基元，半径量级降到 **2 cm**，用更小的面片去贴折线。

**③ 渲染损失怎么产生梯度**
低分辨率基元渲染出的深度图在 patch 边界处会出现台阶：真实面是斜面时，单基元只能给一个常数深度平面，边界像素误差量级可由法向偏差估算——若真实面与该基元法向差 10°，在半径 0.04 m 处几何偏差约 `0.04 × sin(10°) ≈ 0.007 m`。这个量级明显小于 Table 5 里 Chamfer 中位 0.11 m 这类整体误差，提示**瓶颈不在单个基元内部拟合，而在基元边界、遮挡与跨视图一致性**——这也正是高分辨率基元只在"法向梯度大"的边界处被启用的原因。

**④ 多视图怎么退化**
8 视图输入 → 构造 `N−1 = 7` 个图像对 → **7 次独立前向** → 7 组基元 + 7 个相对位姿 → 在公共坐标系里合并。误差沿这对链累积：论文 Table 4 的 `RTA@5 = 0.3935`（`RRA@15 = 1.0000`）就是这个累积的直接读数——大角度旋转几乎全对，严格 5° 阈值下的平移准确率明显受限。

***

## 4 · 工程视角

| 项目 | 数值 / 状态 |
| - | - |
| 训练算力 | **256 GPU-days on NVIDIA H20 GPUs** |
| 每卡 batch size | **6** |
| 训练轮数 | **1 epoch warm-up（仅 Eq.3 + Eq.5）+ 10 epochs（三个损失全开）** |
| 训练分辨率 | **512 × 384** |
| 优化器 / 学习率 | AdamW，**1×10⁻⁴ → 1×10⁻⁶** |
| 初始化 | ViT encoder + transformer decoder 部分用 **DUSt3R 的 512-DPT 预训练权重** |
| 训练数据规模 | **约四百万 image pairs**（ScanNetV2 / ScanNet++ / ARKitScenes / Habitat） |
| 推理前向次数 | 两视图 **1 次前向**；N 视图 **N−1 次前向**（论文明确说明不支持 ≥3 视图单次前向） |
| 每视图基元数 | **768 – 3072**（`g_th=0.5` 时均值 **1417**；`g_th=10` 时 **768**） |
| 推理延迟 / FPS | **论文未报告**（正文含 `A.3 Runtime Analysis` 小节标题，但截断版全文未给出任何延迟/FPS 数字） |
| 显存 / VRAM | **论文未报告** |
| 加速器依赖 | PlanarSplatting 的 **CUDA-based differentiable renderer**：训练与推理都要跑自定义 CUDA 算子 |

**Trade-off 解读**

1. **表示紧凑度的数量级**：`512×384 = 196,608` 像素。MASt3R 式稠密点云是 per-pixel 量级；Plana3R 在 `g_th=0.5` 下每视图 1417 个基元，约为像素数的 **0.7%**（推算）。这是它敢说"compact"的全部底气，也是"渲染是 O(基元数) 而非 O(像素数)"的来源——但**方框内没有延迟数字，这个推断未经实测**（`UNVERIFIED`）。
2. **两段式训练是必要的工程妥协**：没有 warm-up，随机初始化的基元会落在 GT 视锥外，rasterizer 拿不到有效覆盖 → 渲染损失梯度为零。这就是为什么必须先用 patch loss（不依赖渲染可见性）把基元"拉进画面"。**任何想换 rasterizer 或改初始化的人，都必须保留这个 warm-up 阶段。**
3. **`g_th` 是唯一的精度-预算旋钮**：它作用在 **H/16 网格的法向梯度幅值**上，因此与输入分辨率强耦合。换分辨率（如 640×480）后，梯度幅值的分布会变，`g_th = 0.5` 不再是等价的预算点——**部署换分辨率必须重标 `g_th`**。
4. **CUDA 算子 = 部署硬约束**：可微 rasterizer 是自定义 CUDA 实现，意味着不能简单走 ONNX / TensorRT 端到端导出；边缘设备的部署路径要么保留 CUDA 编译链并锁 GPU 架构，要么在推理阶段用"只渲深度/法向、不回传梯度"的轻量实现（论文未提供该路径，`UNVERIFIED`）。
5. **多视图不是"扩展"，是"重复调用"**：`N` 视图 = `N−1` 次前向 + 位姿链式拼接，成本线性增长且误差累积（见 Table 4）。做长序列 SLAM 式建图时，Plana3R 应被当作**两视图几何先验**用，而不是建图后端。

***

## 5 · 数据与评测

### 5.1 训练数据组成（逐字）

| 数据集 | 用途 | 备注 |
| - | - | - |
| **ScanNetV2** | 训练 | 真实室内扫描 |
| **ScanNet++** | 训练 | 真实室内扫描 |
| **ARKitScenes** | 训练 | 真实室内扫描 |
| **Habitat** | 训练 | 合成室内 |

* 合计构造 **approximately four million image pairs**。
* **法向标签**：**pseudo GT normal maps are generated using Metric3Dv2**；**深度标签**：**GT depth maps are directly taken from the datasets**。
* 关键前提：**训练标签不做归一化**，depth 与 pose 全部保持 metric。
* 数据增强细节在 Sec A.2（截断版未展开）。

### 5.2 评测设置（条件先讲清）

| 任务 | 数据集 | 规模 / 划分 | 指标 |
| - | - | - | - |
| 两视图度量重建 | **ScanNetV2** | 遵循 NOPE-SAC 的训练/测试划分，**4051 image pairs from 303 scenes** | Chamfer Distance ↓、F-score ↑ |
| 两视图度量重建 | **Matterport3D** | **6083 image pairs from 13 challenging scenes**（**未训练过**，纯零样本） | Chamfer ↓、F-score ↑ |
| 相对位姿 | ScanNetV2 / Matterport3D | 同上同一批 pair | Translation (m) ↓、Rotation (°) ↓ |
| 单目度量深度 | **NYUv2** | `[23,15]` 的划分，**654 test frames**；**输入两张相同图像**，从其中一个视图渲深度 | Rel ↓、log₁₀ ↓、RMSE ↓、δ₁/δ₂/δ₃ ↑ |
| 单视图 3D 平面分割 | **Replica** | 按 PlaneRCNN 方式用 RANSAC 在 GT mesh 上拟合平面并拆分子实例，**498 images** | RI ↑、VOI ↓、SC ↑、Plane Recall @0.1m/@0.6m/@5°/@30° |
| 多视图 | **ScanNetV2** | **50 个 8 视图样本，每 20 帧采一帧**；pairwise 方式与 MASt3R 对比 | RRA\@5/10/15、RTA\@5/10/15 |
| 补充 | **7Scenes** | 见 Sec A.1（截断版未给数字） | — |

### 5.3 关键结果（数字逐字抄录）

**Table 1 · ScanNetV2（两视图重建 + 位姿）**

| Method | Trans Med | Trans Mean | ≤1 | ≤0.5 | ≤0.1 | Rot Med | Rot Mean | ≤30 | ≤15 | ≤5 | Chamfer ↓ | F-score ↑ |
| - | - | - | - | - | - | - | - | - | - | - | - | - |
| SparsePlanes | 0.56 | 0.81 | 73.7 | 44.6 | – | 15.46 | 33.38 | 70.5 | 48.7 | – | – | – |
| PlaneFormers | 0.55 | 0.81 | 75.3 | 45.5 | – | 14.34 | 32.08 | 73.2 | 52.1 | – | – | – |
| NOPE-SAC | 0.41 | 0.65 | 82 | 59.1 | 5.01 | 8.27 | 22.12 | 82.6 | 73.2 | 25.03 | 0.26 | 61.86 |
| MASt3R | 0.11 | 0.19 | 97.65 | 93.98 | 47.37 | 2.17 | 6.67 | 95.04 | 94.08 | 84.37 | 0.21 | 74.92 |
| **ours** | **0.07** | **0.13** | **98.62** | **97.16** | **67.91** | **2.01** | **3.16** | **99.23** | **98.89** | **93.14** | **0.11** | **92.52** |

**Table 1 · Matterport3D（零样本）**

| Method | Trans Med | Trans Mean | ≤1 | ≤0.5 | ≤0.1 | Rot Med | Rot Mean | ≤30 | ≤15 | ≤5 | Chamfer ↓ | F-score ↑ |
| - | - | - | - | - | - | - | - | - | - | - | - | - |
| SparsePlanes | 0.62 | 1.10 | 67.32 | 40.67 | 3.67 | 7.27 | 22.11 | 84.15 | 73.60 | 36.94 | 0.47 | 48.59 |
| NOPE-SAC | 0.53 | 0.91 | 73.60 | 47.82 | 4.14 | 2.79 | 13.81 | 89.71 | 87.41 | 69.83 | 0.38 | 54.96 |
| MASt3R | 0.41 | 0.59 | 85.20 | 58.87 | 8.55 | **0.98** | 4.66 | 96.58 | 96.09 | 92.59 | 0.49 | 30.01 |
| **ours** | **0.24** | **0.45** | **92.78** | **78.83** | **15.07** | 2.00 | **4.49** | **98.01** | **97.19** | 89.82 | **0.32** | **56.63** |

⚠️ **诚实读表**：Matterport3D 上 **Rotation 中位数**（2.00 vs MASt3R 0.98）与 **≤5° 比例**（89.82 vs 92.59）两项本文**不如 MASt3R**；均值与 ≤30/≤15 则更优——说明 Plana3R 的旋转误差分布更"厚尾但有界"，MASt3R 在中位数上更锐利。论文正文只讲了均值方向的结论。

**Table 2 · NYUv2 单目度量深度（零样本）**

| Method | Rel ↓ | log₁₀ ↓ | RMSE ↓ | δ₁ ↑ | δ₂ ↑ | δ₃ ↑ |
| - | - | - | - | - | - | - |
| PlaneNet | 0.239 | 0.124 | 0.913 | 53.0 | 78.3 | 90.4 |
| PlaneAE | 0.205 | 0.097 | 0.820 | 61.3 | 87.2 | 95.8 |
| PlaneRCNN | 0.183 | 0.076 | 0.619 | 71.8 | 93.1 | 98.3 |
| PlaneTR | 0.195 | 0.095 | 0.803 | 63.3 | 88.2 | 96.1 |
| PlaneRecTR | 0.157 | 0.073 | 0.547 | 74.2 | 94.2 | 99.0 |
| MASt3R | 0.152 | **0.058** | 0.51 | 83.0 | 95.6 | **98.7** |
| **ours** | **0.132** | 0.059 | **0.463** | **86.4** | **96.3** | 98.4 |

⚠️ 同样逐格比对：**log₁₀（0.059 vs 0.058）与 δ₃（98.4 vs 98.7）两格 MASt3R 略优**。论文正文的表述是"surpassing ... MASt3R"，需注意这是**在 Rel / RMSE / δ₁ / δ₂ 上的超越**。

**Table 3 · Replica 单视图平面分割 + 重建（498 images）**

| Method | RI ↑ | VOI ↓ | SC ↑ | Plane Recall(depth) @0.1m | @0.6m | Plane Recall(normal) @5° | @30° |
| - | - | - | - | - | - | - | - |
| PlaneRecTR | 0.85 | 1.81 | 0.58 | 1.78 | 13.46 | 3.79 | 18.92 |
| **ours** | **0.89** | **1.62** | **0.63** | **7.79** | **30.74** | **28.52** | **36.31** |

注意 PlaneRecTR 是**用平面标注训练的**，Plana3R **没有任何平面标注**，平面召回（尤其法向 @5°：28.52 vs 3.79）差距显著。

**Table 4 · 8 视图 pairwise（50 个 ScanNetV2 样本）**

| Method | RRA\@5 | RTA\@5 | RRA\@10 | RTA\@10 | RRA\@15 | RTA\@15 |
| - | - | - | - | - | - | - |
| **Ours** | 0.9000 | **0.3935** | **0.9985** | **0.7442** | 1.0000 | **0.8614** |
| MASt3R | **0.9828** | 0.2657 | 0.9964 | 0.5371 | 1.0000 | 0.6878 |

**Table 5 · `g_th` 消融（精度 vs 基元数）**

| 配置 | ScanNetV2 Chamfer ↓ | ScanNetV2 F ↑ | ScanNetV2 平均基元数 | NYUv2 RMSE ↓ | NYUv2 δ₁ ↑ | NYUv2 平均基元数 |
| - | - | - | - | - | - | - |
| Ours (0) | 0.10 | 93.10 | 3072 | 0.45 | 86.8 | 3072 |
| Ours (0.5) | 0.11 | 92.52 | 1417 | 0.46 | 86.4 | 1565 |
| Ours (10) | 0.11 | 92.32 | 768 | 0.49 | 85.3 | 768 |

结论：**约一半基元（1417 vs 3072）性能基本持平；只留低分辨率（768）才明显掉点**。这是"稀疏平面基元足够"的核心实证。

***

## 6 · 能力与失败模式

### 6.1 能做（论文有直接证据）

| 能力 | 证据 |
| - | - |
| 无位姿双目 → 度量尺度 3D 平面重建，**单次前向** | Table 1，ScanNetV2 Chamfer 0.11 / F-score 92.52 |
| **零样本跨域**到未训练数据集 | Matterport3D 全项领先 SparsePlanes/NOPE-SAC；NYUv2 深度优于所有对比项（除 log₁₀） |
| 相对位姿（metric，米制） | ScanNetV2 Translation Mean 0.13 m、Rot Mean 3.16° |
| **副产品**：单目度量深度（输入两张相同图） | Table 2 |
| **副产品**：实例级平面分割（无需平面标注） | Table 3，RI 0.89 / VOI 1.62 / SC 0.63 |
| 单视图平面重建（作为 side output） | Fig.1 说明 + Table 3 |
| 多视图 | 仅 pairwise（N−1 次前向） |

### 6.2 不能做 / 会失败（每条都对应文中的具体机制）

1. **不支持 ≥3 视图单次前向**。原文明确：`does not support a single forward pass for inputs with three or more views`，只能 `N−1` 次前向 + 公共系合并。→ 长序列会累积位姿误差，`RTA@5 = 0.3935` 就是这个累积的影子。
2. **强平面假设**。原文承认非平面/纹理丰富区域"需要更小的基元来拟合"，并称`such cases are relatively rare`——但室内真实场景里植物、窗帘、软装、堆叠杂物并不罕见，此时只能靠 H/8 小基元硬凑，且**每个 patch 仍只出一个基元**，一个 8×8 patch 内若有多个平面（桌角、台阶）必然欠拟合。
3. **位姿头分辨率受限**。位姿从 `concat(G_low¹, G_low²)`（H/16）回归，低分辨率特征对严格阈值下的小平移不敏感 → 8 视图 `RRA@5 = 0.9000` 落后 MASt3R 的 `0.9828`；Matterport3D 旋转中位数也落后（2.00 vs 0.98）。
4. **平面分割依赖后处理阈值而非学习**。Sec 3.4 的合并靠"法向误差 + 距离误差"双阈值（细节在 A.2），跨域场景（Matterport3D）的阈值适配没有学习机制，实例边界会碎。
5. **法向监督本身仍可能是模型产物**。对只有深度图的数据集，法向由 **Metric3Dv2** 生成伪标签 → 训练目标里嵌入 Metric3Dv2 的法向偏差，在镜面、低纹理、薄结构处会被放大。
6. **度量尺度完全绑定训练数据的 metric 标注**。论文的论据是"human-scale 物体尺寸分布跨场景相近"；超出这个分布（超大空间、微距、室外）时 scale 先验失效，且**没有任何 test-time 尺度校正机制**。
7. **需要已知内参**。输入定义就是 `{(I^i, K^i)}`，没有内参估计分支。

### 隐含假设 (Hidden Assumptions)

| # | 隐含假设 | 一旦不成立会怎样 |
| - | - | - |
| A1 | 场景可被**少量平面基元**近似 | 曲面/软装/植被密集场景，H/8 网格仍不足，几何退化为"贴片马赛克" |
| A2 | **一个 ViT patch ≈ 一个平面** | patch 内多平面（桌角、门框、台阶）只能用一个基元，边界处系统性偏差 |
| A3 | GT 深度 + 伪 GT 法向**足够替代平面标注** | 伪法向来自 Metric3Dv2，其偏差成为不可消除的下界 |
| A4 | 训练与测试的**度量标注一致可信** | 不同数据集深度传感器的尺度/畸变差异直接进网络；跨域 metric 精度无保证 |
| A5 | 相机内参**已知且准确** | 内参误差直接进基元中心反投影 `c_π = d·K⁻¹[u,v,1]ᵀ` |
| A6 | 场景**静态**且无运动模糊 | rasterizer 假设静态几何；动态物体/运动模糊处基元拟合到"平均位置" |
| A7 | `g_th = 0.5` 在**新分辨率/新域**仍是最优预算点 | 阈值作用在归一化前/后的法向梯度上，分辨率变化会整体平移基元预算 |
| A8 | 平面合并阈值跨数据集通用 | 域外场景法向噪声更大，固定阈值导致过合并（大片平面粘一起）或欠合并（碎裂） |

***

## 7 · 与相关工作对比

| 方法 | 平面标注需求 | 位姿需求 | 场景表示 | metric 尺度 | 平面实例语义 | 单次前向 |
| - | - | - | - | - | - | - |
| PlaneNet / PlaneAE / PlaneRCNN / PlaneTR / PlaneRecTR | **需要**（平面 GT） | 单视图 | 逐平面/per-pixel mask | 否 | 是 | 是 |
| PlaneFormers / SparsePlanes / NOPE-SAC | **需要**（单视图 3D 平面 GT + 两视图对应） | 两视图（自估） | 平面 | 否（未强调 metric） | 是 | 是 |
| DUSt3R / **MASt3R** | 不需要 | **不需要** | **稠密点云** | MASt3R 为 metric | ✗（无可解释平面） | 是（两视图） |
| **PlanarSplatting** | 不需要（可微渲优化） | **需要 posed 多视图** | 平面基元 | 视输入 | 是（合并后） | ✗（per-scene 优化） |
| **Plana3R** | **不需要**（仅深度+法向） | **不需要** | **稀疏 3D 平面基元** | **是（metric，全程不归一化）** | **是（合并 + 实例）** | 是（两视图） |

**核心差异一句话**：相对 DUSt3R/MASt3R 是**换表示**（稠密点 → 稀疏平面，换来紧凑性 + 平面语义）；相对 PlanarSplatting 是**换范式**（per-scene 优化 → 前馈推理，换来免位姿 + 免优化）；相对 NOPE-SAC/PlaneFormers 是**换监督**（平面标注 → 深度+法向，换来可 scale 到四百万 pair）。

### 🎯 面试 Tip

被问 **"Plana3R 和 MASt3R 到底差在哪，为什么平面表示更好？"** ——不要只说"更紧凑"，按这个三段答：

> "两者**共用同一套 ViT + 两视图回归骨架**，甚至 decoder 都是用 DUSt3R 的 512-DPT 权重初始化的，**位姿头的思路也一样**。真正的分歧在**输出表示和监督方式**：MASt3R 输出 per-pixel 稠密点云，Plana3R 输出逐 patch 的 `(d_π, r_π, q_π)` 平面基元，并且用 PlanarSplatting 的 CUDA 可微 rasterizer 把基元渲成全分辨率深度/法向图做 L1——这让它**不需要任何平面标注**，只要深度和法向，所以能吃到 ScanNetV2 / ScanNet++ / ARKitScenes / Habitat 共四百万对。收益是：`512×384` 下每视图只要 1417 个基元（`g_th=0.5`），并且因为显式平面结构，**白送实例级平面分割**（Replica 上 RI 0.89）。代价也很清楚：**强平面假设**，非平面区域只能靠 H/8 小基元硬凑；**多视图只支持 pairwise 的 N−1 次前向**；以及 8 视图 `RRA@5 = 0.9000` 反而低于 MASt3R 的 `0.9828`，说明位姿头只吃 H/16 低分辨率特征在严格阈值下吃亏。"

追问 "为什么不用 3DGS？" → 平面基元是 **structured / semantic** 的：能被合并成平面、能计算法向与距离误差、能直接输出语义实例；3DGS 的椭球没有这些显式结构，且 per-pixel 数量级与本方法的"紧凑"目标相反。

***

## 8 · GitHub-validated pitfalls (atlas 联动, 2026-10-27)

**核验状态**：全文（含正文与可见附录标题）**只出现项目主页 `https://lck666666.github.io/plana3r/`，未出现任何 `github.com` 代码仓链接**。按核验规则，**视作无 repo 信号**——无法验证 issue 流、commit 或版本。以下 pitfall **全部由 §6 的失败模式 + §2/§3 的具体方法约束推导**，**未经 issue 验证**。

| # | Pitfall | 由哪条失败模式 + 哪个方法约束推导 | 触发条件 / 现象 |
| - | - | - | - |
| P1 | **自定义 CUDA 可微 rasterizer 导致导出/移植受阻** | §6.2-7 需要已知内参 + §1.1「PlanarSplatting CUDA-based differentiable renderer」是训练与推理**共用**组件 | 想走 ONNX / TensorRT / 端侧 NPU 时，`PlanarSplatting` 的 splatting 算子无对应实现；必须保留 nvcc 编译链并固定 GPU 架构，否则连"只渲深度图"的推理路径都跑不起来 |
| P2 | **换输入分辨率后 `g_th` 失效，基元预算漂移** | 隐含假设 A7 + §2.3 判据 `‖∇N_low_patch‖ > g_th` 定义在 **H/16 网格**上 | 训练/推理固定在 `512×384`；换到 640×480 时 patch 网格变为 40×30，法向梯度幅值随采样密度改变，`g_th = 0.5` 不再是等价的 1417 基元预算点，需重标；Table 5 显示 `g_th=10`（768 基元）已使 NYUv2 RMSE 由 0.46 退到 0.49 |
| P3 | **多视图拼接的链式漂移** | §6.2-1「不支持 ≥3 视图单次前向」+ §4「N 视图 = N−1 次前向 + 公共系合并」 | 8 视图时论文自报 `RRA@5 = 0.9000`、`RTA@5 = 0.3935`；序列越长，pairwise 位姿误差在合并坐标系里累积，表现为回环处平面错位/重影。做 SLAM 后端时不能把它当全局优化器 |
| P4 | **平面合并阈值（法向/距离）需按域重调** | §6.2-4「合并靠后处理阈值而非学习」+ 隐含假设 A8；细节在 Sec A.2，正文未给具体数值 | 域外场景（如 Matterport3D）法向噪声更大，固定阈值会过合并（墙+地板粘成一片）或欠合并（一面墙碎成多片），直接拉低 VOI/SC；且该阈值不在训练中被优化，无法从数据中学 |
| P5 | **每 patch 单基元导致的高频区系统性欠拟合** | 隐含假设 A2 + §1.1「不做 per-pixel 预测，逐 patch 一个 `(d_π, r_π, q_π)`」 | 桌角、台阶、门框等一个 8×8 patch 内含多个平面的位置，几何误差集中出现；且 warm-up 用 patch loss 固定了位置，后续渲染损失只能调整 radii 与细节，难纠正拓扑错误 |

**给复现者的最小 checklist**：① 先确认 CUDA 工具链能编译 PlanarSplatting 算子；② 严格用 `512×384` 或重标 `g_th`；③ 保留 1-epoch warm-up（否则渲染损失梯度为零）；④ 平面合并阈值按目标域单独特调；⑤ 多视图任务只当两视图先验用，别指望长序列一致性。

***

[← Back to 3D Reconstruction README](./README.md)

> **Status**：v0.1 · 基于 arXiv 2510.18714v3 全文（截断版，附录 A.1–A.6 正文内容未提供）· 未在真机复现的数字标 `UNVERIFIED`（§4 中"基元数占像素数 0.7%"、"1417−768=649 个高分辨率 patch"为基于 Table 5 的推算；§3 全部数值为玩具设定）

[//]: # "<!-- source: https://arxiv.org/abs/2510.18714 -->"


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.