765 lines
27 KiB
Markdown
765 lines
27 KiB
Markdown
---
|
||
title: 03-NeRF与3D生成
|
||
draft: false
|
||
tags:
|
||
- NeRF
|
||
- 3D生成
|
||
- 多模态
|
||
- 生成模型
|
||
---
|
||
|
||
# NeRF 与 3D 生成
|
||
|
||
> **面向读者**:深度学习与生成式模型科研人员
|
||
> **更新日期**:2026-05-14
|
||
> **预备知识**:神经渲染、体积渲染、扩散模型基础
|
||
|
||
---
|
||
|
||
## 1. NeRF(Neural Radiance Field)基础
|
||
|
||
### 1.1 神经渲染场的基本思想
|
||
|
||
NeRF 是一种神经渲染方法,它将场景表示为**连续的颜色场**与**密度场**的隐式函数。给定三维空间位置 $\mathbf{x} \in \mathbb{R}^3$ 和观察方向 $\mathbf{d} \in \mathbb{R}^2$(通常表示为球坐标 $(\theta, \phi)$ 或单位向量),NeRF 用一个神经网络 $F_\theta$ 来建模辐射场:
|
||
|
||
$$
|
||
F_\theta: (\mathbf{x}, \mathbf{d}) \to (\mathbf{c}, \sigma)
|
||
$$
|
||
|
||
其中:
|
||
- $\mathbf{c} = (c_r, c_g, c_b) \in \mathbb{R}^3$ 是辐射颜色(RGB)
|
||
- $\sigma \in \mathbb{R}$ 是体积密度(也称为不透明度)
|
||
|
||
**核心假设**:场景被建模为连续的光场,密度 $\sigma(\mathbf{x})$ 描述了在位置 $\mathbf{x}$ 处存在微小粒子的概率,颜色 $\mathbf{c}(\mathbf{x}, \mathbf{d})$ 描述了从方向 $\mathbf{d}$ 观察时该位置发出的光颜色。
|
||
|
||
**网络架构**:原始 NeRF 使用 MLP 网络,通常结构如下:
|
||
1. 输入位置 $\mathbf{x}$ 通过多层全连接层(8层,256通道)输出 $\sigma$ 和中间特征
|
||
2. 中间特征与观察方向 $\mathbf{d}$ 拼接后,通过额外的全连接层输出颜色 $\mathbf{c}$
|
||
|
||
### 1.2 体积渲染方程(Volume Rendering Equation)
|
||
|
||
在离散化场景下,给定相机光线 $\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}$,其中 $\mathbf{o}$ 是相机原点,$\mathbf{d}$ 是光线方向,NeRF 的体积渲染方程为:
|
||
|
||
$$
|
||
C(\mathbf{r}) = \int_{t_n}^{t_f} T(t) \cdot \sigma(\mathbf{r}(t)) \cdot \mathbf{c}(\mathbf{r}(t), \mathbf{d}) \, dt
|
||
$$
|
||
|
||
其中 $t_n$ 和 $t_f$ 分别是近平面和远平面距离。
|
||
|
||
**透射比(Transmittance)** $T(t)$ 表示光线从 $t_n$ 到 $t$ 路段上**没有**被任何粒子拦截的概率:
|
||
|
||
$$
|
||
T(t) = \exp\left(-\int_{t_n}^{t} \sigma(\mathbf{r}(s)) \, ds\right)
|
||
$$
|
||
|
||
**物理直觉**:
|
||
- 当密度 $\sigma$ 较高时,$T(t)$ 快速衰减,表示光束被遮挡
|
||
- 当密度 $\sigma = 0$ 时,$T(t) = 1$,表示光线自由通过
|
||
|
||
**离散近似**:实际实现中,将光线在 $[t_n, t_f]$ 区间划分为 $N$ 个均匀网格:
|
||
|
||
$$
|
||
\hat{C}(\mathbf{r}) = \sum_{i=1}^{N} T_i \cdot (1 - \exp(-\sigma_i \delta_i)) \cdot \mathbf{c}_i
|
||
$$
|
||
|
||
其中 $\delta_i = t_{i+1} - t_i$ 是区间长度,$T_i = \exp\left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right)$ 是累积透射比。
|
||
|
||
**更简洁的形式**:令 $\alpha_i = 1 - \exp(-\sigma_i \delta_i)$,则:
|
||
|
||
$$
|
||
\hat{C}(\mathbf{r}) = \sum_{i=1}^{N} \left( \prod_{j=1}^{i-1} (1 - \alpha_j) \right) \cdot \alpha_i \cdot \mathbf{c}_i
|
||
$$
|
||
|
||
这与 alpha blending 的形式完全一致,其中 $\alpha_i$ 可视为第 $i$ 个粒子的不透明度。
|
||
|
||
### 1.3 位置编码(Positional Encoding)与多分辨率
|
||
|
||
**问题**:MLP 直接输入 $(\mathbf{x}, \mathbf{d})$ 难以表达高频变化(如纹理、边缘)。低频偏差是神经网络在高维空间中学习的固有困难。
|
||
|
||
**解决方案**:将输入映射到高频空间:
|
||
|
||
$$
|
||
\gamma(\mathbf{p}) = (\sin(2^0 \pi \mathbf{p}), \cos(2^0 \pi \mathbf{p}), \sin(2^1 \pi \mathbf{p}), \cos(2^1 \pi \mathbf{p}), \ldots, \sin(2^{L-1} \pi \mathbf{p}), \cos(2^{L-1} \pi \mathbf{p}))
|
||
$$
|
||
|
||
对于位置 $\mathbf{x} \in \mathbb{R}^3$ 和方向 $\mathbf{d} \in \mathbb{R}^2$:
|
||
- $\mathbf{x}$ 编码为 $3 \times 2L$ 维向量(原始论文 $L=10$)
|
||
- $\mathbf{d}$ 编码为 $2 \times 2L$ 维向量(原始论文 $L=4$)
|
||
|
||
**直觉理解**:位置编码等价于在傅里叶基下展开,能够用低维神经网络表示高频函数。这与核方法中的随机傅里叶特征(Random Fourier Features)有深刻联系。
|
||
|
||
**多分辨率策略**:Fourielocs 等工作探索了自适应选择编码频率的方法,对近处物体使用高频编码,对远处物体使用低频编码。
|
||
|
||
---
|
||
|
||
## 2. NeRF 的训练与优化
|
||
|
||
### 2.1 像素级重建损失
|
||
|
||
NeRF 的监督信号来自多视角图像重建。给定多条相机光线 $\{\mathbf{r}_i\}$ 和对应像素颜色 $\{C_{gt}(\mathbf{r}_i)\}$,优化目标是**均方误差损失**:
|
||
|
||
$$
|
||
\mathcal{L}(\theta) = \sum_{i} \left\| \hat{C}(\mathbf{r}_i; \theta) - C_{gt}(\mathbf{r}_i) \right\|_2^2
|
||
$$
|
||
|
||
其中 $\hat{C}(\mathbf{r}_i; \theta)$ 是沿光线采样的体积渲染颜色。
|
||
|
||
**训练流程**:
|
||
1. 对每个像素,从相机原点发射光线 $\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}$
|
||
2. 在光线沿线采样 $N$ 个点,查询 NeRF 网络
|
||
3. 体积渲染得到预测颜色 $\hat{C}(\mathbf{r})$
|
||
4. 计算重建损失并反向传播
|
||
|
||
**稀疏视角问题**:NeRF 通常需要数十到数百张视角的图像进行训练。稀疏视角重建(Few-shot NeRF)是一个重要研究方向。
|
||
|
||
### 2.2 层级采样(Hierarchical Sampling)
|
||
|
||
**问题**:均匀采样效率低下——大部分空间密度接近零(空旷区域),仅在物体表面附近有高密度区域。
|
||
|
||
**解决方案**:采用两阶段层级采样策略。
|
||
|
||
**第一阶段(粗网络)**:沿光线均匀采样 $N_c$ 个点,计算粗略的不透明度分布:
|
||
|
||
$$
|
||
\hat{C}_c(\mathbf{r}) = \sum_{i=1}^{N_c} w_i \cdot \mathbf{c}_i, \quad w_i = T_i \cdot (1 - \exp(-\sigma_i \delta_i))
|
||
$$
|
||
|
||
其中权重 $w_i$ 表征第 $i$ 个采样点对最终颜色的贡献程度。
|
||
|
||
**第二阶段(细网络)**:根据 $w_i$ 的分布进行**重要性采样**,在权重大的区域(物体表面)附近采样更多点:
|
||
|
||
$$
|
||
N_f \text{ 个新样本} \sim p(t) \propto w(t), \quad t \in [t_n, t_f]
|
||
$$
|
||
|
||
具体实现:对权重归一化得到概率分布,在该分布上进行采样。
|
||
|
||
**数值稳定性**:实践中通常对权重进行最大值归一化,防止极端值主导:
|
||
|
||
$$
|
||
\bar{w}_i = \frac{w_i}{\sum_j w_j + \epsilon}
|
||
$$
|
||
|
||
### 2.3 训练效率问题与改进
|
||
|
||
#### 2.3.1 Instant NGP(Instant Neural Graphics Primitives)
|
||
|
||
**核心创新**:用 **Multi-Resolution Hash Encoding** 替代 MLP 直接处理坐标,大幅加速训练。
|
||
|
||
**哈希编码**:将输入坐标 $\mathbf{x}$ 映射到多分辨率网格,通过哈希表存储可学习的特征:
|
||
|
||
$$
|
||
\gamma(\mathbf{x}) = \text{lerp}\left( \mathbf{V}_{\lfloor \mathbf{x} \rfloor}^{\text{level } l}, \mathbf{V}_{\lceil \mathbf{x} \rceil}^{\text{level } l} \right), \quad l = 1, \ldots, L
|
||
$$
|
||
|
||
其中 $\mathbf{V}$ 是多层哈希表,$\text{lerp}$ 是线性插值。
|
||
|
||
**关键优势**:
|
||
- 网格分辨率随维度指数增长:$O(L \cdot 2^L)$ 参数量 vs $O(1)$ 内存访问
|
||
- 绕过 MLP 的高频学习困难——网格插值天然提供高频建模能力
|
||
- 端到端可微,梯度可通过哈希表反向传播
|
||
|
||
**性能提升**:从数小时缩短到秒级(百万倍加速)。
|
||
|
||
#### 2.3.2 Mip-NeRF(Mipmap NeRF)
|
||
|
||
**问题**:NeRF 在抗锯齿和远距离场景中表现不佳,原因是像素对应的光锥被建模为无限细的光线。
|
||
|
||
**解决方案**:引入**锥体渲染(Cone Rendering)**,每个像素对应一个视锥而非光线:
|
||
|
||
- 像素 $(u, v)$ 对应相机原点 $\mathbf{o}$ 和主方向 $\mathbf{d}$,加上垂直于 $\mathbf{d}$ 的扩展向量
|
||
- 采样点在椎体内呈高斯分布,用**集成位置编码(Integrated Positional Encoding)**描述
|
||
|
||
**IPE(Integrated Positional Encoding)**:
|
||
|
||
$$
|
||
\gamma_{IPE}(\mathbf{x}, \Sigma) = \int_{\mathcal{N}(\mathbf{x}, \Sigma)} \gamma(\mathbf{p}) \, d\mathbf{p}
|
||
$$
|
||
|
||
对于高斯分布 $\mathcal{N}(\mathbf{x}, \Sigma)$,IPE 可解析计算为:
|
||
|
||
$$
|
||
\gamma_{IPE}(\mathbf{x}, \Sigma)_k = \exp\left(-\frac{1}{2} \mathbf{k}^T \Sigma \mathbf{k}\right) \cdot \sin/\cos\left(\mathbf{k}^T \mathbf{x}\right)
|
||
$$
|
||
|
||
其中 $\mathbf{k} = 2^\kappa \pi \mathbf{d}$ 是频率向量。
|
||
|
||
---
|
||
|
||
## 3. 3D 生成模型
|
||
|
||
### 3.1 DreamFusion:NeRF + 扩散模型
|
||
|
||
**核心思想**:利用预训练 2D 扩散模型作为监督信号,优化随机初始化的 NeRF,实现文本到 3D 的生成。
|
||
|
||
**框架**:
|
||
1. 随机初始化 NeRF 参数 $\theta$
|
||
2. 从随机视角渲染 NeRF 得到图像 $g(\theta) = \text{Render}(\theta, \pi)$
|
||
3. 用扩散模型 $\epsilon_\phi$ 评估渲染图像的质量
|
||
4. 通过 **SDS Loss** 反向传播优化 $\theta$
|
||
|
||
**SDS(Score Distillation Sampling)损失**:
|
||
|
||
$$
|
||
\nabla_\theta \mathcal{L}_{\mathrm{KL}}(\theta) = \mathbb{E}_{t, \epsilon}\left[ w(t) \cdot (\epsilon - \epsilon_\phi(\alpha_t \cdot g(\theta) + \sigma_t \epsilon, t)) \cdot \nabla_\theta g(\theta) \right]
|
||
$$
|
||
|
||
其中:
|
||
- $t \sim \mathcal{U}(0, 1)$ 是噪声时间步
|
||
- $\epsilon \sim \mathcal{N}(0, I)$ 是随机噪声
|
||
- $\alpha_t, \sigma_t$ 是 DDPM 的调度参数($\alpha_t = \sqrt{1 - \sigma_t^2}$)
|
||
- $w(t)$ 是权重函数(通常设为 $1$ 或 $\sigma_t$)
|
||
- $\epsilon_\phi(\cdot, t)$ 是预训练扩散模型预测的噪声
|
||
|
||
**物理直觉**:
|
||
- $\epsilon_\phi(\mathbf{x}_t, t)$ 预测 $\mathbf{x}_t$ 中的噪声
|
||
- $\epsilon - \epsilon_\phi$ 是朗之万梯度的方向,指向扩散模型认为"更可能"的样本
|
||
- 通过 chain rule $\nabla_\theta g(\theta)$ 将该梯度传递到 3D 生成器
|
||
|
||
**DreamFusion 流程**:
|
||
|
||
```
|
||
Algorithm: DreamFusion
|
||
Input: 文本提示 y, 预训练扩散模型 ε_φ, NeRF 参数 θ
|
||
Output: 生成 3D 场景
|
||
|
||
1. θ ← 随机初始化
|
||
2. for iteration = 1 to N do
|
||
3. π ← 随机相机视角 (位置 + 方向)
|
||
4. g(θ) ← Render(NeRF(θ), π) // 渲染图像
|
||
5. t ∼ U(0,1), ε ∼ N(0,I)
|
||
6. x_t ← α_t · g(θ) + σ_t · ε
|
||
7. ε_φ ← ε_φ(x_t, t, y) // 文本条件
|
||
8. ∇_θ ← w(t) · (ε - ε_φ) · ∂g(θ)/∂θ
|
||
9. θ ← θ - η · ∇_θ // 梯度下降
|
||
10. end for
|
||
11. return θ
|
||
```
|
||
|
||
**DreamFusion 的问题**:
|
||
- Janus 问题:模型对同一物体生成多个正面
|
||
- 过度饱和、纹理模糊
|
||
- 每样本需要数十分钟优化
|
||
|
||
### 3.2 Zero-1-to-3:Novel View Synthesis
|
||
|
||
**核心思想**:训练一个条件扩散模型,直接预测新视角图像,而非优化 NeRF。
|
||
|
||
**方法**:
|
||
1. 收集大量 3D 物体数据集(如 Objaverse)
|
||
2. 每个物体渲染多个视角的图像
|
||
3. 训练条件扩散模型 $\epsilon_\phi(\mathbf{x}_{t'}, t' | \mathbf{x}_0, \Delta \pi)$
|
||
|
||
其中 $\mathbf{x}_0$ 是源视角图像,$\Delta \pi$ 是相机位姿变化(相对位置和旋转)。
|
||
|
||
**条件输入**:将源视角图像和相机参数编码后与噪声拼接,输入 U-Net。
|
||
|
||
**应用场景**:
|
||
- 给定单张图像,生成同一物体的新视角
|
||
- 通过新视角一致性实现 3D 重建(如 SparseFusion)
|
||
|
||
**与 DreamFusion 对比**:
|
||
- Zero-1-to-3 是前馈模型,无需迭代优化
|
||
- 但需要大量 3D 数据进行训练
|
||
- 泛化能力受限于训练数据分布
|
||
|
||
### 3.3 Magic3D:高分辨率 3D 生成
|
||
|
||
**核心创新**:两阶段生成框架,结合高分辨率扩散模型。
|
||
|
||
**Stage 1(粗阶段)**:
|
||
- 使用低分辨率扩散模型(64×64)生成 NeRF
|
||
- 类似 DreamFusion,通过 SDS 优化
|
||
|
||
**Stage 2(细阶段)**:
|
||
- 将 NeRF 转换为 **DMTet**(Differentiable Mesh Tetrahedron)表示
|
||
- 使用高分辨率扩散模型(512×512)进行纹理优化
|
||
|
||
**DMTet**:
|
||
- 将 3D 空间划分为四面体网格
|
||
- 通过可学习的顶点位置和符号距离场(SDF)表示 mesh
|
||
- 完全可微,支持端到端训练
|
||
|
||
**优势**:
|
||
- 保留 DreamFusion 的通用性(无需 3D 训练数据)
|
||
- 生成高分辨率纹理(vs DreamFusion 的模糊输出)
|
||
- 显著加速(分钟级 vs 小时级)
|
||
|
||
---
|
||
|
||
## 4. 3D 表示方法对比
|
||
|
||
### 4.1 Voxel(体素)
|
||
|
||
**密集体素**:将 3D 空间划分为均匀网格,每个格子存储占用概率或特征向量。
|
||
|
||
**表示容量**:$N^3$ 网格有 $N^3$ 个参数。对于高分辨率(如 $512^3$),内存开销巨大。
|
||
|
||
**稀疏体素(Sparse Voxel)**:
|
||
- 仅在物体表面附近存储体素
|
||
- Octree 结构:非空节点递归细分
|
||
- 代表工作:Octree-SCNN、VoxelNet
|
||
|
||
**存储复杂度**:
|
||
| 分辨率 | 密集体素 | 八叉树(稀疏) |
|
||
|--------|----------|----------------|
|
||
| $64^3$ | 262K | ~10K |
|
||
| $256^3$ | 16.7M | ~50K |
|
||
| $512^3$ | 134M | ~200K |
|
||
|
||
**与 NeRF 对比**:体素是离散表示,分辨率受限于内存;NeRF 是连续表示,可任意分辨率渲染。
|
||
|
||
### 4.2 Point Cloud(点云)
|
||
|
||
**表示**:3D 点集合 $\{p_i = (x_i, y_i, z_i)\}_{i=1}^N$,每个点可有额外特征(颜色、法向量等)。
|
||
|
||
**处理方法**:PointNet 系列
|
||
- PointNet:共享 MLP 处理每个点,然后全局池化
|
||
- PointNet++:层次化聚合,捕获局部结构
|
||
|
||
**优势**:
|
||
- 直接处理原始传感器数据(LiDAR、RGB-D)
|
||
- 内存效率高(可变点数)
|
||
|
||
**劣势**:
|
||
- 无拓扑结构(点间无连接)
|
||
- 难以表示光滑表面
|
||
- 不适合 GPU 加速的光栅化渲染
|
||
|
||
**3D 生成应用**:Point-E、Cloud Diffusion
|
||
|
||
### 4.3 Mesh(神经网格)
|
||
|
||
**三角网格**:由顶点坐标和面索引构成,是计算机图形学的标准表示。
|
||
|
||
**神经网格(Neural Mesh)**:
|
||
- MeshCNN:用图卷积处理 mesh 面片
|
||
- NKSR(Neural Kernel Surface Reconstruction):将 NeRF 监督转化为 mesh
|
||
|
||
**Differentiable Mesh Rendering**:
|
||
- Soft rasterization:可微渲染器,将 mesh 投影为图像
|
||
- 梯度可从 2D 图像反向传播到 mesh 顶点
|
||
|
||
**DMTet(Differentiable Tetrahedral Mesh)**:
|
||
- 扩展的 tetrahedron 而非三角形
|
||
- 每个顶点的 SDF 值可学习
|
||
- 表面通过 marching tetrahedra 算法提取
|
||
|
||
### 4.4 Triplane(三平面表示)
|
||
|
||
**核心思想**:用三个正交的 2D 特征平面表示 3D 场景。
|
||
|
||
**表示**:给定 3D 点 $\mathbf{x} = (x, y, z)$,查询三平面特征:
|
||
|
||
$$
|
||
\mathbf{f}(\mathbf{x}) = F_{xy}(x, y) + F_{xz}(x, z) + F_{yz}(y, z)
|
||
$$
|
||
|
||
其中 $F_{xy}, F_{xz}, F_{yz}$ 是三个 2D 特征图,通常用 CNN 或 MLP 编码。
|
||
|
||
**EG3D(Efficient Geometry-Aware 3D GAN)**:
|
||
- 使用 triplane 表示结合 StyleGAN2
|
||
- 可控的相机姿态和形状编辑
|
||
- 高效渲染:只需三个特征图采样 + MLP 解码
|
||
|
||
**优势**:
|
||
- 2D 卷积处理 3D 表示,效率高
|
||
- 与 2D 生成模型(如 GAN、扩散)兼容性好
|
||
- 支持高分辨率(1024×1024+)
|
||
|
||
**劣势**:
|
||
- 三平面交点处可能存在不一致
|
||
- 难以精确表示复杂拓扑
|
||
|
||
### 4.5 Gaussian Splatting(3D Gaussian Scatter)
|
||
|
||
**核心思想**:用一组 3D 高斯分布表示场景,每个高斯 $\mathcal{G}_i$ 由均值 $\mu_i \in \mathbb{R}^3$ 和协方差 $\Sigma_i \in \mathbb{R}^{3 \times 3}$ 定义。
|
||
|
||
**高斯函数**:
|
||
|
||
$$
|
||
G_i(\mathbf{x}) = \exp\left(-\frac{1}{2} (\mathbf{x} - \mu_i)^T \Sigma_i^{-1} (\mathbf{x} - \mu_i)\right)
|
||
$$
|
||
|
||
**属性**:
|
||
- 颜色 $c_i \in \mathbb{R}^3$
|
||
- 不透明度 $\alpha_i \in \mathbb{R}$
|
||
|
||
**渲染**:通过**tile-based splatting**,将高斯投影到 2D,排序后 alpha 混合:
|
||
|
||
$$
|
||
C = \sum_{i \in \mathrm{KL}} \alpha_i \cdot G_i'(x, y) \cdot c_i \cdot \prod_{j < i} (1 - \alpha_j \cdot G_j'(x, y))
|
||
$$
|
||
|
||
其中 $G_i'(x, y)$ 是 3D 高斯在 2D 屏幕空间的投影。
|
||
|
||
**训练**:
|
||
- 从随机初始化或 SfM 点云开始
|
||
- 梯度反传更新 $\mu_i, \Sigma_i, \alpha_i, c_i$
|
||
- 定期**高斯分裂**(大高斯分裂为小高斯)和**修剪**(删除低不透明度高斯)
|
||
|
||
**与 NeRF 对比**:
|
||
| 特性 | NeRF | Gaussian Splatting |
|
||
|------|------|---------------------|
|
||
| 表示类型 | 神经网络(隐式) | 高斯分布(显式) |
|
||
| 渲染速度 | 慢(逐点 MLP) | 快(GPU splatting) |
|
||
| 编辑能力 | 困难 | 容易(逐高斯控制) |
|
||
| 训练收敛 | 慢 | 快 |
|
||
|
||
**3D Gaussian Scene Representation (3DGS)**:
|
||
- 实时渲染可达 100+ FPS
|
||
- 支持相机姿态估计
|
||
- 是当前 3D 重建的主流方法之一
|
||
|
||
---
|
||
|
||
## 5. 与扩散模型的深度结合
|
||
|
||
### 5.1 Score Distillation Sampling (SDS) 的深入理解
|
||
|
||
SDS 是连接 3D 表示与扩散模型的核心技术。考虑如下优化目标:
|
||
|
||
**变分下界(ELBO)视角**:
|
||
|
||
令 $\mathbf{x} = g(\theta)$ 是 3D 场景的渲染图像,$p(\mathbf{x}|y)$ 是文本 $y$ 条件下的生成分布。SDS 可视为最大化 $p(\mathbf{x}|y)$ 的变分近似:
|
||
|
||
$$
|
||
\log p(\mathbf{x}|y) \geq \mathbb{E}_{q(\mathbf{z}|\mathbf{x})} \left[ \log \frac{p(\mathbf{x}, \mathbf{z}|y)}{q(\mathbf{z}|\mathbf{x})} \right]
|
||
$$
|
||
|
||
通过对 $q(\mathbf{z}|\mathbf{x})$ 近似并应用拉斯维夫梯度,得到 SDS 梯度。
|
||
|
||
**去噪分数匹配(DSM)视角**:
|
||
|
||
扩散模型的训练目标是最小化去噪分数匹配损失:
|
||
|
||
$$
|
||
\mathcal{L}_{\mathrm{KL}} = \mathbb{E}_{t, \mathbf{x}_0, \epsilon} \left\| \epsilon - \epsilon_\phi(\alpha_t \mathbf{x}_0 + \sigma_t \epsilon, t) \right\|^2
|
||
$$
|
||
|
||
SDS 梯度是该损失对 $\mathbf{x}_0$ 的反向传播:
|
||
|
||
$$
|
||
\nabla_{\mathbf{x}_0} \mathcal{L}_{\mathrm{KL}} \approx \frac{1}{\sigma_t} (\epsilon - \epsilon_\phi(\mathbf{x}_t, t))
|
||
$$
|
||
|
||
**复合损失问题**:SDS 存在**过饱和、过平滑**问题,原因是:
|
||
1. 扩散模型倾向于生成"平均"图像
|
||
2. 梯度方差大,需要小学习率
|
||
3. 2D 扩散先验与 3D 几何一致性冲突
|
||
|
||
**改进方向**:
|
||
- **VSD(Variational Score Distillation)**:引入 3D 先验分布 $p_\theta(\mathbf{x})$,用 KL 散度正则化
|
||
- **CLD(Consistent Loss Diffusion)**:添加一致性正则项
|
||
- **DPM-Solver**:使用高阶 ODE 求解器加速采样
|
||
|
||
### 5.2 MultiDiffusion:多条件引导的 3D 生成
|
||
|
||
**核心思想**:将多个条件的扩散采样过程约束到统一的几何表示上。
|
||
|
||
**方法**:
|
||
- 从不同视角渲染 3D 场景 $\{I_1, I_2, \ldots, I_K\}$
|
||
- 每个视角对应一个扩散生成过程
|
||
- 通过**全局优化**确保多视角一致性
|
||
|
||
**能量函数**:
|
||
|
||
$$
|
||
E(\theta) = \sum_{k=1}^K \left\| \epsilon_\phi(I_k^{(\text{noisy})}, t, y_k) - \epsilon \right\|^2 + \lambda \cdot \text{Reg}(\theta)
|
||
$$
|
||
|
||
其中 $y_k$ 是第 $k$ 个视角的文本描述,$\text{Reg}$ 是几何正则项。
|
||
|
||
**应用场景**:
|
||
- 多视角文本控制("正面是猫,侧面是狮子")
|
||
- 3D 语义编辑(指定不同区域的属性)
|
||
|
||
### 5.3 潜在 3D 扩散模型(Latent 3D Diffusion)
|
||
|
||
**核心思想**:在潜在空间(latent space)中训练 3D 扩散模型,而非直接处理 3D 数据。
|
||
|
||
**优势**:
|
||
- 3D 数据标注稀缺且存储成本高
|
||
- 2D 扩散模型的强先验可迁移
|
||
- 潜在空间压缩维度,提高效率
|
||
|
||
**两阶段方法**:
|
||
1. **3D 编码器**:将 3D 表示(如 NeRF、triplane)编码到潜在空间 $\mathbf{z} \in \mathbb{R}^d$
|
||
2. **潜在扩散**:在 $\mathbf{z}$ 空间训练 DDPM
|
||
|
||
**代表工作**:
|
||
- **latent-diffusion-3D**:使用 triplane 作为潜在表示
|
||
- **Make-it-3D**:两阶段:先估计深度图,再生成 3D
|
||
|
||
**训练目标**:
|
||
|
||
$$
|
||
\mathcal{L} = \mathbb{E}_{\mathbf{z}, \epsilon, t} \left\| \epsilon - \epsilon_\phi(\mathbf{z}_t, t, c) \right\|^2
|
||
$$
|
||
|
||
其中 $\mathbf{z}_t = \alpha_t \mathbf{z} + \sigma_t \epsilon$ 是带噪潜在变量,$c$ 是条件(如文本)。
|
||
|
||
### 5.4 3D 一致性问题与解决
|
||
|
||
**问题描述**:
|
||
- SDS 优化的 3D 场景常出现**Janus 问题**(多个人脸)
|
||
- 纹理在不同视角下不一致
|
||
- 几何形状与纹理不匹配
|
||
|
||
**根因分析**:
|
||
- 2D 扩散模型缺乏 3D 一致性约束
|
||
- 每个视角独立优化,缺乏跨视角监督
|
||
- 相机视角采样不足
|
||
|
||
**解决方案**:
|
||
|
||
**多视角一致性正则**:
|
||
|
||
$$
|
||
\mathcal{L}_{\mathrm{KL}} = \sum_{i,j} \left\| \text{Project}(\text{Represent}(I_i), \pi_{i \to j}) - I_j \right\|^2
|
||
$$
|
||
|
||
其中 $\text{Represent}$ 是 3D 表示(如 NeRF),$\text{Project}$ 是渲染函数。
|
||
|
||
**分数蒸馏多视角(Score Distillation Multi-View)**:
|
||
|
||
$$
|
||
\nabla_\theta \mathcal{L} = \frac{1}{K} \sum_{k=1}^K \nabla_\theta \mathcal{L}_{\mathrm{KL}}(I_k)
|
||
$$
|
||
|
||
对 $K$ 个视角的 SDS 梯度取平均,增加监督信号。
|
||
|
||
**3D 一致性感知扩散模型**:
|
||
- **MVDiffusion**:训练时使用真值多视角图像
|
||
- **SyncDreamer**:通过 3D 感知特征聚合确保一致性
|
||
|
||
**测试时优化(TTO)**:
|
||
- 生成初始 3D 后,在测试时进行迭代优化
|
||
- 对渲染图像再经过扩散模型去噪
|
||
- 交替优化几何和纹理
|
||
|
||
---
|
||
|
||
## 6. 可编辑 3D 生成
|
||
|
||
### 6.1 3D 语义编辑(基于语言指令的 3D 编辑)
|
||
|
||
**任务定义**:给定 3D 场景和文本编辑指令,生成编辑后的 3D 场景。
|
||
|
||
**输入**:原始 3D 场景 $S_0$ + 编辑指令 $y_{\mathrm{KL}}$
|
||
**输出**:编辑后的 3D 场景 $S_{\mathrm{KL}}$
|
||
|
||
**代表性方法**:
|
||
|
||
**Instruct-NeRF2NeRF**:
|
||
1. 使用 NeRF 表示场景
|
||
2. 迭代优化:
|
||
- 渲染当前 NeRF 到 2D 图像
|
||
- 用 InstructPix2Pix 编辑 2D 图像
|
||
- 用编辑后的图像监督 NeRF 更新
|
||
|
||
**语义编辑的空间对应**:
|
||
- 3D 场景中的每个点 $\mathbf{x}$ 对应语义属性 $s(\mathbf{x}) \in \mathbb{R}^K$($K$ 为语义类别数)
|
||
- 通过分割模型或 3D 语义网络估计 $s(\mathbf{x})$
|
||
|
||
**损失函数设计**:
|
||
|
||
$$
|
||
\mathcal{L}_{\mathrm{KL}} = \mathcal{L}_{\mathrm{KL}} + \lambda_{\mathrm{KL}} \cdot \mathcal{L}_{\mathrm{KL}}(S_{\mathrm{KL}}, y_{\mathrm{KL}}) + \lambda_{\mathrm{KL}} \cdot \mathcal{L}_{\mathrm{KL}}(S_{\mathrm{KL}}, S_0)
|
||
$$
|
||
|
||
其中:
|
||
- $\mathcal{L}_{\mathrm{KL}}$ 保证渲染质量
|
||
- $\mathcal{L}_{\mathrm{KL}}$ 拉近编辑后场景与目标文本的距离
|
||
- $\mathcal{L}_{\mathrm{KL}}$ 保持未编辑区域不变
|
||
|
||
### 6.2 物理仿真与 3D 生成
|
||
|
||
**问题**:生成的几何形状可能违反物理约束(重力、碰撞、连通性)。
|
||
|
||
**物理引导的 3D 生成**:
|
||
|
||
**方法一:后验物理优化**
|
||
- 首先生成几何形状
|
||
- 通过物理仿真检测穿透、重叠等问题
|
||
- 迭代修复几何
|
||
|
||
**方法二:物理先验集成**
|
||
- 将物理约束编码到生成过程
|
||
- 如 Neural Physics:用可微物理层替代部分网络层
|
||
|
||
**可微物理仿真**:
|
||
|
||
$$\mathbf{v}_{t+1} = \mathbf{v}_t + \Delta t \cdot \mathbf{f}_{\mathrm{KL}}(\mathbf{x}_t, \mathbf{v}_t, \theta)$$
|
||
|
||
其中 $\mathbf{f}_{\mathrm{KL}}$ 是物理仿真函数(刚体、流体),$\theta$ 是物理参数。
|
||
|
||
**神经物理场(Neural Physics Fields)**:
|
||
- 用神经网络表示物理场(速度场、压力场)
|
||
- 端到端可微,支持反向传播
|
||
|
||
### 6.3 可编辑性、鲁棒性分析
|
||
|
||
#### 6.3.1 可编辑性(Editability)
|
||
|
||
**评估指标**:
|
||
- **局部性(Locality)**:编辑操作是否精确作用于目标区域
|
||
- **一致性(Consistency)**:编辑后多视角是否一致
|
||
- **保真度(Faithfulness)**:未编辑属性是否保持
|
||
|
||
**编辑操作类型**:
|
||
1. **几何编辑**:拉伸、旋转、添加/删除部件
|
||
2. **纹理编辑**:颜色、材质、图案修改
|
||
3. **语义编辑**:改变物体类别(如猫→狗)
|
||
|
||
**代表性工作**:
|
||
|
||
**ControlNeRF**:
|
||
- 加入控制信号(如深度、边缘图)
|
||
- 实现条件化的几何编辑
|
||
|
||
**EditableNeRF**:
|
||
- 将场景分解为不变内容和可编辑内容
|
||
- 通过注意力掩码隔离编辑区域
|
||
|
||
#### 6.3.2 鲁棒性(Robustness)
|
||
|
||
**对抗鲁棒性**:
|
||
- 3D 生成模型可能受到对抗攻击
|
||
- 对输入扰动(如噪声、遮挡)敏感
|
||
|
||
**分布外鲁棒性**:
|
||
- 训练数据分布与测试分布差异
|
||
- 稀有类别的生成质量差
|
||
|
||
**评估方法**:
|
||
|
||
$$
|
||
\text{Robustness}(\theta) = \mathbb{E}_{(\mathbf{x}, y) \sim \mathcal{T}} \left[ \mathbb{E}_{\delta \in \mathcal{B}_\epsilon(\mathbf{x})} \left[ \text{FID}(g(\theta, \mathbf{x} + \delta), y) \right] \right]
|
||
$$
|
||
|
||
其中 $\mathcal{B}_\epsilon(\mathbf{x})$ 是以 $\mathbf{x}$ 为中心的扰动球,$\mathcal{T}$ 是测试分布。
|
||
|
||
**提升鲁棒性的方法**:
|
||
- 对抗训练(Adversarial Training)
|
||
- 数据增强(随机视角、遮挡、噪声)
|
||
- 一致性正则(Consistency Regularization)
|
||
|
||
#### 6.3.3 编辑保真度(Edit Fidelity)
|
||
|
||
**身份保持(Identity Preservation)**:
|
||
|
||
$$
|
||
\mathcal{L}_{\mathrm{KL}} = D_{\mathrm{KL}}(\text{Emb}(S_{\mathrm{KL}}), \text{Emb}(S_0))
|
||
$$
|
||
|
||
其中 $D_{\mathrm{KL}}$ 是人脸识别距离度量,$\text{Emb}$ 是身份嵌入。
|
||
|
||
**属性解耦(Attribute Disentanglement)**:
|
||
|
||
好的 3D 编辑系统应能解耦不同属性:
|
||
- 几何 $\leftrightarrow$ 纹理
|
||
- 姿态 $\leftrightarrow$ 形状
|
||
- 身份 $\leftrightarrow$ 表情
|
||
|
||
**因果解耦表示**:
|
||
|
||
$$\mathbf{z} = [\mathbf{z}_{\mathrm{KL}}, \mathbf{z}_{\mathrm{KL}}, \mathbf{z}_{\mathrm{KL}}], \quad p(\mathbf{z}) = \prod_i p(\mathbf{z}_i)$$
|
||
|
||
独立控制每个因子,实现精确编辑。
|
||
|
||
---
|
||
|
||
## 7. 数学附录
|
||
|
||
### A. 体积渲染方程的推导
|
||
|
||
给定光线 $\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}$,定义:
|
||
- $T(t)$:从 $t_n$ 到 $t$ 的透射比
|
||
- $\sigma(t)$:体积密度
|
||
- $\mathbf{c}(t)$:颜色
|
||
|
||
光线在 $[t, t+dt]$ 区间被拦截的概率:
|
||
|
||
$$
|
||
P_{\mathrm{KL}} = \sigma(t) \cdot dt
|
||
$$
|
||
|
||
未被拦截且携带颜色到达相机的贡献:
|
||
|
||
$$
|
||
dC = \sigma(t) \cdot \mathbf{c}(t) \cdot T(t) \cdot dt
|
||
$$
|
||
|
||
积分得到终颜色:
|
||
|
||
$$
|
||
C(\mathbf{r}) = \int_{t_n}^{t_f} \sigma(t) \cdot \mathbf{c}(t) \cdot T(t) \, dt
|
||
$$
|
||
|
||
其中 $T(t) = \exp\left(-\int_{t_n}^t \sigma(s) ds\right)$。
|
||
|
||
### B. SDS 梯度的详细推导
|
||
|
||
DDPM 的前向过程:
|
||
|
||
$$
|
||
\mathbf{x}_t = \alpha_t \mathbf{x}_0 + \sigma_t \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)
|
||
$$
|
||
|
||
训练目标(简化形式):
|
||
|
||
$$
|
||
\mathcal{L} = \mathbb{E}_{t, \mathbf{x}_0, \epsilon} \left[ \| \epsilon - \epsilon_\phi(\mathbf{x}_t, t) \|^2 \right]
|
||
$$
|
||
|
||
对 $\mathbf{x}_0$ 求梯度:
|
||
|
||
$$
|
||
\nabla_{\mathbf{x}_0} \mathcal{L} \approx \alpha_t \cdot (\epsilon_\phi(\mathbf{x}_t, t) - \epsilon)
|
||
$$
|
||
|
||
令 $\mathbf{x}_0 = g(\theta)$,链式法则:
|
||
|
||
$$
|
||
\nabla_\theta \mathcal{L} = \nabla_{\mathbf{x}_0} \mathcal{L} \cdot \frac{\partial g(\theta)}{\partial \theta} \approx \alpha_t \cdot (\epsilon_\phi(\mathbf{x}_t, t) - \epsilon) \cdot \nabla_\theta g(\theta)
|
||
$$
|
||
|
||
去掉常数 $\alpha_t$ 得到 SDS 梯度。
|
||
|
||
### C. 高斯 splatting 的投影推导
|
||
|
||
3D 高斯 $\mathcal{N}(\mu, \Sigma)$ 投影到视角 $\pi$:
|
||
- 视角坐标系下的均值:$\mu' = \mathbf{R}\mu + \mathbf{t}$
|
||
- 协方差:$\Sigma' = \mathbf{J} \mathbf{R} \Sigma \mathbf{R}^T \mathbf{J}^T$
|
||
|
||
其中 $\mathbf{J}$ 是透视投影雅可比:
|
||
|
||
$$
|
||
\mathbf{J} = \begin{bmatrix} f/x^2 & 0 & -f/x \\ 0 & f/y^2 & -f/y \\ 0 & 0 & 0 \end{bmatrix} \bigg|_{x=y=1}
|
||
$$
|
||
|
||
2D 高斯函数:
|
||
|
||
$$
|
||
G'(\mathbf{u}) = \exp\left(-\frac{1}{2} (\mathbf{u} - \mu')^T \Sigma'^{-1} (\mathbf{u} - \mu')\right)
|
||
$$
|
||
|
||
---
|
||
|
||
## 参考文献
|
||
|
||
1. Mildenhall et al. "NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis" *ECCV 2020*
|
||
2. Poole et al. "DreamFusion: Text-to-3D using 2D Diffusion" *ICLR 2023*
|
||
3. Liu et al. "Zero-1-to-3: Zero-shot One Image to 3D Object" *ICCV 2023*
|
||
4. Lin et al. "Magic3D: High-Resolution Text-to-3D Content Creation" *CVPR 2023*
|
||
5. Kerbl et al. "3D Gaussian Scattering for Real-Time Rendering of Radiance Fields" *ACM TOG 2023*
|
||
6. Chan et al. "EG3D: Efficient Geometry-Aware 3D Generative Adversarial Networks" *CVPR 2022*
|
||
7. Müller et al. "Instant Neural Graphics Primitives with a Multiresolution Hash Encoding" *ACM TOG 2022*
|
||
8. Barron et al. "Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields" *ICCV 2021*
|
||
9. Haque et al. "Instruct-NeRF2NeRF: Editing 3D Scenes with Instructions" *CVPR 2023*
|
||
|
||
---
|
||
|
||
*本笔记面向科研人员,重点阐述核心算法的数学推导与算法直觉。如有疏漏,欢迎指正。*
|