马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、前言
本篇文章,我们将讲这些年非常盛行的文生图大模子——Stable Diffusion。该模子也不难,乃至说很简单。创新点也相对较少,假如你学会了我从前的文章讲过的模子,学习这个也自然水到渠成!
视频:[Stable diffusion天生大模子——隐扩散模子原理分析-哔哩哔哩]
演示:
2、Stable Diffusion
2.1、隐空间扩散
在传统的扩散模子中,都是一上来就对图像就行加噪去噪。这种做法有一些难以克制的题目——服从。一方面,图像的像素假如非常大,那么盘算量将是不可思议地;另一方面,我们在VAE那里说到过,图像之中,总是存在一些冗余地部门。我们直接拿图像去扩散,相称于也把那些冗余的部门也一起盘算了。
以是,作者选择先把图像编码成一个维度相对较小的编码向量(或特性图)。然后再训练扩散模子
那么,该怎样举行编码呢?答案就是利用VAE(具体请看VAE变分自编码器原理)。总所周知,利用VAE可以把图像编码成维度相对较小的向量(或特性图)
除此之外,就是利用离散化的编码器——VQGAN(具体请看VQGAN原理分析)
这两种方法,都可以举行图像的压缩。压缩完成之后,在举行扩散过程
此中编码器对应图中的 E \mathcal{E} E,解码器对应 D \mathcal{D} D。也就是说,先把图像x通过 E \mathcal{E} E举行编码,再举行Diffusion Process
2.2、条件天生
假如你用过Stable Diffusion。就肯定知道它可以举行条件天生。那么该怎样把条件引入Diffusion内里呢?在Diffusion系列内里,我着实从没有讲过怎样举行条件天生。
着实举行条件天生有一个很简单的明白方式。那就是直接接纳下面的丧失函数
L = ∣ ∣ ϵ − ϵ θ ( x t , t , y ) ∣ ∣ 2 (1) L=||\epsilon-\epsilon_\theta(x_t,t,y)||^2\tag{1} L=∣∣ϵ−ϵθ(xt,t,y)∣∣2(1)
为什么可以如许?我们回想一下DDPM内里的丧失函数
L = ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 (2) L=||\epsilon-\epsilon_\theta(x_t,t)||^2\tag{2} L=∣∣ϵ−ϵθ(xt,t)∣∣2(2)
区别在那里,那就是Eq.(1)内里神经网络的输入多加了一个条件y。这个条件y可以是标签,文本等等信息。
为什么多加了一个y就可以举行条件天生?
我们从一个比力简单的方面的来明白。在DDPM内里,我们层提到三种推测方式——均值、原始图像,噪声
我们终极只利用噪声而已。那假如我们推测的是原始图像呢?
L = ∣ ∣ x 0 − x θ ( x t , t ) ∣ ∣ 2 L=||x_0-x_\theta(x_t,t)||^2 L=∣∣x0−xθ(xt,t)∣∣2
假如我们到场一个条件y
L = ∣ ∣ x 0 − x θ ( x t , t , y ) ∣ ∣ 2 L=||x_0-x_\theta(x_t,t,y)||^2 L=∣∣x0−xθ(xt,t,y)∣∣2
到场的一个条件y(比如假设它是图像的种别标签),这就意味着什么呢?意味着我们告诉了神经网络图像 x 0 x_0 x0的种别是什么。那么让神经网络去推测 x 0 x_0 x0,肯定会相对轻易,由于神经网络已经知道了图像的种别,清除了其他种别图像的大概。
以是,对于推测噪声也是同理。那么Eq.(1)也是同理,到场一个条件y。更加有利于去噪。
2.3、丧失函数和网络结构
对于DIffusion的网络结构,着实我从来没说过。我只讲了用神经网络去推测噪声。对网络结构这些东西,我以后筹划出一个单独的系列来讲。
现在紧张讲模子原理。但为了完备性。我照旧简单讲一下吧。万一有些读者已经有这些方面的根本呢
那么网络的结构该怎样呢?在DDPM中,着实用的是U-Net结构的神经网络去推测噪声。在Stable Diffusion内里的,也相沿了这个结构。
我们前面说过,要给推测噪声的神经网络到场条件。但我们不是纯粹的把条件直接送进去。而是对条件举行编码表征之后再送进去。我们用 T θ ( y ) \mathcal{T}_\theta(y) Tθ(y)表现把条件编码成对应的中心表征。以是丧失函数酿成了如许
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]
此中, z t z_t zt是 E \mathcal{E} E编码得到图像加噪之后的效果。t代表时候。
除此之外,假如你看了上面那张图,就能看到有一个Q,K,V的东西。那着实自留意力机制。这玩意儿是Transformer内里的。本来属于自然语言处置惩罚那里的。我筹划以后分出一个系列讲自然语言处置惩罚。
在这里我简单讲一下,假如你会Transformer,应该不会陌生。假如不会,你听了估计也不会明白,我在这里不深入讲。讲到自然语言处置惩罚再讲
下面我们来简单过一下。对于内里的Q,K,V。盘算如下
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 ( z t ) \phi_i(z_t) ϕi(zt)是推测 ϵ θ \epsilon_\theta ϵθ的U-Net的中心表征。
那么,内里的 T θ \mathcal{T}_\theta Tθ究竟是什么呢?这要看具体环境,要根据具体特定范畴而选择。比如当y是文本时,我们可以利用Transformer,大概利用CLIP等等。要根据具体环境而定。
2.4、训练
对于Stable Diffusion的训练。DIffusion和编码解码部门,并不是并行训练。
而是先训练好一个编码器息争码器。然后在训练Diffusion。对于条件的编码,一样平常环境下也是要一个训练好的,而不是跟着Diffusion一起训练。
2.5、采样
很简单,从高斯分布中采样一个 z T z_T zT,然后设置条件。渐渐去噪。到了 z 0 z_0 z0之后,利用解码器,就可以得到图像
3、竣事
本篇文章到此竣事,如有题目,还望指出。阿里嘎多!
|