跳转至

3D视觉

概述

3D视觉旨在从2D图像或其他传感器数据中理解和重建三维世界。近年来,神经辐射场(NeRF)和3D高斯溅射(3D Gaussian Splatting)等技术引领了新视图合成的革命,而点云处理和单目深度估计则为自动驾驶、机器人和AR/VR提供了核心能力。

graph TD
    A[3D视觉] --> B[新视图合成]
    A --> C[3D表示学习]
    A --> D[深度估计]
    A --> E[3D目标检测]

    B --> B1[NeRF]
    B --> B2[3D Gaussian Splatting]
    B --> B3[Instant-NGP]

    C --> C1[PointNet/PointNet++]
    C --> C2[体素方法]
    C --> C3[Mesh方法]

    D --> D1[单目深度]
    D --> D2[立体匹配]
    D --> D3[多视图立体]

    E --> E1[室内3D检测]
    E --> E2[自动驾驶3D检测]

1. 3D表示方式

1.1 常见3D数据表示

表示方式 描述 优点 缺点
点云 无序3D点集合 \((x,y,z)\) 轻量、灵活 无拓扑信息
体素 3D网格,类似3D像素 规则结构,易于卷积 内存消耗大 \(O(n^3)\)
Mesh 顶点+面片 精确表面、渲染友好 拓扑变化困难
隐式表示 连续函数 \(f(x,y,z) \to\) 属性 任意分辨率 需要采样渲染
高斯 3D高斯椭球集合 快速渲染、可微 内存较大

1.2 坐标系与变换

相机模型的核心数学:

针孔模型

\[ s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K [R | t] \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} \]

其中 \(K\) 是内参矩阵,\([R|t]\) 是外参(旋转+平移)。

内参矩阵

\[ K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \]

2. 神经辐射场(NeRF)

2.1 核心思想

NeRF(Neural Radiance Fields, Mildenhall et al., 2020)用一个MLP隐式表示3D场景:

\[ F_\Theta: (\mathbf{x}, \mathbf{d}) \to (\mathbf{c}, \sigma) \]
  • \(\mathbf{x} = (x, y, z)\):3D空间位置
  • \(\mathbf{d} = (\theta, \phi)\):观察方向
  • \(\mathbf{c} = (r, g, b)\):颜色
  • \(\sigma\):体密度

2.2 体渲染(Volume Rendering)

沿光线 \(\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}\) 积分:

\[ C(\mathbf{r}) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf{r}(t)) \mathbf{c}(\mathbf{r}(t), \mathbf{d}) \, dt \]

其中透射率(transmittance):

\[ T(t) = \exp\left(-\int_{t_n}^{t} \sigma(\mathbf{r}(s)) \, ds\right) \]

离散近似(实际计算中使用分段采样):

\[ \hat{C}(\mathbf{r}) = \sum_{i=1}^{N} T_i (1 - \exp(-\sigma_i \delta_i)) \mathbf{c}_i \]
\[ T_i = \exp\left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right) \]

其中 \(\delta_i = t_{i+1} - t_i\) 是相邻采样点之间的距离。

2.3 位置编码(Positional Encoding)

MLP难以学习高频细节,因此使用位置编码将低维输入映射到高维空间:

\[ \gamma(p) = \left(\sin(2^0 \pi p), \cos(2^0 \pi p), \ldots, \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p)\right) \]

对位置 \(\mathbf{x}\) 使用 \(L=10\)(60维),对方向 \(\mathbf{d}\) 使用 \(L=4\)(24维)。

2.4 训练流程

  1. 从已知相机位姿的图像采样光线
  2. 沿光线进行分层采样(coarse + fine)
  3. MLP预测每个采样点的 \((\mathbf{c}, \sigma)\)
  4. 体渲染得到像素颜色
  5. 与真实像素计算MSE损失

2.5 NeRF的局限与改进

方法 改进方向 关键创新
Instant-NGP 速度 多分辨率哈希编码,训练从小时级降到秒级
Mip-NeRF 抗锯齿 锥形追踪替代射线,积分位置编码
Mip-NeRF 360 无界场景 空间压缩、正则化
TensoRF 效率 张量分解表示辐射场
Zip-NeRF 综合 结合Instant-NGP和Mip-NeRF 360
NeRF in the Wild 外观变化 处理光照和瞬态物体

3. 3D高斯溅射(3D Gaussian Splatting)

3.1 核心思想

3DGS(Kerbl et al., 2023)使用大量3D高斯椭球显式表示场景,通过可微光栅化实现实时渲染。

每个3D高斯由以下参数定义:

  • 位置 \(\boldsymbol{\mu} \in \mathbb{R}^3\):高斯中心
  • 协方差 \(\boldsymbol{\Sigma} \in \mathbb{R}^{3 \times 3}\):形状和朝向
  • 不透明度 \(\alpha \in [0,1]\)
  • 颜色:球谐函数(SH)系数

高斯函数:

\[ G(\mathbf{x}) = \exp\left(-\frac{1}{2}(\mathbf{x} - \boldsymbol{\mu})^\top \boldsymbol{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu})\right) \]

3.2 可微光栅化

将3D高斯投影到2D图像平面:

\[ \boldsymbol{\Sigma}' = J W \boldsymbol{\Sigma} W^\top J^\top \]

其中 \(W\) 是视图变换矩阵,\(J\) 是投影的雅可比矩阵。

Alpha合成(从前到后排序):

\[ C = \sum_{i \in \mathcal{N}} \mathbf{c}_i \alpha_i \prod_{j=1}^{i-1}(1 - \alpha_j) \]

3.3 自适应密度控制

训练过程中动态调整高斯数量:

  • 克隆(Clone):梯度大但尺度小的高斯 → 欠重建区域
  • 分裂(Split):梯度大且尺度大的高斯 → 过度重建区域
  • 修剪(Prune):移除近乎透明(\(\alpha\) 接近0)的高斯

3.4 NeRF vs 3DGS

特性 NeRF 3D Gaussian Splatting
表示方式 隐式(MLP) 显式(高斯椭球)
渲染方式 体渲染(光线行进) 光栅化(溅射)
训练速度 慢(小时级) 快(分钟级)
渲染速度 慢(秒级) 实时(>100 FPS)
内存 小(网络权重) 大(百万高斯)
编辑性 困难 容易(直接操作高斯)
抗锯齿 需要Mip-NeRF 天然平滑

4. 点云处理

4.1 PointNet

核心挑战:点云是无序集合,网络必须对输入排列不变。

PointNet(Qi et al., 2017)的解决方案:

\[ f(\{x_1, \ldots, x_n\}) = g(h(x_1), \ldots, h(x_n)) \]
  • \(h\):逐点MLP(共享权重)
  • \(g\):对称函数(max pooling)

架构

  1. 输入变换(T-Net):学习 \(3 \times 3\) 变换矩阵
  2. 逐点特征提取:MLP \((3 \to 64 \to 128 \to 1024)\)
  3. 全局特征:Max Pooling
  4. 分类/分割头

4.2 PointNet++

改进:PointNet缺乏局部结构信息。

层次化点集学习

  1. 采样层(Sampling):最远点采样(FPS)选择中心点
  2. 分组层(Grouping):Ball Query找邻域点
  3. 特征提取层:对每个局部区域应用PointNet
\[ \text{PointNet++} = \text{FPS} + \text{Ball Query} + \text{PointNet}(\text{local}) \]

4.3 后续发展

方法 创新点
DGCNN 动态图卷积,EdgeConv
Point Transformer 自注意力用于点云
PCT 点云Transformer
PointNeXt 重新审视训练策略的重要性

5. 单目深度估计

5.1 问题定义

从单张RGB图像预测每个像素的深度值,这是一个不适定问题(ill-posed),因为单张图像存在尺度模糊。

5.2 MiDaS

MiDaS(Ranftl et al., 2020):

  • 在多个数据集上混合训练
  • 使用尺度和位移不变损失
\[ \mathcal{L} = \frac{1}{M} \sum_{i=1}^{M} \rho\left(\hat{d}_i^* - d_i^*\right) \]

其中 \(\hat{d}^*\)\(d^*\) 分别是预测和真实深度经过归一化后的值。

5.3 Depth Anything

Depth Anything(Yang et al., 2024):

  • 基于DINOv2的强视觉编码器
  • 大规模无标注数据的自训练
  • V2版本使用合成数据实现metric depth

关键设计

  1. 用标注数据训练教师模型
  2. 教师模型为6200万无标注图像生成伪标签
  3. 学生模型在标注+伪标注数据上训练
  4. 加入强数据增强防止学生走捷径

5.4 度量深度 vs 相对深度

类型 输出 应用 代表方法
相对深度 排序关系 图像编辑、重聚焦 MiDaS, Depth Anything
度量深度 绝对米制深度 机器人、自动驾驶 ZoeDepth, Metric3D

6. 3D视觉前沿

6.1 大规模3D重建

  • DUSt3R / MASt3R:无需相机位姿的3D重建
  • LRM:大规模3D重建模型,单图生成3D
  • One-2-3-45++:单图到3D Mesh

6.2 4D场景(动态3D)

  • Dynamic 3DGS:带时间维度的高斯溅射
  • 4D Gaussian Splatting:时空高斯表示

6.3 生成式3D

  • Zero-1-to-3:零样本新视图合成
  • DreamFusion:文本到3D,Score Distillation Sampling(SDS)
\[ \nabla_\theta \mathcal{L}_{\text{SDS}} = \mathbb{E}_{t,\epsilon}\left[w(t)(\hat{\epsilon}_\phi(z_t; y, t) - \epsilon) \frac{\partial g(\theta)}{\partial \theta}\right] \]
  • Magic3D:两阶段文本到3D(coarse-to-fine)

7. 总结

任务 传统方法 深度学习方法 最新进展
新视图合成 光场、IBR NeRF 3D Gaussian Splatting
3D重建 SfM + MVS 学习式MVS DUSt3R, LRM
深度估计 立体匹配 监督学习 Depth Anything V2
点云理解 手工特征 PointNet Point Transformer V3
3D生成 - 3D GAN DreamFusion, 3DGS生成

核心趋势

  1. 从隐式表示到显式表示(NeRF → 3DGS)
  2. 从小规模到大规模基础模型(Depth Anything, DUSt3R)
  3. 2D生成模型蒸馏到3D(SDS范式)
  4. 实时化、可编辑、可交互

参考文献

  • Mildenhall et al., "NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis," ECCV 2020
  • Kerbl et al., "3D Gaussian Splatting for Real-Time Radiance Field Rendering," SIGGRAPH 2023
  • Qi et al., "PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation," CVPR 2017
  • Ranftl et al., "Towards Robust Monocular Depth Estimation," TPAMI 2020
  • Yang et al., "Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data," CVPR 2024

评论 #