Stable Diffusion 超具体讲授
Stable Diffusion 超具体讲授这篇文章是 《Stable Diffusion原理详解》的后续,在《Stable Diffusion原理详解》中我更多的是以全局视角讲授了 Stable Diffusion 的原理和工作流程,并未深入步调细节。本文将在《Stable Diffusion原理详解》和《Diffusion Model 深入分析》这两篇文章的底子上,进一步过细地讲授 Stable Diffusion 的算法原理。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvODEzZjllNGQxNmUyZDU4MmNhYmFiY2ViY2I0NGYyYjUucG5nI3BpY19jZW50ZXI=
Diffusion Model
Stable Diffusion 脱胎于 Diffusion 模子。因此在搞懂 Stable Diffusion 之前,先搞懂 Diffusion Model 模子非常有须要。这一部分我会带各人大抵过一遍 Diffusion Model。如果你想相识 Diffusion Model 的全部细节,可以阅读我之前的文章:《Diffusion Model 深入分析》。
Diffusion Model 概览
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvODY1M2VjZGQ4ODM5ZTE4ODU2M2Y1MDQ0NTI1NzFjZmIucG5nI3BpY19jZW50ZXI=
图1. 扩散模子原理概要 Diffusion Model的练习可以分为两部分:
[*]正向扩散过程 → 为图像添加噪声。
[*]反向扩散过程 → 去除图像中的噪声。
正向扩散过程
正向扩散过程将高斯噪声徐徐添加到输入图像中。我们使用以下闭合公式(推导过程详见《Diffusion Model 深入分析》)更快地完成噪声添加,从而直接得到特定时间步长 t t t 的噪声图像:
x t = α t ˉ x 0 + 1 − α ˉ t ε x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon xt=αtˉ x0+1−αˉt ε
逆向扩散过程
由于逆向扩散过程不可直接盘算(盘算代价太高),我们通过练习神经网络 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt−1∣xt) 来近似。
练习目标(丧失函数)如下:
L simple = E t , x 0 , ε [ ∣ ∣ ε t − ε θ ( x t , t ) ∣ ∣ 2 ] x t = α t ˉ x 0 + 1 − α ˉ t ε L_{\text{simple}} = \mathbb{E}_{t,x_0,\varepsilon}\Big[||\varepsilon_t-\varepsilon_\theta(x_t,t)||^2\Big]\\ x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon Lsimple=Et,x0,ε[∣∣εt−εθ(xt,t)∣∣2]xt=αtˉ x0+1−αˉt ε
练习
每一轮练习过程如下:
[*]为每个练习样本(图像)选择一个随机时间步长 t t t。
[*]将高斯噪声(对应于 t t t)应用于每个图像。
[*]将时间步长转换为嵌入(向量)。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNWU4NDlkOTBmYjUxMDk1OWE5NTFmMjZiNjk5MWI4ZGYucG5nI3BpY19jZW50ZXI=
图2. 练习数据集 下面具体表明一下练习步调是怎样工作的:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNzMyMzE4ZmZiZWY1NmVlOTg2M2RhYTAwNWQ0YTgyMWYucG5nI3BpY19jZW50ZXI=
图3. 练习步调图解 采样
采样意味着从高斯噪声图中绘制出图像。下图展示了我们怎样使用颠末练习的 U-Net 天生图像:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYzAyYzZhZmExYjVmMWI5YmJmMDNlYmJiMGRlNTU0Y2IucG5nI3BpY19jZW50ZXI=
图4. 采样过程图解 扩散速率标题
如你所见,扩散(采样)过程迭代地将全尺寸图像提供给 U-Net 来得到终极效果。当总扩散步数 T T T 和图像很大时,这种纯扩散模子会非常慢。
为相识决这个标题,Stable Diffusion 应运而生。
Stable Diffusion
Stable Diffusion 一开始的名称是“潜伏扩散模子”(Latent Diffusion Model)。顾名思义,Stable Diffusion 发生在潜伏空间中。这就是它比纯扩散模子更快的缘故起因。
潜伏空间
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvM2IyZTU2NTU1ODAyMmExYzEzMTliZDBiYjMxZTk5MjAucG5nI3BpY19jZW50ZXI=
图5. 潜伏空间 我们起首练习一个自动编码器来学习怎样将图像数据压缩成低维体现。
[*]通过使用颠末练习的编码器 E E E,我们可以将全尺寸图像编码为低维潜伏数据(压缩数据)。
[*]通过使用颠末练习的解码器 D D D,我们可以将潜伏数据解码回图像。
Latent Diffusion
将图像编码为潜伏数据后,将在潜伏空间中举行正向和反向扩散过程。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvOWMwYTYyYTJiNWM1MjBiNWQ4YzAyMzE1YTc3NzRiN2QucG5nI3BpY19jZW50ZXI=
图6. Stable Diffusion 模子概述
[*]正向扩散过程 → 向潜伏数据添加噪声。
[*]逆向扩散过程 → 从潜伏数据中去除噪声。
调治机制
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZTBmOTU4MmM1ZjBhYWE1ODMwNzIzMjI4NGQ1YTMwN2EucG5nI3BpY19jZW50ZXI=
图7. 调治机制概述 Stable Diffusion 真正强盛之处在于它可以根据文本提示天生图像。这是通过担当调治输入修改内部扩散模子来实现的。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZGVkNjNlZTkwMmRmYjE2ZWI3NzU4ZTZhMGM4OGIwZjUucG5nI3BpY19jZW50ZXI=
图8. 调治机制细节 通过使用交织注意机制加强其去噪 U-Net,将内部扩散模子厘革为条件图像天生器。
上图中的开关用于在差别范例的调治输入之间举行控制:
[*]对于文本输入,起首使用语言模子 τ θ \tau_\theta τθ(比方 BERT、CLIP)将文本转换为嵌入(向量),然后通过(多头)注意力 A t t e n t i o n ( Q , K , V ) Attention(Q, K, V) Attention(Q,K,V) 映射到 U-Net 层。
[*]对于其他空间对齐的输入(比方语义映射、图像、修复),可以使用毗连来完成调治。
练习
Stable Diffusion 的练习目标(丧失函数)与纯扩散模子中的目标非常相似。 唯一的厘革是:
[*]输入潜伏数据 z t z_t zt 而不是图像 x t x_t xt。
[*]向 U-Net 添加了条件输入 τ θ ( y ) \tau_\theta(y) τθ(y)。
以是 Stable Diffusion 的丧失函数是如许的:
L L D T = E t , z 0 , ε , y [ ∥ ε − ε θ ( z t , t , τ θ ( y ) ) ∥ 2 ] L_{LDT} = \mathbb{E}_{t,z_0,\varepsilon,y}\Big[\Vert \varepsilon-\varepsilon_\theta\big(z_t,t,\tau_\theta(y)\big)\Vert^2\Big] LLDT=Et,z0,ε,y[∥ε−εθ(zt,t,τθ(y))∥2]
此中 z t = α ˉ t z 0 + 1 − α ˉ t ε z_t = \sqrt{\bar\alpha_t}z_0 + \sqrt{1-\bar\alpha_t}\varepsilon zt=αˉt z0+1−αˉt ε, z 0 = E ( x 0 ) z_0 = E(x_0) z0=E(x0) ; τ θ ( y ) \tau_\theta(y) τθ(y) 是输入调治。
采样
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMGMyYTZhZGYwNjc5ZjkyMzllNzEyOTUzZjk1MzBmOWMucG5nI3BpY19jZW50ZXI=
图9. Stable Diffusion 采样过程(去噪) 由于潜伏数据的巨细比原始图像小得多,因此去噪过程会快得多。
架构对比
末了,让我们比力一下纯扩散模子和 Stable Diffusion(潜伏扩散模子)的团体架构。
纯扩散模子
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYmYwYWJjNjhkZjkzMDA5YmY2Y2Q3M2UyYzQ1MmY2MWIucG5nI3BpY19jZW50ZXI=
图10. 纯扩散模子架构 Stable Diffusion (潜伏扩散模子)
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYWExNjlhYTJmZGNjMDM5MThhYjNmOGY5NzM1NjNkNjAucG5nI3BpY19jZW50ZXI=
图11. Stable Diffusion 架构 总结
[*]Stable Diffusion(潜伏扩散模子)在潜伏空间中举行扩散过程,因此它比纯扩散模子快得多。
[*]扩散模子核心被修改为担当条件输入,如文本、图像、语义图等。
页:
[1]