CS231n(拾伍)——3D视觉
本讲主题:3D 视觉。核心内容是 3D 形状的五种表示(深度图、体素、点云、网格、隐式表面)及对应的深度学习方法: - Depth Map:单目深度/法线预测 - Voxel Grid:3D 卷积、八叉树 - Point Cloud:PointNet、Chamfer 距离 - Mesh:Pixel2Mesh、Mesh R-CNN - Implicit Surface:DeepSDF、NeRF、3D Gaussian Splatting
$\large\star$ 回顾:2D 视觉与视频
2D 任务谱系(Lecture 9 内容):
| 任务 | 输出 | 空间范围 | 物体概念 |
|---|---|---|---|
| 分类 | 单个标签 CAT |
❌ | ❌ |
| 语义分割 | 逐像素标签 | ✅ | ❌ |
| 目标检测 | 边界框+类别 | ✅ | ✅ |
| 实例分割 | 实例级掩膜 | ✅ | ✅ |
视频 = 2D + 时间:视频是一序列图像,4D 张量 T × 3 × H × W(或 3 × T × H × W)。
3D 视觉的丰富主题:
1 | 3D 表示 · 对应点计算 · 多视图立体视觉 · 运动恢复结构(SfM) |
$\large\star$ 一、多视图 CNN(Multi-View CNN)
Su et al., ICCV 2015:从多张 2D 视图做 3D 形状分类
1 | View 1 → CNN1 → ┐ |
- CNN1:提取图像特征的 ConvNet(每视图共享权重)
- View pooling:跨所有视图做逐元素最大池化
- CNN2:产生形状描述符的第二个 ConvNet
ModelNet40 实验结果(分类 Accuracy / 检索 mAP):
| 方法 | 分类 | 检索 |
|---|---|---|
| SPH(非深度) | 68.2% | 33.3% |
| LFD(非深度) | 75.5% | 40.9% |
| 3D ShapeNets | 77.3% | 49.2% |
| FV, 12 views | 84.8% | 43.9% |
| CNN, 12 views | 88.6% | 62.8% |
| MVCNN, 12 views | 89.9% | 70.1% |
| MVCNN+metric, 12 views | 89.5% | 80.2% |
$\large\star$ 二、3D 形状的五种表示
1 | ┌──────────────┬──────────────┬────────────────┬──────────────┬─────────────────┐ |
$\large\star$ 三、深度图(Depth Map)
3.1 定义
- RGB 图像:3 × H × W;深度图:H × W
- 每个像素给出:相机到该像素对应世界点的距离
- RGB 图像 + 深度图像 = RGB-D 图像(2.5D)
- 可由某些 3D 传感器直接记录(如 Intel RealSense、Microsoft Kinect)
3.2 预测深度:全卷积网络
1 | RGB 输入 3×H×W → 全卷积网络 → 预测深度 1×H×W |
Eigen, Puhrsch & Fergus, NeurIPS 2014;Eigen & Fergus, ICCV 2015
3.3 ⚠️ 尺度/深度歧义(Scale Ambiguity)
小近物体和大远物体在图像上看起来完全一样!
单个图像中绝对尺度/深度是歧义的 → 使用尺度不变损失(scale invariant loss)。
3.4 现代深度预测:DepthAnything 系列
Yang et al., CVPR 2024:“Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data” 核心:利用大规模无标签数据提升单目深度估计。
3.5 表面法线(Surface Normals)
- 法线:3 × H × W,每个像素给出垂直于该点表面的向量
- 预测法线:全卷积网络 + 逐像素损失(余弦相似度) $$\text{loss} = \frac{x \cdot y}{|x|\,|y|} = \cos\theta \quad \text{(Recall: } x \cdot y = |x||y|\cos\theta\text{)}$$
$\large\star$ 四、体素网格(Voxel Grid)
4.1 定义与特点
用 V × V × V 的占用网格表示形状(类似 Mask R-CNN 的分割掩膜,但是 3D 的!)
| 优点 | 缺点 |
|---|---|
| ✅ 概念简单:就是一个 3D 网格! | ❌ 需要高空间分辨率才能捕捉精细结构 |
| ❌ 扩展到高分辨率非常困难 |
4.2 3D 卷积处理体素输入
Wu et al., “3D ShapeNets”, CVPR 2015;Choy et al., “3D-R2N2”, ECCV 2016
1 | 输入 1×30×30×30 → 6×6×6 conv → 48×13×13×13 → 5×5×5 conv → 160×5×5×5 → 4×4×4 conv → 512×2×2×2 → FC → 类别分数 |
与 2D 卷积完全类似,只是把卷积核换成 3D(如 6 × 6 × 6)。
4.3 ⚠️ 体素的内存问题
存储 V × V × V 个 float32:10243 体素网格需要 4GB 内存!
4.4 扩展方案:八叉树(Oct-Trees)
Tatarchenko et al., “Octree Generating Networks”, ICCV 2017
使用异构分辨率的体素网格(精细区域更密、平坦区域更稀)!
$\large\star$ 五、点云(Point Cloud)
5.1 定义与特点
用 3D 空间中的 P 个点表示形状。
| 优点 | 缺点 |
|---|---|
| ✅ 无需海量点即可表示精细结构 | ⚠️ 需要新架构、新损失函数 |
| ❌ 不显式表示表面:渲染/应用需后处理提取网格 |
5.2 处理点云:PointNet
Qi et al., “PointNet”, CVPR 2017;“PointNet++”, NeurIPS 2017
核心需求:点云是集合——顺序无关!
1 | 输入点云 P×3 → 每个点跑 MLP → 逐点特征 P×D → Max-Pool → 池化向量 D → FC → 类别分数 C |
💡 Max-Pool 是关键:跨所有点取最大值 → 天然与点的顺序/数量无关!
PointNet 应用: - 3D
物体分类:PointNet → airplane? -
点云语义分割:逐点分类 - 物体部件分割(Part
Segmentation)
5.3 传感器融合:点云 + RGB(DenseFusion)
Wang et al., “DenseFusion: 6D Object Pose Estimation by Iterative Dense Fusion”, CVPR 2019
1 | 点云 (x,y,z) ──PointNet──> 逐点特征 ─┐ |
5.4 生成点云:PSGN
Fan et al., “A Point Set Generation Network for 3D Object Reconstruction from a Single Image”, CVPR 2017
1 | 输入图像 3×H×W → 2D CNN → 图像特征 C×H'×W' |
5.5 损失函数:Chamfer 距离
问题:需要(可微的)方式把点云当集合来比较!
Chamfer 距离 = 每个点到另一集合中最近邻的 L2 距离之和(双向):
dCD(S1, S2) = ∑x ∈ S1miny ∈ S2∥x − y∥22 + ∑y ∈ S2minx ∈ S1∥x − y∥22
💡 双向求和保证 S1 中每个点都在 S2 附近,反之亦然——即使点云没有对应关系也能度量!
5.6 现代点云模型:Point Transformer 系列
Zhao et al., “Point Transformer”, ICCV 2021:把 Transformer 引入点集处理。
$\large\star$ 六、三角网格(Triangle Mesh)
6.1 定义与特点
用一组三角形表示 3D 形状: - 顶点(Vertices):3D 空间中的 V 个点 - 面(Faces):顶点上的三角形集合
| 优点 | 缺点 |
|---|---|
| ✅ 图形学标准表示 | ❌ 用神经网络处理不平凡 |
| ✅ 显式表示 3D 形状 | |
| ✅ 自适应:平面用很少面,细节处分配更多面 | |
| ✅ 可在顶点附加数据并插值到整个表面:RGB、纹理坐标、法线等 |
6.2 预测网格:Pixel2Mesh
Wang et al., “Pixel2Mesh: Generating 3D Mesh Models from Single RGB Images”, ECCV 2018
输入单张 RGB 图像 → 输出物体的三角网格
关键思想: - 迭代细化(Iterative Refinement) - 图卷积(Graph Convolution) - 顶点对齐特征(Vertex Aligned Features) - Chamfer 损失(同点云)
6.3 预测网格:Mesh R-CNN
Gkioxari, Malik & Johnson, “Mesh R-CNN”, ICCV 2019
类比:Mask R-CNN 做 2D 图像 → 2D 形状;Mesh R-CNN 做 2D 图像 → 三角网格!
任务:输入单张 RGB 图像,输出: - 一组检测到的物体,每个物体包含: - 边界框 - 类别标签 - 实例分割 - 3D 三角网格
混合 3D 形状表示: - 纯网格变形效果好,但拓扑(顶点、面、亏格、连通分量)被初始网格固定 - ✅ 解决方案:先用体素预测创建初始网格,再变形细化!
1 | 输入图像 → 2D 物体识别 → 3D 物体体素 → 3D 物体网格 |
6.4 现代网格预测:Mesh Anything 系列
Chen et al., “MeshAnything: Artist-created mesh generation with autoregressive transformers”, ICLR 2025
$\large\star$ 七、隐式表面(Implicit Functions)
7.1 核心思想
学习一个函数把任意 3D 点分类为形状内部/外部:
- 3D 物体的表面是水平集:$\{x : o(x) = \frac{1}{2}\}$
1 | 隐式函数(判定内外)⇄ 显式形状(表面) |
7.2 构造实体几何(CSG,Implicit)
Slide credit: Ren Ng (CS184/284A)
通过布尔运算组合隐式几何:并(Union)、交(Intersection)、差(Difference)。
7.3 DeepSDF
Park et al., “DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation”, CVPR 2019
学习连续有符号距离函数(SDF):每个 3D 点输出到表面的带符号距离(符号表示内外)。
7.4 NeRF(神经辐射场)
Mildenhall et al., “Representing Scenes as Neural Radiance Fields for View Synthesis”, ECCV 2020
新视角合成(Novel View Synthesis):
$$(x, y, z, \theta, \phi) \xrightarrow{\text{MLP}} (r, g, b, \sigma)$$
| 输入 | 输出 |
|---|---|
| 场景位置 (x, y, z) + 观察方向 (θ, ϕ) | 颜色 (r, g, b) + 密度 σ |
一个 MLP 编码整个 3D 场景!沿光线采样点、查询 MLP、体渲染得到图像。
NeRF 家族: - Nerfies (ICCV 2021):动态/可变形场景 - RawNeRF (CVPR 2022):高动态范围(HDR)图像 - Block-NeRF (CVPR 2022):大规模场景(旧金山街区)
⚠️ 主要问题:非常慢! - 训练:单个场景在 V100 上要 1–2 天! - 推理:256 × 256 像素 × 每像素 224 个采样点 = 1460 万次 MLP 前向!
7.5 3D 高斯泼溅(3D Gaussian Splatting)
Kerbl & Kopanas et al., 2023
| NeRF | 3D Gaussian Splatting | |
|---|---|---|
| 渲染方式 | 沿光线查询连续 MLP | 沿光线混合离散高斯集合 |
| 场景拟合 | 慢(最好 GPU 也要几小时) | 快(几分钟) |
| 渲染 | 慢(中等分辨率约 10 秒/帧) | 实时 |
| 建模 | 隐式 | 显式 |
💡 动态 3D 高斯(Luiten et al., 3DV 2024):跟踪 + 动态视角合成。
$\large\star$ 八、现代 3D 应用
| 方向 | 代表模型 |
|---|---|
| 现代 SLAM | VGGT 系列(Wang et al., 2026) |
| 3D 物体生成 | TRELLIS 系列(Xiang et al., 2025):原生紧凑结构化 3D 潜变量 |
| 3D 世界生成 | Marble(World Labs, 2025) |
$\large\star$ 九、总结
| 表示 | 核心 | 代表方法 | 优点/缺点 |
|---|---|---|---|
| 深度图 | 逐像素距离(2.5D) | Eigen 2014/2015、DepthAnything | 传感器可直接获取;单目有尺度歧义 |
| 体素 | 3D 占用网格 | 3D ShapeNets、3D-R2N2、Octree | 概念简单;内存爆炸(10243=4GB) |
| 点云 | 点的集合 | PointNet/++、DenseFusion、Point Transformer | 精细结构高效;需新架构(集合处理)+ Chamfer 损失 |
| 网格 | 顶点+三角形 | Pixel2Mesh、Mesh R-CNN、MeshAnything | 图形学标准、自适应;神经网络处理难 |
| 隐式表面 | 内外判定函数 | DeepSDF、NeRF、3DGS | NeRF 连续高质量但慢;3DGS 显式快速实时 |
核心损失/技巧: - 深度:尺度不变损失 - 点云/网格:Chamfer 距离(集合间双向最近邻 L2) - 点云处理:逐点 MLP + Max-Pool(顺序无关) - 多视图:跨视图最大池化聚合
