|
# 潜在空间:理解生成模型的基石
## 什么是潜在空间?
潜在空间(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(文生视频) |
|
|
# 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