VAE in Stable Diffusion模型结构
时间: 2025-05-17 17:45:37 浏览: 13
### Stable Diffusion 中 VAE 的模型结构详解
#### 1. Variational Autoencoder (VAE) 基本概念
Variational Autoencoder 是一种生成模型,广泛应用于数据压缩和特征提取领域。在 Stable Diffusion 中,VAE 被用来将输入图像编码成低维潜在空间表示,并能够从该潜在空间重建高质量的图像[^1]。
#### 2. Stable Diffusion 中 VAE 的作用
在 Stable Diffusion 架构中,VAE 主要承担两项任务:
- **图像编码**:将高分辨率的输入图像转换为紧凑的潜在向量表示。
- **图像解码**:从潜在向量重新生成原始图像或类似的合成图像。
这种设计使得扩散过程可以在较低维度的空间运行,从而显著提高计算效率并减少内存占用[^3]。
#### 3. VAE 的核心组件
Stable Diffusion 使用的 VAE 结构主要包括以下几个关键部分:
##### 3.1 Encoder(编码器)
Encoder 将输入图像映射到一个分布参数化的隐变量空间。具体来说,它会输出均值 \( \mu \) 和方差 \( \sigma \),用于定义潜在空间中的正态分布。这一过程通常涉及卷积神经网络(CNN),并通过 ResNetBlock 提升性能。
```python
class Encoder(nn.Module):
def __init__(self, input_channels=3, latent_dim=4):
super(Encoder, self).__init__()
self.conv_layers = nn.Sequential(
nn.Conv2d(input_channels, 128, kernel_size=3, stride=2),
ResNetBlock(128, 256), # 自定义残差块
nn.Conv2d(256, latent_dim * 2, kernel_size=3, padding=1)
)
def forward(self, x):
h = self.conv_layers(x)
mu, logvar = torch.chunk(h, chunks=2, dim=1)
return mu, logvar
```
##### 3.2 Decoder(解码器)
Decoder 则负责将潜在空间中的向量还原回原始图像尺寸。为了实现这一点,Decoder 运用了反卷积操作以及 Self-Attention 模块来捕捉全局依赖关系。
```python
class Decoder(nn.Module):
def __init__(self, latent_dim=4, output_channels=3):
super(Decoder, self).__init__()
self.deconv_layers = nn.Sequential(
nn.ConvTranspose2d(latent_dim, 256, kernel_size=3, stride=2),
ResNetBlock(256, 128),
SelfAttention(), # 添加自注意力机制
nn.ConvTranspose2d(128, output_channels, kernel_size=3, padding=1)
)
def forward(self, z):
recon_x = self.deconv_layers(z)
return recon_x
```
##### 3.3 ReLU Activation & Batch Normalization
在整个 VAE 实现过程中,ReLU 激活函数被频繁使用以引入非线性特性;而批量归一化则有助于稳定训练过程,加速收敛速度[^2]。
#### 4. 训练目标
VAE 的损失函数由两部分组成:重构误差项(通常是像素级 MSE 或 BCE)以及 KL 散度约束项。前者衡量了重建质量的好坏程度,后者控制着潜在空间分布接近标准正态分布的程度。
\[
L_{vae} = L_{reconstruction} + \beta \cdot D_{KL}(q_\phi(z|x)\ ||\ p(z))
\]
其中 \( \beta \) 参数可以调节两者之间的权衡比例,在某些变体中甚至允许调整至更高数值形成 Beta-VAE。
---
###
阅读全文
相关推荐


















