Files
2026-05-16 17:16:51 +08:00

765 lines
27 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 03-NeRF与3D生成
draft: false
tags:
- NeRF
- 3D生成
- 多模态
- 生成模型
---
# NeRF 与 3D 生成
> **面向读者**:深度学习与生成式模型科研人员
> **更新日期**2026-05-14
> **预备知识**:神经渲染、体积渲染、扩散模型基础
---
## 1. NeRFNeural 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 NGPInstant 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-NeRFMipmap NeRF
**问题**NeRF 在抗锯齿和远距离场景中表现不佳,原因是像素对应的光锥被建模为无限细的光线。
**解决方案**:引入**锥体渲染Cone Rendering**,每个像素对应一个视锥而非光线:
- 像素 $(u, v)$ 对应相机原点 $\mathbf{o}$ 和主方向 $\mathbf{d}$,加上垂直于 $\mathbf{d}$ 的扩展向量
- 采样点在椎体内呈高斯分布,用**集成位置编码Integrated Positional Encoding**描述
**IPEIntegrated 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 DreamFusionNeRF + 扩散模型
**核心思想**:利用预训练 2D 扩散模型作为监督信号,优化随机初始化的 NeRF实现文本到 3D 的生成。
**框架**
1. 随机初始化 NeRF 参数 $\theta$
2. 从随机视角渲染 NeRF 得到图像 $g(\theta) = \text{Render}(\theta, \pi)$
3. 用扩散模型 $\epsilon_\phi$ 评估渲染图像的质量
4. 通过 **SDS Loss** 反向传播优化 $\theta$
**SDSScore 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-3Novel 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 面片
- NKSRNeural Kernel Surface Reconstruction将 NeRF 监督转化为 mesh
**Differentiable Mesh Rendering**
- Soft rasterization可微渲染器将 mesh 投影为图像
- 梯度可从 2D 图像反向传播到 mesh 顶点
**DMTetDifferentiable 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 编码。
**EG3DEfficient Geometry-Aware 3D GAN**
- 使用 triplane 表示结合 StyleGAN2
- 可控的相机姿态和形状编辑
- 高效渲染:只需三个特征图采样 + MLP 解码
**优势**
- 2D 卷积处理 3D 表示,效率高
- 与 2D 生成模型(如 GAN、扩散兼容性好
- 支持高分辨率1024×1024+
**劣势**
- 三平面交点处可能存在不一致
- 难以精确表示复杂拓扑
### 4.5 Gaussian Splatting3D 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 几何一致性冲突
**改进方向**
- **VSDVariational Score Distillation**:引入 3D 先验分布 $p_\theta(\mathbf{x})$,用 KL 散度正则化
- **CLDConsistent 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*
---
*本笔记面向科研人员,重点阐述核心算法的数学推导与算法直觉。如有疏漏,欢迎指正。*