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 坐标系与变换
相机模型的核心数学:
针孔模型:
其中 \(K\) 是内参矩阵,\([R|t]\) 是外参(旋转+平移)。
内参矩阵:
2. 神经辐射场(NeRF)
2.1 核心思想
NeRF(Neural Radiance Fields, Mildenhall et al., 2020)用一个MLP隐式表示3D场景:
- \(\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}\) 积分:
其中透射率(transmittance):
离散近似(实际计算中使用分段采样):
其中 \(\delta_i = t_{i+1} - t_i\) 是相邻采样点之间的距离。
2.3 位置编码(Positional Encoding)
MLP难以学习高频细节,因此使用位置编码将低维输入映射到高维空间:
对位置 \(\mathbf{x}\) 使用 \(L=10\)(60维),对方向 \(\mathbf{d}\) 使用 \(L=4\)(24维)。
2.4 训练流程
- 从已知相机位姿的图像采样光线
- 沿光线进行分层采样(coarse + fine)
- MLP预测每个采样点的 \((\mathbf{c}, \sigma)\)
- 体渲染得到像素颜色
- 与真实像素计算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)系数
高斯函数:
3.2 可微光栅化
将3D高斯投影到2D图像平面:
其中 \(W\) 是视图变换矩阵,\(J\) 是投影的雅可比矩阵。
Alpha合成(从前到后排序):
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)的解决方案:
- \(h\):逐点MLP(共享权重)
- \(g\):对称函数(max pooling)
架构:
- 输入变换(T-Net):学习 \(3 \times 3\) 变换矩阵
- 逐点特征提取:MLP \((3 \to 64 \to 128 \to 1024)\)
- 全局特征:Max Pooling
- 分类/分割头
4.2 PointNet++
改进:PointNet缺乏局部结构信息。
层次化点集学习:
- 采样层(Sampling):最远点采样(FPS)选择中心点
- 分组层(Grouping):Ball Query找邻域点
- 特征提取层:对每个局部区域应用PointNet
4.3 后续发展
| 方法 | 创新点 |
|---|---|
| DGCNN | 动态图卷积,EdgeConv |
| Point Transformer | 自注意力用于点云 |
| PCT | 点云Transformer |
| PointNeXt | 重新审视训练策略的重要性 |
5. 单目深度估计
5.1 问题定义
从单张RGB图像预测每个像素的深度值,这是一个不适定问题(ill-posed),因为单张图像存在尺度模糊。
5.2 MiDaS
MiDaS(Ranftl et al., 2020):
- 在多个数据集上混合训练
- 使用尺度和位移不变损失:
其中 \(\hat{d}^*\) 和 \(d^*\) 分别是预测和真实深度经过归一化后的值。
5.3 Depth Anything
Depth Anything(Yang et al., 2024):
- 基于DINOv2的强视觉编码器
- 大规模无标注数据的自训练
- V2版本使用合成数据实现metric depth
关键设计:
- 用标注数据训练教师模型
- 教师模型为6200万无标注图像生成伪标签
- 学生模型在标注+伪标注数据上训练
- 加入强数据增强防止学生走捷径
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)
- 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生成 |
核心趋势:
- 从隐式表示到显式表示(NeRF → 3DGS)
- 从小规模到大规模基础模型(Depth Anything, DUSt3R)
- 2D生成模型蒸馏到3D(SDS范式)
- 实时化、可编辑、可交互
参考文献
- 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