第一篇:3D视觉基础与多视图几何
1.1 从2D到3D的回顾
2D任务回顾:分类(CAT,无空间范围)、语义分割(GRASS, CAT等,不区分个体)、目标检测(边界框)、实例分割(区分不同个体,如DOG1, DOG2)。
视频理解:视频是一个 4D 张量
T x 3 x H x W(或3 x T x H x W)。3D视觉的核心任务:计算对应关系(Correspondences)、多视图立体(Multi-view Stereo)、运动恢复结构(Structure from Motion, SfM)、3D目标姿态估计、SLAM(同步定位与建图)、可微图形学、3D传感器。
1.2 多视图CNN (Multi-View CNN, MVCNN)
核心思想:如果只有2D图片,如何识别3D物体?从多个角度看它!
流程:
从物体周围N个不同视角(如12个或80个视角)获取2D图像。
每个图像通过CNN1提取特征。
View Pooling(视图池化):对所有视图的特征进行逐元素最大池化(Element-wise Max-Pooling)。
💡 为什么要Max-Pooling?因为它是一个对称函数,具有置换不变性(Permutation Invariance)。视图输入的顺序不会影响结果。
池化后的特征通过CNN2生成最终形状描述符。
全连接层 + Softmax 输出分类。
实验结果:MVCNN (12 views) 在分类上达到 89.9%,检索 mAP 达到 70.1%,远超传统方法(如SPH, LFD)。
第二篇:几何预测——深度图与表面法线
2.1 深度图(Depth Map)
定义:对于每个像素,深度图给出相机到场景中该点物体的距离。
RGB图像 (3 x H x W) + 深度图 (H x W) = RGB-D 图像(2.5D)。可以直接由 Intel RealSense, Microsoft Kinect 等传感器采集。预测任务:输入 RGB 图像,使用全卷积网络(Fully Convolutional Network)预测深度图。输出
1 x H x W。💡 核心问题:尺度/深度模糊性(Scale/Depth Ambiguity)
由于透视投影,一个小且近的物体,在图像平面上看起来和一个大且远的物体完全一样。从单张图片中,绝对尺度是模糊的。
损失函数:尺度不变损失(Scale Invariant Loss)
我们不能使用简单的逐像素 L2 损失(因为尺度不明)。
公式:
展开后等价于:
。
其中
。这迫使预测的深度相对差异与真实值一致,忽略绝对尺度。
现代模型:DepthAnything 系列
利用大规模未标注图像和教师模型生成伪标签,结合LiDAR、SfM等标注数据进行训练,通过语义保持机制,实现了极强的泛化深度预测。
2.2 表面法线(Surface Normals)
定义:对于每个像素,表面法线给出一个垂直于该点表面的向量。
RGB: 3 x H x W -> 法线: 3 x H x W。损失函数:Per-Pixel Loss。计算预测向量 x 和真实向量 y 之间的余弦相似度:
(即让预测法线和真实法线方向越接近越好)。💡 课堂幽默:医生对病人说“You are normal(你法线正常/你是个正常人)”,双关语。
第三篇:显式3D表示——体素(Voxels)
3.1 体素表示
定义:用 V×V×V 的3D网格表示形状(类似3D版的掩码Mask,1代表有物体,0代表空)。
优点:概念简单,3D网格。
缺点:需要极高分辨率来捕捉细节;扩展性差(内存消耗巨大)。
3.2 3D 卷积(3D Convolution)
将2D卷积扩展到3D。输入
1 x 30 x 30 x 30,使用6x6x6的3D卷积核,一步步提取特征,最后通过全连接层分类(如3D ShapeNets)。💡 内存灾难:存储一个 1024³ 的体素网格,如果每个体素用 float32(4字节)表示,需要
1024*1024*1024*4 bytes ≈ 4GB!仅仅是存一个物体!
3.3 八叉树(Oct-Trees)
解决方案:使用异构分辨率的体素网格。
原理:在物体表面附近使用高分辨率(如 12831283),在平坦空旷区域使用低分辨率(如 32³)。像树枝一样分裂。
第四篇:显式3D表示——点云(Point Cloud)
4.1 点云基础
定义:用 3D 空间中的 PP 个点表示形状。
优点:可以表示精细结构,不需要大量点。
缺点:需要新的网络架构和损失函数;没有显式表示表面(提取网格需要后处理)。
4.2 PointNet
核心挑战:点云是一组无序集合(Set),改变点的顺序不应改变输出。
架构:
输入
P x 3的点云。对每个点独立运行共享权重的 MLP(多层感知机)。得到
P x D的特征。Max-Pooling:在 PP 个点上进行最大池化,得到全局的
D维特征向量。(再次利用最大池化实现对称函数,保证顺序不变性)。全连接层输出类别
C。
应用:3D物体分类(飞机?杯子?)、点云语义分割(给每个点分类)、物体部件分割(吉他琴弦、琴身等)。
4.3 传感器融合:DenseFusion
思路:点云 + RGB 图像结合。输入为
(x, y, z, r, g, b)。流程:
RGB 通过 CNN 提取Per-pixel feature(逐像素特征)。
点云通过 PointNet 提取Per-point feature(逐点特征)。
将点投影到图像平面,将对应的像素特征拼接到点特征上,实现逐点特征融合。用于6D物体姿态估计。
4.4 生成点云
架构:输入2D图像 -> CNN 特征。
分支1:全连接层,输出 P1×3(全局点坐标)。
分支2:2D卷积,输出 P2×3 的点(密集预测)。
拼接:(P1+H′W′P2)×3 的点云。
💡 损失函数:Chamfer Distance(倒角距离)
由于点云是无序的,L2损失不能直接比较。Chamfer距离衡量两个集合的相似度:
直观理解:对于集合1中的每个点,找集合2中离它最近的点,计算距离平方;反过来再算一遍,求和。这个函数是可微的,可以反向传播。
4.5 现代点云模型:Point Transformer 系列
将 Transformer(自注意力机制)应用于点云,处理无序点集,效果超越了 PointNet。
第五篇:显式3D表示——网格(Mesh)
5.1 网格基础
定义:由顶点(Vertices)和面(Faces,通常是三角形)组成的集合。
优点:图形学标准表示;显式表示3D形状;自适应性强(平坦区域少用面,细节区域多用面);可以在顶点上附加数据(RGB、纹理坐标、法线)。
缺点:很难用神经网络直接处理(拓扑结构不规则,连接关系复杂)。
5.2 Pixel2Mesh
任务:单张RGB图像 -> 三角形网格。
核心思想:迭代细化(Iterative Refinement)。
从椭球体(Ellipsoid Mesh)开始。
通过图卷积(Graph Convolution)逐步变形(Mesh Deformation)。
同时,从图像中提取特征(Perceptual Feature Pooling),引导变形。
图反池化(Graph Unpooling)增加顶点数(156 -> 628 -> 2466)。
损失函数:Chamfer Loss(比较预测网格的顶点与真实网格的距离)。
5.3 Mesh R-CNN
任务:2D图像 -> 检测物体(边界框、标签、实例分割)以及每个物体的3D三角网格。
架构:Mask R-CNN + Mesh Head。
💡 混合3D表示(Hybrid Representation):
Mesh Deformation 的拓扑结构由初始网格固定,限制了复杂形状。
Mesh R-CNN 先用体素预测(Voxel)生成初始网格,再进行变形(Mesh Deformation)。这结合了体素的灵活性和网格的精细度。
流程:输入图像 -> 2D识别(Mask R-CNN) -> 3D体素预测 -> 生成初始网格 -> 迭代变形 -> 输出3D网格。
5.4 现代网格生成:MeshAnything 系列
使用自回归 Transformer直接生成网格(类似于语言模型生成文本)。输入点云或图像,输出网格的顶点和面序列。
第六篇:隐式3D表示(Implicit Functions)
6.1 隐式函数基础
定义:学习一个函数,判断任意3D点是在形状内部还是外部:o:R3→{0,1}。
表面(Surface):3D物体的表面是水平集(Level Set) {x:o(x)=1/2}。
代数曲面(Algebraic Surfaces):球体x²+y²+z²=1,环面,心形。对于牛(Cow)这样复杂的形状,无法用简单多项式表示。
构造实体几何(CSG):通过布尔运算(并集 Union、交集 Intersection、差集 Difference)组合隐式几何。
6.2 DeepSDF
核心:学习有符号距离函数(Signed Distance Function, SDF)。
SDF定义:对于空间中的点,输出它到物体表面的距离。表面外为正,表面内为负。
网络:输入3D坐标 (x,y,z),输出SDF值。
优点:可以表示任意复杂的拓扑结构,分辨率无限(连续表示)。缺点是提取网格需要 marching cubes 算法。
第七篇:神经渲染——NeRF与3D高斯泼溅
7.1 NeRF (Neural Radiance Fields, 幻灯片68-75)
核心思想:将场景表示为一个连续的神经辐射场。
MLP输入:3D位置 (x,y,z) + 视角方向 (θ,ϕ)。
MLP输出:颜色 (r,g,b) + 密度 (σ)。
渲染(Volume Rendering):沿着相机射线(Ray)采样,通过体渲染公式积分计算出像素颜色。
成果:能合成极其逼真的新视角(View Synthesis)。
💡 现代变体:Nerfies(动态可变形场景)、RawNeRF(高动态范围HDR)、BlockNeRF(旧金山街区大场景)。
⚠️ 致命缺陷:
训练极慢:V100 GPU 训练单个场景需 1-2 天。
推理极慢:生成一张 256x256 图像,每像素224个采样点,需要1460万次 MLP 前向传播!
7.2 3D Gaussian Splatting (3D GS)
核心思想:不再使用隐式MLP,而是用显式的3D高斯分布(3D Gaussians)来表示场景。
渲染:沿着射线,将这些高斯分布混合(Blend)在一起。类似于“泼溅”(Splatting)。
💡 优缺点对比:
NeRF:拟合慢、渲染慢、隐式建模。
3D GS:拟合快(几分钟)、实时渲染(Real-time)、显式建模。
动态3D高斯(Dynamic 3D Gaussians):通过追踪高斯分布的运动,实现动态场景重建和追踪。
第八篇:现代前沿与高级应用案例
8.1 现代SLAM模型:VGGT 系列
任务:从多帧图像中直接预测相机参数(Camera Token)、深度图(Depth maps)、点云图。
架构:使用 DINOv2 特征 +全局注意力(Global Attention)+ 帧注意力(Frame Attention)的 Transformer。
训练损失:匹配损失(Matching Loss)+ 点损失(Point Loss)。
8.2 现代3D物体生成:TRELLIS 系列
输入文本或图像 -> 生成3D资产。
架构:结构化潜在表示学习(Structured Latent Representation Learning)。
使用 DINOv2 提取视觉特征。
使用稀疏 VAE 编码器/解码器处理体素。
使用Flow Transformer进行结构生成和潜在生成。
最终解码为 3DGS、RF 或 Meshes。
8.3 现代3D世界生成:Marble (World Labs)
通过文本或图像,直接生成完整的、可交互的 3D 世界场景(例如:一个带瀑布、木桥和植被的森林场景)。
🎁 复习要点总结
| 表示方法 | 数据结构 | 优点 | 缺点 | 代表模型 |
|---|---|---|---|---|
| 深度图 | 2.5D 像素 | 直接获取 | 仅单一视角,尺度模糊 | DepthAnything |
| 体素 | 3D 网格 | 概念简单,可3D卷积 | 内存爆炸 | 3D ShapeNets |
| 点云 | 无序点集 | 精细结构,内存友好 | 无表面,需特定架构 | PointNet, Point Transformer |
| 网格 | 顶点+面 | 图形学标准,自适应 | 难以用NN处理 | Pixel2Mesh, Mesh R-CNN |
| 隐式曲面 | 连续函数 | 无限分辨率,拓扑灵活 | 渲染需后处理 | DeepSDF |
| NeRF | 连续MLP | 照片级真实 | 极慢 | NeRF, BlockNeRF |
| 3D GS | 显式高斯 | 实时渲染,快 | 显存占用较大 | 3D Gaussian Splatting |