27 KiB
title, draft, tags
| title | draft | tags | ||||
|---|---|---|---|---|---|---|
| 03-NeRF与3D生成 | false |
|
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 网络,通常结构如下:
- 输入位置
\mathbf{x}通过多层全连接层(8层,256通道)输出\sigma和中间特征 - 中间特征与观察方向
\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) 是沿光线采样的体积渲染颜色。
训练流程:
- 对每个像素,从相机原点发射光线
\mathbf{r}(t) = \mathbf{o} + t\mathbf{d} - 在光线沿线采样
N个点,查询 NeRF 网络 - 体积渲染得到预测颜色
\hat{C}(\mathbf{r}) - 计算重建损失并反向传播
稀疏视角问题: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)参数量 vsO(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 的生成。
框架:
- 随机初始化 NeRF 参数
\theta - 从随机视角渲染 NeRF 得到图像
g(\theta) = \text{Render}(\theta, \pi) - 用扩散模型
\epsilon_\phi评估渲染图像的质量 - 通过 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。
方法:
- 收集大量 3D 物体数据集(如 Objaverse)
- 每个物体渲染多个视角的图像
- 训练条件扩散模型
\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 存在过饱和、过平滑问题,原因是:
- 扩散模型倾向于生成"平均"图像
- 梯度方差大,需要小学习率
- 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 扩散模型的强先验可迁移
- 潜在空间压缩维度,提高效率
两阶段方法:
- 3D 编码器:将 3D 表示(如 NeRF、triplane)编码到潜在空间
\mathbf{z} \in \mathbb{R}^d - 潜在扩散:在
\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:
- 使用 NeRF 表示场景
- 迭代优化:
- 渲染当前 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):未编辑属性是否保持
编辑操作类型:
- 几何编辑:拉伸、旋转、添加/删除部件
- 纹理编辑:颜色、材质、图案修改
- 语义编辑:改变物体类别(如猫→狗)
代表性工作:
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)
参考文献
- Mildenhall et al. "NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis" ECCV 2020
- Poole et al. "DreamFusion: Text-to-3D using 2D Diffusion" ICLR 2023
- Liu et al. "Zero-1-to-3: Zero-shot One Image to 3D Object" ICCV 2023
- Lin et al. "Magic3D: High-Resolution Text-to-3D Content Creation" CVPR 2023
- Kerbl et al. "3D Gaussian Scattering for Real-Time Rendering of Radiance Fields" ACM TOG 2023
- Chan et al. "EG3D: Efficient Geometry-Aware 3D Generative Adversarial Networks" CVPR 2022
- Müller et al. "Instant Neural Graphics Primitives with a Multiresolution Hash Encoding" ACM TOG 2022
- Barron et al. "Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields" ICCV 2021
- Haque et al. "Instruct-NeRF2NeRF: Editing 3D Scenes with Instructions" CVPR 2023
本笔记面向科研人员,重点阐述核心算法的数学推导与算法直觉。如有疏漏,欢迎指正。