潜在空间基础
# 潜在空间:理解生成模型的基石 ## 什么是潜在空间? 潜在空间(Latent Space)是机器学习中一个核心概念,可以理解为数据的"压缩表示"。 ### 核心思想 - **使用低维表示高维**:将复杂的高维数据(如图像)映射到低维空间 - **用数据的分布来存储信息**:不是存储单个数据点,而是学习数据的分布规律 - **解码器可以读懂这种规律**:从潜在表示恢复原始信息 ## 为什么要学习潜在空间? ### 1. 数据压缩 ``` 原始图像:512×512×3 = 786,432 维 潜在表示:256 维 压缩比:约 3000:1 ``` ### 2. 特征提取 潜在空间中的每个维度可能代表: - 物体的形状 - 颜色风格 - 姿态角度 - 表情特征 ### 3. 生成新数据 通过在潜在空间中"游走",可以: - 平滑过渡:从一个样本渐变到另一个 - 属性编辑:修改特定维度控制特定属性 - 随机生成:从潜在空间采样生成新样本 ## 连续 vs 离散表示 ### 连续潜在空间(VAE) - **特点**:潜在变量是连续的实数 - **优势**:可以平滑插值,易于采样 - **问题**:可能导致模糊输出("平均解"问题) ### 离散潜在空间(VQ-VAE) - **特点**:使用离散的码本向量 - **优势**:更好地表示多样性,避免模糊 - **应用**:DALL-E 2、图像生成模型广泛采用 ## 潜在空间的几何意义 想象一个3D空间: - **X轴**:控制姿势(站、坐、躺) - **Y轴**:控制表情(笑、哭、怒) - **Z轴**:控制光照(亮、暗、阴影) 在空间中移动 = 同时改变多个属性 这就是为什么生成模型可以通过"向量运算"实现: ``` 戴眼镜的男人 - 男人 + 女人 = 戴眼镜的女人 ```
# 表示学习与自编码器 ## 自编码器(Autoencoder)基础 ### 架构 ``` 输入图像 → 编码器 → 潜在向量 → 解码器 → 重建图像 ↓ ↓ ↓ 786维 256维 786维 ``` ### 编码器的作用 - **降维**:将高维输入压缩到低维空间 - **特征提取**:学习数据的关键特征 - **去噪**:过滤无关信息 ### 解码器的作用 - **重建**:从潜在表示恢复原始数据 - **生成**:可以从随机噪声生成新数据 ## 普通自编码器的问题 ### 问题1:分布无关 - 学习的是点到点的映射 - 没有考虑潜在空间的分布 - 采样困难:随机采样可能得到无意义的结果 ### 问题2:过拟合 - 可能只是"记忆"训练数据 - 泛化能力差 - 无法生成真正的新样本 ## VAE的解决方案 ### 变分推断 不学习固定的潜在向量,而是学习分布: - 输出:均值 $\mu$ 和方差 $\sigma^2$ - 采样:$z \sim N(\mu, \sigma^2)$ ### 为什么这样做? 1. **平滑性**:相近的输入产生相近的分布 2. **泛化性**:可以从未见过的位置采样 3. **正则化**:KL散度约束分布形状 ## 重参数化技巧 关键创新:让采样操作可微分 $$z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim N(0, I)$$ ### 为什么重要? - 随机性来自 $\epsilon$(固定分布) - $\mu$ 和 $\sigma$ 是网络输出 - 梯度可以回传到网络 ## 潜在空间的操作 ### 插值 $$z_{new} = \alpha z_1 + (1-\alpha) z_2, \quad \alpha \in [0, 1]$$ ### 算术运算 ``` 国王 - 男人 + 女人 = 王后 夏天 - 热 + 冷 = 冬天 ``` ### 属性编辑 ``` z_smile = z + β·v_smile 其中 v_smile 是"微笑"方向向量 ```
# VQ-VAE:离散表示学习 ## 为什么需要离散表示? ### 连续表示的问题 1. **后验崩溃**:模型忽略潜在变量,直接解码 2. **模糊问题**:倾向于输出"平均"结果 3. **控制困难**:难以精确控制特定属性 ### 离散表示的优势 - **信息丰富**:离散点比连续线能更好地表示多样性 - **避免模糊**:每个码本向量都是独特表示 - **易于控制**:可以精确选择要使用的特征 ## VQ-VAE架构 ### 矢量量化(Vector Quantization) ``` 编码器输出 z_e(x) → 找到最近的码本向量 z_q → 解码器 ↓ 码本(Codebook) [e_1, e_2, ..., e_K] ``` ### 前向传播 1. 编码器输出连续向量 z_e 2. 在码本中找到最接近的向量 z_q 3. 将 z_q 传递给解码器 ### 损失函数 $$L = \underbrace{\|x - \hat{x}\|^2}_{\text{重建损失}} + \underbrace{\|\text{sg}[z_e(x)] - e\|^2}_{\text{码本更新}} + \underbrace{\beta \|z_e(x) - \text{sg}[e]\|^2}_{\text{承诺损失}}$$ 其中 $\text{sg}[\cdot]$ 表示停止梯度操作。 ## VQ-VAE 2改进 ### 两级层次结构 1. **第一级**:捕捉粗粒度信息(大尺度特征) 2. **第二级**:捕捉细粒度细节(纹理、边缘) ### 优势 - 更高效的压缩 - 更好的重建质量 - 更丰富的表达能力 ## 应用场景 ### 图像生成 - **DALL-E 2**:使用VQ-VAE学习图像表示 - **Stable Diffusion**:在潜在空间操作(类似思想) ### 语音合成 - **VQ-VAE用于语音**:WaveNet、SoundStream - **语音转换**:改变说话人身份 ### 视频生成 - **MagViT**:视频的离散表示学习 - **VideoGPT**:视频生成的自回归模型 ## 码本大小选择 | 码本大小 | 维度 | 应用场景 | |---------|-----|---------| | 512 | 256 | 小规模数据集 | | 8192 | 512 | 大规模图像生成(DALL-E 2) | | 16384 | 1024 | 高分辨率图像/视频 | **经验法则**: - 码本太小:表达能力不足 - 码本太大:训练困难,可能利用率低
图像生成基础
# GAN (生成对抗网络) ## 核心概念 - **架构组成**:生成器 (Generator) + 判别器 (Discriminator) - **基本原理**:通过对抗训练实现图像生成 - 生成器:试图生成逼真的假图像来欺骗判别器 - 判别器:区分真实图像和生成图像 ## GAN的核心设计哲学 ### 关键理解:生成器的真正目的 ``` ❌ 错误理解:生成器要生成"真的"数据 ✅ 正确理解:生成器要"骗"过判别器,让判别器认为自己是真的 ``` ### 为什么这样设计? #### 1. 损失函数设计的需要 - 如果目标是"生成真数据",损失函数难以构造 - "骗过判别器"的目标可以直接用判别器的输出构造损失 - 这直接决定了损失函数的设计: $$L_G = \min_G \log(1 - D(G(z)))$$ #### 2. 业务需求 - 我们需要的是一个**能以假乱真**的生成器 - 而不是知道什么是"真"数据的生成器 - 假的永远都是假的,但只要骗过判别器就足够了 ### "让鉴别器成就生成器" GAN的设计精髓在于: - 判别器的训练服务于生成器 - 判别器越强,生成器被迫提升 - 最终判别器成为生成器的"训练师" ## 对抗训练机制 - 两者相互竞争,最终达到纳什均衡 - 生成器目标:最大化判别器犯错概率 - 判别器目标:准确区分真假图像 ## 损失函数 $$L_G = \min_G \log(1 - D(G(z)))$$ $$L_D = \max_D \log(D(x)) + \log(1 - D(G(z)))$$ 其中: - $G(z)$:生成器输出的假图像 - $D(x)$:判别器判断图像为真的概率 - $x$:真实图像 - $z$:随机噪声向量 ## 优缺点 | 优点 | 缺点 | |-----|-----| | 推理速度快(一次forward即可) | 训练不稳定 | | 生成图像质量高 | 模式崩溃问题 | | 理论框架优雅 | 难以评估生成质量 | | 一旦训练成功,生成质量极高 | 很难通过文字控制 | ## 主要变体 - **DCGAN**:引入卷积架构,训练更稳定 - **StyleGAN**:控制生成图像的风格特征 - **CycleGAN**:实现图像风格转换 - **Pix2Pix**:图像到图像的翻译 - **StyleGAN-3**:解决特征粘连问题,更高质量
# VAE (变分自编码器) ## 核心概念 - 结合变分推断和贝叶斯理论 - 主要用于数据降维、生成和重建 - 学习潜在空间的概率分布 ## 编码器-解码器结构 - **编码器**:将输入数据映射到潜在空间的分布参数 - 输出:均值 $\mu$ 和方差 $\sigma^2$ - 采样:$z = \mu + \sigma \cdot \epsilon$,其中 $\epsilon \sim N(0, I)$ - **解码器**:从潜在变量重建数据 - 输入:采样的潜在向量 $z$ - 输出:重建的数据 ## 重参数化技巧 $$z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim N(0, I)$$ 这使得梯度可以通过采样操作反向传播。 ## 损失函数 $$L = \mathbb{E}_{q(z|x)}[\log p(x|z)] - D_{KL}(q(z|x) \| p(z))$$ 其中: - $\mathbb{E}_{q(z|x)}[\log p(x|z)]$:重建损失 - $D_{KL}(q(z|x) \| p(z))$:KL散度正则化项 ## 优缺点 | 优点 | 缺点 | |-----|-----| | 训练稳定 | 生成图像较模糊 | | 理论基础扎实 | 潜在空间利用不充分 | | 可解释性强 | 需要平衡重建与KL项 | ## 应用场景 - 图像生成与编辑 - 异常检测 - 数据压缩 - 表示学习
# 扩散模型 (Diffusion Models) ## 核心概念 - 基于概率建模的生成方法 - 通过扩散过程进行图像生成 - 2020年后成为主流生成模型 ## 前向扩散过程 逐步向数据添加噪声,直到变成纯噪声: $$q(x_{1:T}|x_0) = \prod_{t=1}^T q(x_t|x_{t-1})$$ $$q(x_t|x_{t-1}) = N(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)$$ 其中: - $x_0$:原始数据 - $x_t$:第$t$步的加噪数据 - $\beta_t$:噪声调度参数 ## 反向去噪过程 学习从噪声恢复数据: $$p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t)$$ $$p_\theta(x_{t-1}|x_t) = N(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t))$$ ## 训练目标 简化版(DDPM):预测噪声 $$L_{simple} = \mathbb{E}_{t, x_0, \epsilon} [\|\epsilon - \epsilon_\theta(x_t, t)\|^2]$$ 其中: - $x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon$ - $\epsilon \sim N(0, I)$:真实噪声 - $\epsilon_\theta(x_t, t)$:预测的噪声 ## 优缺点 | 优点 | 缺点 | |-----|-----| | 生成质量最高 | 推理较慢(需多次forward) | | 多样性丰富 | 训练成本高 | | 训练稳定 | - | ## 主要变体 - **DDPM**:基础扩散模型 - **DDIM**:加速采样 - **Stable Diffusion**:在潜在空间操作,效率更高 - **FLUX.1**:最新一代扩散模型 ## Stable Diffusion架构 1. **VAE编码器**:图像→潜在表示 2. **UNet**:去噪核心 3. **CLIP文本编码器**:文本条件 4. **VAE解码器**:潜在表示→图像
# 生成模型技术对比 ## 直观理解:三种生成模型 ### 🍳 形象比喻 | 模型 | 形象比喻 | 特点 | |-----|---------|-----| | **VAE** | 临摹画家 | 先看原图,记住大概轮廓,然后"猜"着画出来,画作总是偏向平滑和模糊 | | **GAN** | 鉴宝师 vs 仿制大师 | 仿制大师拼命造赝品,鉴宝师拼命分辨真假,最终能造出极其逼真的赝品,但容易"走火入魔" | | **Diffusion** | 雕塑修复师 | 先往雕像上泼墨水(加噪),直到变成一团黑,然后一步步把墨水吸走(去噪),精雕细琢出细节 | ## 详细技术对比表 | 对比维度 | **VAE** | **GAN** | **Diffusion** | |:---|:---|:---|:---| | **核心逻辑** | 重建+扰动。编码成分布,再从中采样解码 | 博弈对抗。生成器(G)与判别器(D)相互内卷 | 加噪去噪。学习从纯噪声中一步步复原数据 | | **生成过程** | 一步到位(直接从隐变量映射出图像) | 一步到位(从随机噪声直接映射出图像) | 多步迭代(从噪声开始,经过几十到上千步逐渐细化) | | **生成质量** | 较为模糊、平滑(缺乏高频细节) | 极其清晰、锐利(细节丰富) | 极其清晰、锐利(细节丰富,且构图更稳定) | | **多样性** | 很高(擅长覆盖所有可能,生成不同样本) | 较低(容易模式崩溃,只生成同质化内容) | 中等偏高(在细节上有丰富变化,大构图可控) | | **训练难度** | 容易(稳定收敛) | 极难(需平衡G和D,易崩塌/不收敛) | 较难(训练成本极高,需大量算力) | | **数学基础** | 变分推断 + 贝叶斯(最大化证据下界ELBO) | 纳什均衡(Min-Max博弈论) | 马尔可夫链 + 得分匹配(极大似然估计变体) | | **推理速度** | 极快(一秒出图) | 极快(一秒出图) | 极慢(需跑几十步,依赖采样器加速) | ## 致命缺点 ### VAE的痛:模糊 - **原因**:强制隐空间必须连续,导致模型为覆盖所有点只能取"平均解" - **结果**:丢失尖峰细节,生成图像模糊 ### GAN的痛:不可控 - **原因**:训练时G和D必须势均力敌,一旦失衡就出问题 - **表现**:D太强就没梯度,G太强就乱画;生成器"躺平"只生成少数几类 - **额外问题**:很难通过文字控制生成内容 ### Diffusion的痛:慢且贵 - **慢**:生成一张图需要几十次迭代 - **贵**:耗电量远大于GAN,训练成本极高 - **显存需求**:需要处理整个高维空间 ## 演化关系 ### VAE → Diffusion Diffusion本质上就是**多层重复的VAE**,只不过每层只加一点点噪声。 ### GAN → 对抗性加速 GAN的思想正在用于扩散模型加速,如Consistency Model让Diffusion一步出图。 ## 选型决策树 ``` 你需要什么? │ ├── 实时交互(换脸、滤镜)→ 选 GAN ├── 商用级精美海报 → 选 Diffusion ├── 科研基座或数据压缩 → 选 VAE └── 文本生成图像 → 选 Diffusion(SD/DALL-E) ``` ## 代表作品 | 模型类型 | 代表作品 | |---------|---------| | **VAE** | VQ-VAE(语音合成)、β-VAE(解表示学习) | | **GAN** | StyleGAN(人脸/动漫头像)、CycleGAN(风格迁移)、Pix2Pix(图像翻译) | | **Diffusion** | Stable Diffusion(文生图)、DALL-E 2/3、Midjourney、Sora(文生视频) |
3D生成基础
# NeRF(神经辐射场) ## 核心概念 NeRF(Neural Radiance Fields)是一种**隐式3D场景表示方法**,通过神经网络学习场景的体积密度和颜色,实现高质量的新视角合成。 ### 什么是"神经辐射场"? 辐射场(Radiance Field)描述了空间中每个点的: - **颜色**(RGB):该点在不同观察方向下的颜色 - **密度**(σ):该点的"不透明度"或"存在概率" NeRF用一个神经网络来表示这个场: $$F_\Theta: (x, y, z, \theta, \phi) \rightarrow (RGB, \sigma)$$ ## 数据流程:从照片到3D点 ### 核心问题理解 **问题**:NeRF 3D网络中光线上的点的数据、像素点坐标、RGB颜色是怎么得到的? **关键理解**: - **x, y**:来自2D图片的像素位置(照片本身) - **z(深度)**:不是记录的,是NeRF自己学出来的 - **角度**:由相机位姿计算得出 ### 完整数据流程 #### 第1步:获取相机参数 每张训练图片附带**相机位姿矩阵**(camera-to-world matrix),包含: - 相机光心位置(x, y, z) - 相机朝向(旋转矩阵) 这些数据通过COLMAP等工具从照片中计算得出。 #### 第2步:从像素坐标生成光线 对于图片上每个像素点 (x, y): ``` 光线公式:R(t) = O + t * D ``` - **O(光心)**:相机的世界坐标 - **D(方向向量)**:从光心指向像素的方向 - **t(沿光线距离)**:人为采样参数 #### 第3步:在光线上采样点 NeRF沿光线均匀采样N个点(如64个): ``` P_i = O + t_i * D, 其中 t_i ∈ [near, far] ``` **关键点**:z(深度)就是采样距离 t_i,不是从照片读取的! #### 第4步:网络预测RGB和密度 将采样点的坐标和观察方向输入MLP网络: - 输入:3D坐标 (x, y, z) + 观察方向 (θ, φ) - 输出:RGB颜色 + 体积密度σ #### 第5步:体渲染合成像素颜色 将所有采样点的RGB和σ按公式加权求和: $$C(r) = \sum_{i=1}^{N} T_i \cdot (1 - \exp(-\sigma_i \delta_i)) \cdot c_i$$ ### 数据来源对照表 | 数据项 | 来源 | 是否在照片中? | |-------|------|--------------| | 像素坐标 (x, y) | 图片行列索引 | ✅ 是 | | 像素RGB | 图片像素值 | ✅ 是 | | 相机光心 (O) | COLMAP计算 | ❌ 否 | | 光线方向 (D) | 内参+外参计算 | ❌ 否 | | 采样点z (深度) | 光线采样 | ❌ 否 | | 观察角度 | 光线方向 | ❌ 否 | ## NeRF的伟大之处 **不需要深度图作为监督信号!** NeRF只依靠"同一个3D点在不同照片中投影到不同像素位置"这一几何一致性,通过多视角的2D颜色约束,逼着网络自己学会推断每个点的深度和颜色。 **一句话概括**: - 输入:带有相机位姿的照片集 - 输出:能预测任意3D点颜色和密度的神经网络 - 训练目标:渲染颜色匹配真实照片 ## 训练与应用 ### 训练阶段 - 输入:10-100张不同角度照片 + 相机位姿 - 目标:预测剩下350个角度 - 结果:形成360度的3D场景 ### 应用场景 - 新视角合成 - 3D场景重建 - 虚拟现实(VR) - 数字孪生
# NeRF代码实现原理 ## 整体流程 ```mermaid flowchart TD A[多视角图片 + 相机位姿] --> B[生成光线] B --> C[沿光线采样3D点] C --> D[位置编码] D --> E[MLP网络] E --> F[体渲染] F --> G[计算损失] G --> H[反向传播] H -- 迭代训练 --> B ``` ## 第1步:数据加载与预处理 ### 相机位姿数据 NeRF训练需要**已知相机位姿**的2D图片,通常存储在`poses_bounds.npy`中: ```python # 加载相机位姿和边界信息 poses_arr = np.load(os.path.join(basedir, 'poses_bounds.npy')) # 每行包含:[3x3旋转矩阵R, 3x1平移向量T, 高H, 宽W, 焦距f, near, far] poses = poses_arr[:, :-2].reshape([-1, 3, 5]).transpose([1,2,0]) bds = poses_arr[:, -2:].transpose([1,0]) ``` ## 第2步:光线生成与采样 ### 生成光线函数 ```python def get_rays(H, W, camera_angle_x, c2w, device): # 计算像素在相机坐标系下的方向 dirs = torch.stack([x, y, z], dim=-1) dirs = dirs / torch.norm(dirs, dim=-1, keepdim=True) # 转换到世界坐标系 R, t = c2w[:3, :3], c2w[:3, 3] rays_d = dirs @ R.T # 光线方向 rays_o = t.expand_as(rays_d) # 光心位置 return rays_o, rays_d ``` ## 第3步:位置编码(Positional Encoding) ### 为什么需要位置编码? 直接将坐标输入网络,难以学习高频细节信息。需要使用高频函数映射到更高维空间。 ### 位置编码实现 ```python def positional_encoding(x, L): # x: 输入坐标, L: 编码频率数量 freqs = (2.0 ** torch.arange(L, device=x.device)) * math.pi xb = x[..., None, :] * freqs[:, None] xb = xb.reshape(*x.shape[:-1], L * 3) return torch.cat([torch.sin(xb), torch.cos(xb)], dim=-1) ``` **编码效果**: - 将3D坐标映射到6L维空间(L=10时为60维) - 保留高频信息,让网络能学习精细纹理 ## 第4步:NeRF网络结构 ### 栌心设计 ```python class NeRF(nn.Module): def forward(self, x, d): x_enc = positional_encoding(x, self.L_pos) # 编码位置 d_enc = positional_encoding(d, self.L_dir) # 编码方向 h = self.fc_layers(x_enc) # 通过多个全连接层 sigma = self.sigma_layer(h) # 预测密度 # 将中间特征与编码后的方向拼接,预测颜色 h = torch.cat([h, d_enc], dim=-1) rgb = self.color_layers(h) return rgb, sigma ``` ### 设计哲学 - **密度与视角无关**:一个点的透明度是固定的 - **颜色与视角相关**:体现金属、玻璃等材质的反光效果 ## 第5步:体渲染(Volume Rendering) ### 核心公式 $$C(r) = \sum_{i=1}^{N} T_i \cdot (1 - \exp(-\sigma_i \delta_i)) \cdot c_i$$ 其中: - **C(r)**:光线对应的像素颜色 - **T_i**:累积透射率(光线到达第i点时未被遮挡的概率) - **σ_i**:第i点的密度 - **δ_i**:相邻采样点之间的距离 - **c_i**:第i点的颜色 ### 简单理解 沿光线,根据每个点的密度计算对最终颜色的贡献: - 密度高的点贡献大 - 其后面的点因遮挡贡献减小 ## 第6步:分层采样(Hierarchical Volume Sampling) ### 原始NeRF的优化策略 1. 先用"粗糙"网络在光线上均匀采样 2. 找出物体表面的大致区域 3. 再用"精细"网络在重要区域密集采样 4. 将计算资源集中在真正有内容的地方 ### 优势 - 提高渲染质量 - 加速训练收敛 - 减少无效采样 ## 训练循环 ```python # 伪代码 for iteration in range(num_iterations): # 1. 随机选择一张图片和对应的相机位姿 img, pose = random_sample(training_data) # 2. 生成光线 rays_o, rays_d = get_rays(H, W, focal, pose) # 3. 在光线上采样 pts = sample_points(rays_o, rays_d, N_samples) # 4. 网络预测 rgb, sigma = NeRF_network(pts, rays_d) # 5. 体渲染 rendered_rgb = volume_rendering(rgb, sigma, t_vals) # 6. 计算损失 loss = ((rendered_rgb - img) ** 2).sum() # 7. 反向传播 loss.backward() optimizer.step() ```
# NeRF vs 2D生成模型 ## 核心目标差异 | 维度 | NeRF(新视角合成) | 图片生视频(Image-to-Video) | |:---|:---|:---| | **本质任务** | 三维重建 + 新视角渲染 | 二维视频生成(外推时间维度) | | **输入** | 多张同场景照片(≥20张)+ 相机位姿 | 单张参考图片(或文本+图片) | | **输出** | 3D隐式表示(神经网络) | 连续视频帧序列 | | **核心约束** | 多视角几何一致性 | 时序连贯性 | | **能否自由运镜?** | ✅ 可以,任意角度渲染 | ❌ 通常不行 | | **能否改变场景?** | ❌ 不行,只能重建已拍摄场景 | ✅ 可以,生成新的动作 | ## 一句话总结 - **NeRF** = 给定场景的几十张照片,建一个3D模型,以后可以随便换角度看 - **图片生视频** = 给一张照片,猜接下来会发生什么,生成那段视频 前者是**重建已有现实**(需要足够多信息),后者是**生成未知未来**(需要强大先验)。 ## 深入对比 ### 相似点 1. 输入都是2D像素 2. 都涉及"从2D推测3D" 3. 都用神经网络做映射 ### 根本区别 #### 1. 输入数据量级不同 - **NeRF**:需要几十到上百张照片 + 精确相机位姿 - **图片生视频**:只给一张图,必须"脑补"背面、遮挡、运动 **意味着**:NeRF是确定性重建,图片生视频是概率生成 #### 2. 输出维度不同(3D vs 4D) - **NeRF**:静态3D体积(空间坐标 → 颜色+密度) - **图片生视频**:4D时空体(空间+时间 → 颜色) **比喻**: - NeRF = 给雕塑拍几十张照片,围着它从任意角度观看(雕塑静止) - 图片生视频 = 给一张雕塑照片,预测它下一秒会怎么动 #### 3. 训练目标不同 - **NeRF**:重建损失(渲染像素 vs 真实照片),有明确Ground Truth - **图片生视频**:生成质量损失,没有Ground Truth(未来还没发生) #### 4. 相机运动处理 - **NeRF**:显式控制相机位姿,可任意旋转和平移 - **图片生视频**:隐式控制(大多不可控),由模型自动推断 ## 技术栈对比 | 技术组件 | NeRF中使用 | 图片生视频中使用 | |:---|:---|:---| | 位置编码 | ✅ 对3D坐标和方向编码 | ✅ 对时间和空间编码 | | 体渲染 | ✅ 合成像素颜色 | ❌ 不常用 | | 扩散模型 | ❌ 不用 | ✅ 核心架构 | | 光流/深度 | ❌ 网络自己学 | ✅ 辅助监督信号 | | 3D先验 | ✅ 多视角几何(硬约束) | ⚠️ 隐式学习(软约束) | ## 具体例子 ### 故宫太和殿 | 任务 | 输入 | 输出 | 核心难题 | |:---|:---|:---|:---| | **NeRF** | 100张不同角度照片 | 3D神经场景,任意角度渲染 | 保证所有视角投影一致性 | | **图片生视频** | 1张正面照 | 视频:镜头推进,云彩飘过 | 让运动和光影看起来自然 | **显然**:NeRF生成和真实照片几乎一致,图片生视频生成的是"关于太和殿的视频",细节都是模型猜的。 ## 技术交汇 最近出现的**Dynamic NeRF**和**4D重建**技术,可以处理动态场景,此时和图片生视频的界限会模糊。但即使动态NeRF,也要求**输入多视角视频序列**(多个相机同时拍),而图片生视频只靠单张图。
# 经典NeRF开源网络 ## 原始NeRF(2020) ### 论文信息 - **标题**:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis - **会议**:ECCV 2020(最佳论文提名) - **作者**:Ben Mildenhall(UC Berkeley)等 - **开源**:[官方实现](https://github.com/bmild/nerf) ### 核心特点 - 隐式神经场景表示 - 位置编码+体积渲染 - 分层采样优化 - 重建质量高但训练慢(需数小时到数天) ### 代码结构 ``` nerf/ ├── run_nerf.py # 主训练脚本 ├── load_nerf.py # 模型加载 ├── run_nerf_helpers.py # 辅助函数 └── run_nerf_src/ ├── __init__.py ├── data.py # 数据加载 ├── nerf.py # NeRF网络定义 └── utils.py # 工具函数 ``` --- ## Instant-NGP(2022) ### 论文信息 - **标题**:Instant Neural Graphics Primitives with a Multiresolution Hash Encoding - **会议**:SIGGRAPH 2022 - **作者**:NVIDIA T. Karras等 - **开源**:[instant-ngp](https://github.com/NVIDIA/instant-ngp) ### 核心突破 - **多分辨率哈希编码**:替代位置编码,加速1000倍+ - **训练时间**:从数小时缩短到数秒/数分钟 - **实时渲染**:可达到60fps+ - **CUDA优化**:充分利用GPU并行能力 ### 技术特点 | 特性 | 原始NeRF | Instant-NGP | |-----|---------|-------------| | 训练时间 | 数小时 | 数秒/分钟 | | 编码方式 | 位置编码 | 哈希网格 | | 渲染速度 | 慢 | 实时 | | 显存需求 | 高 | 低 | --- ## Mip-NeRF / Mip-NeRF 360(2022) ### 论文信息 - **标题**:Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields - **会议**:ICLR 2023 - **作者**:Jonathan Barron(Google Research)等 - **开源**:[mip-nerf](https://github.com/google-research/mip-nerf) ### 核心创新 - **多尺度表示**:解决抗锯齿问题 - **锥体采样**:替代点采样,更高效 - **360度场景优化**:Mip-NeRF 360专门用于大场景 ### Mip-NeRF 360特点 - 支持无边界360度场景 - 更好的外观和几何分离 - 线性采样复杂度(与场景大小无关) --- ## Semantic-NeRF(语义分割) ### GitHub仓库 - **链接**:[Harry-Zhi/semantic_nerf](https://github.com/Harry-Zhi/semantic_nerf) - **论文**:Semantic-NeRF(ICCV 2021) ### 核心思想 在原始NeRF基础上增加语义分割分支: - **RGB分支**:预测颜色和密度(新视角合成) - **语义分支**:预测语义类别概率(语义分割) ### 双任务学习架构 ``` 输入:3D坐标 + 观察方向 ↓ [MLP共享层] ↓ ├─→ RGB分支 → (颜色, 密度) └─→ 语义分支 → 语义类别概率 ``` ### 应用能力 #### 1. 稀疏标签密集化 - 只需标注40%的图像 - 自动生成其他视角的完整标签 - 大幅降低人工标注成本 #### 2. 标签去噪与修复 - 利用3D几何一致性纠正2D标签噪声 - 一个3D点在所有视角的语义应该一致 - 通过"共识"过滤随机噪声 #### 3. 标签传播 - 极端稀疏标注:只在某张图上点几个像素 - 利用3D几何传播到整个空间 - 为所有视角生成完整语义分割图 ### 代码使用示例 ```bash # 训练Semantic-NeRF python run.py --config configs/lego.yaml \ --sparse_views \ # 稀疏标签模式 --pixel_denoising \ # 像素去噪 --label_propagation # 标签传播 ``` ### 优势总结 | 优势 | 说明 | |-----|-----| | 高质量一致性 | 标签在时间和空间上完美一致 | | 高效自动化 | 大幅减少人工标注依赖 | | 灵活性 | 任意新视角都可生成标签 | --- ## NeuS(神经隐式曲面) ### GitHub仓库 - **链接**:[ApolloServer/NeuS](https://github.com/ApolloServer/NeuS) - **论文**:NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction(CVPR 2022) ### 核心特点 - 结合NeRF和Level Set - 重建高质量3D网格 - 比 marching cubes 更精细 ### 与NeRF对比 | 特性 | NeRF | NeuS | |-----|------|------| | 输出 | 体积密度+颜色 | 隐式曲面 | | 可导出网格 | 困难 | 容易 | | 几何质量 | 较模糊 | 高质量 | --- ## Gaussian Splatting相关 ### 3D Gaussian Splatting(2023) ### 论文信息 - **标题**:3D Gaussian Splatting for Real-Time Radiance Field Rendering - **会议**:SIGGRAPH 2023 - **开源**:[gaussian-splatting](https://github.com/graphdeco-innovations/gaussian-splatting) ### 核心创新 - **显式表示**:3D高斯椭球体集合 - **实时渲染**:60fps+训练和渲染 - **可微光栅化器**:端到端优化 ### 与NeRF对比 | 特性 | NeRF | 3DGS | |-----|------|------| | 表示 | 隐式(MLP) | 显式(高斯球) | | 训练时间 | 18小时 | 数分钟 | | 渲染速度 | 慢 | 实时 | | 可编辑性 | 困难 | 容易 | ### 代码结构 ``` gaussian-splatting/ ├── full_eval.py # 完整评估 ├── render.py # 交互式查看器 ├── train.py # 训练脚本 ├── lpipsPyTorch/ # 感知损失 ├── scene/ │ ├── gaussian_renderer.py │ └── dataset.py └── utils/ ├── gaussian_utils.py └── loss_utils.py ``` --- ## 其他重要开源项目 ### Kaolin(NVIDIA 3D库) - **链接**:[kaolin](https://github.com/NVIDIA/kaolin) - **特点**:PyTorch 3D库,集成多种3D方法 - **包含**:NeRF、3DGS、点云、网格等 ### NerfAcc(JAX实现) - **链接**:[nerfacc](https://github.com/nerfstudio-project/nerfacc) - **特点**:JAX加速,比PyTorch更快 - **优势**:自动微分、高效编译 ### Tiny-NeRF(轻量化) - **链接**:[tiny-nerf](https://github.com/bmild/nerf/tree/main/tiny_nerf) - **特点**:简化版NeRF,适合学习 - **代码量**:仅几百行 ### Nerfstudio(一体化框架) - **链接**:[nerfstudio](https://github.com/nerfstudio-project/nerfstudio) - **特点**:统一NeRF训练、评估、可视化 - **支持**:原始NeRF、Instant-NGP、3DGS等多种方法 --- ## 技术选型建议 ### 根据需求选择 | 需求 | 推荐方法 | 开源项目 | |-----|---------|---------| | 快速学习 | Tiny-NeRF | [tiny-nerf](https://github.com/bmild/nerf) | | 生产训练 | Instant-NGP | [instant-ngp](https://github.com/NVIDIA/instant-ngp) | | 语义分割 | Semantic-NeRF | [semantic_nerf](https://github.com/Harry-Zhi/semantic_nerf) | | 实时渲染 | 3D Gaussian Splatting | [gaussian-splatting](https://github.com/graphdeco-innovations/gaussian-splatting) | | 一体化开发 | Nerfstudio | [nerfstudio](https://github.com/nerfstudio-project/nerfstudio) | | 网格导出 | NeuS | [NeuS](https://github.com/ApolloServer/NeuS) | ### 使用建议 #### 初学者 1. 先运行Tiny-NeRF理解核心流程 2. 使用Nerfstudio进行实验 3. 阅读原始论文理解细节 #### 研究者 1. 实现自己改进的方法 2. 使用NerfAcc加速实验 3. 在标准数据集上对比 #### 工程应用 1. 使用Instant-NGP加速训练 2. 使用3DGS实现实时渲染 3. 根据场景选择合适方法
# 3D生成技术演进 ## 技术发展时间线 | 时期 | 技术突破 | 代表工作 | |:---|:---|:---| | 2020 | NeRF诞生 | ECCV 2020 "NeRF: Representing Scenes as Neural Radiance Fields" | | 2021-2022 | 优化加速 | Instant-NGP, Mip-NeRF | | 2023 | **3D Gaussian Splatting** | SIGGRAPH 2023 实时渲染革命 | | 2024-2025 | 混合方法+生成 | NeRF-GS联合优化, Text-to-3D | ## 3D Gaussian Splatting(3DGS) ### 核心创新 使用**显式的3D高斯椭球体**表示场景,而非NeRF的隐式神经网络。 ### 技术优势 | 特性 | NeRF | 3DGS | |:---|:---|:---| | **表示方式** | 隐式(连续函数) | 显式(3D高斯椭球体) | | **训练时间** | 18小时+ | 数分钟 | | **渲染速度** | 离线/慢速 | **实时(60fps+)** | | **可编辑性** | 困难 | 容易 | | **质量** | 高 | 更高分辨率和细节 | ### 为什么3DGS更快? 1. **显式表示**:每个高斯球是独立单元,可并行处理 2. **光栅化渲染**:利用GPU硬件加速 3. **无需网络推理**:渲染时不需要前向传播 ## Text-to-3D生成 ### 代表性方法 #### 1. TripoSR(Stability AI, 2024) - 单图→3D快速重建 - 开源可用,实时处理 - 基于LRM架构 #### 2. MeshLRM / MeshFormer(2024-2025) - 高质量网格生成 - 3D引导重建 - 细粒度纹理细节 #### 3. Turbo3D(CVPR 2025) - 超快速text-to-3D - 去噪扩散方法 - 结合图像生成模型优势 ### Text-to-3D流程 ``` 文本描述 → 图像生成模型(SD/DALL-E) → 3D重建 → 优化网格 ``` ## 混合方法趋势 ### NeRF-GS联合优化(ICCV 2025) - 结合NeRF的详细场景表示能力 - 利用3DGS的高效渲染优势 - 互补而非替代关系 ## 应用场景 ### 🎮 游戏与元宇宙 - 实时3D场景重建 - 虚拟环境构建 - 角色资产生成 ### 🏭 工业应用 - **数字孪生**:工厂、建筑的可视化 - **逆向工程**:从实物生成3D模型 - **质量检测**:产品缺陷识别 ### 🚗 自动驾驶 - 场景重建与理解 - 高精地图生成 - 仿真训练环境 ### 🎬 影视制作 - 虚拟拍摄(Virtual Production) - 场景扫描与建模 - 特效合成 ### 🛒 电子商务 - 商品3D展示 - AR试穿/试戴 - 沉浸式购物体验 ### 🏥 医疗健康 - 器官建模 - 手术规划 - 医学影像分析 ## 技术选型建议 ``` 需要实时交互? ├── 是 → 3D Gaussian Splatting └── 否 → NeRF(质量更高) 需要从文本生成3D? ├── 是 → TripoSR + 后处理优化 └── 否(有照片) → NeRF/3DGS重建 需要可编辑性? ├── 是 → 3D Gaussian Splatting └── 否 → NeRF ``` ## 未来发展方向 1. **实时化**:更快的训练和渲染速度 2. **轻量化**:移动端部署 3. **高质量**:更高分辨率和细节 4. **智能化**:Text-to-3D、Image-to-3D 5. **标准化**:统一的3D内容格式
多模态大模型
# ViT (Vision Transformer) ## 核心概念 - 将Transformer架构应用于图像处理 - 突破CNN在计算机视觉的统治地位 - 2020年由Google Research提出 ## 图像切分机制 输入图像经过切分处理: - 输入图像分辨率:$224 \times 224$ 像素 - 图像小块分辨率:$16 \times 16$ 像素 - 序列长度:$(224/16) \times (224/16) = 196$ - 每个元素维度:$16 \times 16 \times 3 = 768$ ## 注意力机制工作原理 编码器的每一层重复L次: 1. 对每个图像块进行上下文相关的特征编码 2. 捕获图像块之间丰富的空间关系 3. 整合整个图像的全局信息 ## 感受野演变 根据多头注意力权重计算信息整合的平均距离: | 网络深度 | 注意力特征 | 功能 | |---------|-----------|-----| | 浅层 | 部分头距离近 | 提取局部特征 | | 深层 | 头距离变大 | 学习高层语义 | - **浅层**:有的注意力头距离近(局部特征) - **深层**:多头距离变大(不再依赖邻近像素) ## 混合架构模型 结合CNN和Transformer优势: 1. 使用小型CNN作为特征提取器 - 提取边缘、纹理等局部特征 2. 将特征图输入Transformer - 处理全局依赖关系 - 理解物体位置、大小等 ## 优势 - 全局感受野 - 可扩展性强 - 与NLP架构统一
# CLIP (Contrastive Language-Image Pre-training) ## 核心概念 - 基于对比学习的语言-图像预训练模型 - 实现图像和文本特征在向量空间上的对齐 - OpenAI 2021年发布 ## 动机 解决迁移学习的局限性: - 传统方法需要少量任务特定样本微调 - CLIP实现零样本学习 - 利用自然语言作为监督信号 ## 双编码器架构 ### 图像编码器 - 可选:ResNet 或 ViT - 输出:图像特征向量 ### 文本编码器 - 架构:Transformer (GPT-2) - 输出:文本特征向量 ## 对比学习训练 ### 正负样本定义 - **正样本**:配对的"图像-文本"对 - **负样本**:其他所有组合 ### 对应矩阵 在$N \times N$对应矩阵上: - 对角线$N$个元素:正样本 - 非对角线$N^2 - N$个元素:负样本 ## 训练规模 - 数据集:4亿图像-文本对 (WIT) - 训练资源:256个V100 GPU + 12天 - 文本编码器:1.5B参数的GPT-2 ## Prompt Engineering ### 采用原因 - 解决一词多义问题 - 训练文本基本是句子形式 - 提供任务先验知识 ### 做法 - 集成多个prompt - 嵌入空间取平均 - ImageNet集成80个prompt,提升5%性能 ## 实验结果 ### 零样本学习 - 在27个数据集上与预训练+微调的ResNet对比 - 对物体分类问题表现优异 - 对纹理分类(DTD)、计数(CLEVR_COUNTS)等表现不佳 ### Few-shot学习 - 在20个数据集上进行few-shot实验 - 冻结图像特征提取器,微调全连接层 - 样本较少时,zero-shot优于微调 ### 表示学习 - 多个数据集上linear prob测试 - 展现强大的表示学习能力 - 具有稳健的泛化能力
# GPT-4V ## 核心特点 - OpenAI的GPT-4模型的视觉变体 - "V"代表"Vision"(视觉) - 增加处理和理解图像的能力 - 原生深度融合架构 ## 技术架构 - 视觉编码器与语言模型深度融合 - 支持图像输入和文本输入 - 统一的推理输出 ## 应用场景 - **图像描述生成**:详细描述图像内容 - **视觉问答 (VQA)**:回答与图像相关的问题 - **图像分析**:理解图像中的物体、场景、关系 - **OCR功能**:识别和提取文本 - **图表理解**:解析数据图表 - **多模态对话**:结合图像和文本的交互 ## 能力特点 1. 细粒度理解:识别图像中的细节 2. 上下文推理:结合图像和文本信息 3. 空间关系:理解物体间的位置关系 4. 知识连接:结合外部知识进行推理 ## 推理方式 - 图像首先通过视觉编码器处理 - 视觉特征与文本特征融合 - 通过Transformer模型进行推理 - 输出多模态响应 ## 与其他模型对比 | 能力 | GPT-4V | Gemini | Claude 3.5 Sonnet | |-----|--------|--------|-------------------| | 视觉理解 | 强 | 强 | 强 | | 空间推理 | 中等 | 强 | 中等 | | OCR能力 | 优秀 | 优秀 | 优秀 | | 图表理解 | 良好 | 强 | 良好 |
# Gemini ## 核心特点 - Google DeepMind开发的多模态大模型 - 首次发布:2023年12月 - 单架构支持多模态输入 - 目标:与OpenAI的GPT-4竞争 ## 模型版本系列 ### Gemini Nano - 轻量级版本 - 适合移动设备和边缘计算 - 低延迟推理 ### Gemini Pro - 主流版本 - 平衡性能与效率 - 适合大多数应用场景 ### Gemini Ultra - 最大规模版本 - 最强性能 - 适合复杂任务 ## 技术优势 ### 多模态能力 - 同时理解文本、图像、代码 - 支持音频和视频输入 - 端到端的多模态处理 ### 推理能力 - 在数学任务上表现强劲 - 科学推理能力强 - 代码理解能力突出 ### 架构特点 - 统一的Transformer处理多模态输入 - 不需要独立的编码器 - 原生支持跨模态理解 ## 与GPT-4V对比 ### Gemini优势 | 能力维度 | 说明 | |---------|-----| | 空间关系识别 | 在物体位置关系理解上表现优异 | | 物体计数 | 准确识别和计数图像中的物体 | | 多语言 | 更强的多语言支持 | | 视频理解 | 原生支持视频输入 | ### 应用场景 - 多模态对话 - 视频内容理解 - 科学图像分析 - 编程辅助(结合代码与图像) - 多语言跨模态理解
行业最新进展
# Stable Diffusion 最新发展 ## SD3 (Stable Diffusion 3) ### SD3 Medium (2024年6月) - 20亿参数的中型版本 - 单机可运行,降低使用门槛 - 在氛围渲染和图像质量方面显著提升 - 正式开源 ### 后续版本计划 - **SD3 4B**:40亿参数版本(计划开源) - **SD3 8B**:80亿参数版本(计划中) ## SDXL 系列 ### 当前地位 - 个性化生成方案的标杆 - 2025年仍保持重要地位 - ControlNet模型持续更新 ### SDXL ControlNet - 3款新模型上线 - 增强控制能力 - 支持更多生成模式 ### 持续发展原因 - 许可证优势 - 生成质量稳定 - 生态系统完善 ## Stable Diffusion Cascade ### 发布信息 - **发布时间**:2024年2月 - **架构特点**:ABC三段式生成 - **改进方向**:改进SDXL的两段式生成 ### 三段式生成 1. **A阶段**:初步生成 2. **B阶段**:细化增强 3. **C阶段**:最终优化 ## 社区生态 - ComfyUI:可视化节点编辑 - Automatic1111:主流WebUI - Civitai:模型分享平台 - 丰富的LoRA和Checkpoint模型 ## 技术特点 - 开源可商用 - 本地部署支持 - 灵活的模型组合 - 活跃的社区支持
# DALL-E 3 ## 核心特点 - 代表生成与文本完全一致的图像能力的重大突破 - 无需用户学习复杂的提示工程 - 现已无缝集成到ChatGPT中 ## 技术优势 ### 理解能力提升 - 在理解细微差别和细节方面显著提升 - 更精确地遵循详细指令 - 处理复杂提示能力强 ### 生成质量 - 高质量、连贯的输出 - 美学上令人印象深刻 - 文本渲染准确度高 ## ChatGPT集成 ### 使用方式 1. 在对话中描述想要的图像 2. DALL-E 3自动优化提示 3. 生成并展示图像 4. 可迭代修改和调整 ### 优势 - 自然语言交互 - 自动提示优化 - 与文本回答无缝结合 ## 评测表现 ### 评分对比 | 模型 | 评分 | |-----|-----| | GPT-4o | 1058分 | | Gemini 1.5 Pro | 1045分 | | DALL-E 3 | 1025分 | ### 评测维度 - 提示跟随能力 - 图像质量 - 文本渲染 - 复杂场景理解 ## 应用场景 - 营销图像生成 - 概念艺术设计 - 产品可视化 - 教育插图制作
# Midjourney ## 核心特点 - 优先考虑审美质量和风格一致性 - 常产出带有独特视觉特征的图像 - 在艺术和设计工作中颇受用户青睐 ## 与DALL-E 3的差异 | 特性 | Midjourney | DALL-E 3 | |-----|------------|----------| | 侧重点 | 艺术性和视觉效果 | 精确遵循文本指令 | | 提示工程 | 需要技巧 | 自动优化 | | 风格控制 | 强 | 中等 | | 文本渲染 | 较弱 | 强 | ## 使用特点 ### Discord平台 - 通过Discord机器人交互 - 社区分享和灵感获取 - 参数调整选项丰富 ### 版本演进 - V5/V6:当前主流版本 - 不断提升图像质量 - 增强自然语言理解 ## 艺术特色 - 独特的视觉风格 - 色彩运用大胆 - 构图富有创意 - 适合艺术创作 ## 适用场景 - 艺术创作 - 概念设计 - 插画制作 - 风格探索
# 2025年发展趋势 ## 技术演进方向 ### 分辨率提升 - 向更高分辨率发展 - 4K/8K图像生成成为可能 - 细节表现力增强 ### 控制能力增强 - ControlNet技术普及 - 精细控制生成过程 - 结构、姿势、风格可控 ### 多模态学习 - 深入发展 - 图文生成长视频 - 音频生成整合 ## 市场竞争格局 ### 新兴模型 | 模型 | 特点 | |-----|-----| | Flux.1 | 新一代扩散模型 | | DeepSeek Janus-Pro | 多模态能力强 | | 字节跳动模型 | 评测表现亮眼 | | 百度模型 | 中文场景优化 | ### 竞争态势 - 模型数量快速增长 - 性能差距缩小 - 专业化趋势明显 ## 应用场景拓展 ### 从语言到多模态 - 对话式图像生成 - 实时图像优化 - 多模态内容创作工具 ### 创作流程革新 - AI辅助设计成为主流 - 创作者角色转变 - 人机协作模式成熟 ### 行业应用深化 - 广告营销自动化 - 游戏资产生成 - 建筑/室内设计可视化 - 电商产品展示 ## 技术挑战 1. **版权与伦理**:生成内容的法律地位 2. **计算成本**:降低推理和训练成本 3. **质量控制**:确保输出符合预期 4. **个性化**:适应不同用户偏好
参考
    深入浅出完整解析Stable Diffusion 3(SD 3)和FLUX.1系列
    DALL·E 3 - OpenAI
    多模态大模型技术演进与工程实践:从GPT-4V到Gemini 2.5 Pro
    多模態AI完全指南:視覺語言模型的企業應用實戰
    CLIP对比学习语言-图像预训练模型
    深度生成模型解析:VAE、GAN、AR、Flow与Diffusion