Stable diffusion文生图大模型——隐扩散模型原理解析
Stable diffusion文生图大模型——隐扩散模型原理解析
1、前言
本文将介绍近年来非常流行的文生图大模型——Stable Diffusion。该模型并不复杂,其原理建立在之前介绍过的扩散模型和变分自编码器(VAE)的基础上。通过学习本文,读者可以更好地理解Stable Diffusion的工作原理。
演示:
2、Stable Diffusion
2.1、隐空间扩散
在传统的扩散模型中,通常直接对图像进行加噪和去噪处理。然而,这种做法存在一些不可避免的问题,主要是效率问题。一方面,高分辨率图像的计算量巨大;另一方面,图像中存在大量冗余信息,直接对图像进行扩散计算会浪费资源。
为了解决这些问题,Stable Diffusion采用了一种创新的方法:先将图像编码成一个维度相对较小的编码向量或特征图,然后再训练扩散模型。
具体来说,有两种主要的编码方法:
- 使用VAE(变分自编码器)将图像编码成维度相对较小的向量或特征图。
- 使用离散化的编码器VQGAN进行图像压缩。
这两种方法都可以有效地压缩图像信息,然后再进行扩散过程。
上图中,编码器对应E,解码器对应D。首先将图像x通过编码器E进行编码,然后再进行扩散过程。
2.2、条件生成
Stable Diffusion的一个重要特性是支持条件生成。那么,如何将条件引入扩散模型中呢?其实方法很简单,就是在损失函数中加入条件变量y。
传统的DDPM损失函数为:
L = ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 (2) L=||\epsilon-\epsilon_\theta(x_t,t)||^2\tag{2}L=∣∣ϵ−ϵθ (xt ,t)∣∣2(2)
而条件生成的损失函数为:
L = ∣ ∣ ϵ − ϵ θ ( x t , t , y ) ∣ ∣ 2 (1) L=||\epsilon-\epsilon_\theta(x_t,t,y)||^2\tag{1}L=∣∣ϵ−ϵθ (xt ,t,y)∣∣2(1)
加入条件y后,神经网络在预测时会考虑额外的信息,比如图像的类别标签,这有助于提高预测的准确性。
2.3、损失函数和网络结构
在Stable Diffusion中,采用U-Net结构的神经网络来预测噪声。为了更好地处理条件信息,需要对条件进行编码表征后再送入网络。具体来说,损失函数可以表示为:
L L D M = E E ( x ) , ϵ ∼ N ( 0 , 1 ) , t [ ∣ ∣ ϵ − ϵ θ ( z t , t , T θ ( y ) ∣ ∣ 2 ] L_{LDM}=\mathbb{E}{{\mathcal{E}(x)},\epsilon\sim \mathcal{N}(0,1),t}\left[||\epsilon-\epsilon\theta(z_t,t,\mathcal{T}_\theta(y)||^2\right]LLDM =EE(x),ϵ∼N(0,1),t [∣∣ϵ−ϵθ (zt ,t,Tθ (y)∣∣2]
其中,zt是编码器E编码得到的图像加噪结果,t代表时间步。
此外,模型中还使用了Transformer中的自注意力机制,具体计算如下:
Q = W Q ( i ) ⋅ ϕ i ( z t ) , K = W k ( i ) ⋅ T θ ( y ) , V = W V ( i ) ⋅ T θ ( y ) Q=W^{(i)}Q\cdot\phi_i(z_t),K=W_k^{(i)}\cdot \mathcal{T}\theta(y),V=W_V^{(i)}\cdot\mathcal{T_{\theta}}(y)Q=WQ(i) ⋅ϕi (zt ),K=Wk(i) ⋅Tθ (y),V=WV(i) ⋅Tθ (y)
其中,ϕi(zt)是U-Net的中间表征。Tθ的具体实现取决于应用场景,例如当条件是文本时,可以使用Transformer或CLIP等模型。
2.4、训练
Stable Diffusion的训练过程分为几个阶段:
- 首先训练编码器和解码器。
- 然后训练扩散模型。
- 条件编码器通常也需要预先训练,而不是与扩散模型一起训练。
2.5、采样
采样过程相对简单:
- 从高斯分布中采样一个初始噪声zt。
- 设置所需的条件。
- 逐步去噪,直到得到最终的zt。
- 使用解码器将zt转换回图像。
3、结束
本文详细介绍了Stable Diffusion的工作原理,包括隐空间扩散、条件生成、损失函数和网络结构、训练和采样等方面。希望本文能帮助读者更好地理解这一流行的大模型。如果读者有任何问题或建议,欢迎随时指出。