--- 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* --- *本笔记面向科研人员,重点阐述核心算法的数学推导与算法直觉。如有疏漏,欢迎指正。*