赛题内容
参赛者需在可图Kolors 模型的基础上训练LoRA 模型,生成无限风格,如水墨画风格、水彩风格、赛博朋克风格、日漫风格......
基于LoRA模型生成 8 张图片组成连贯故事,故事内容可自定义;基于8图故事,评估LoRA风格的美感度及连贯性
目录
赛题内容
1 OpenAI DALL·E:起于文本,潜入图像,2021.01
1.1 GPT-3 (2020):基于 transformer 架构的多模态大语言模型
1.2 DALL·E (2021.01):transformer 架构扩展到计算机视觉领域
1.3 量化“文本-图像”匹配程度:CLIP 模型
1.4 小结
2 Diffusion:高斯去噪,扩散称王,2021.12
2.1 几种图像生成模型:GAN/VAE/Flow-based/Diffusion
2.2 正向图像扩散(forward image diffusion)
2.2.1 基本原理
2.2.2 数学描述
2.3 反向图像扩散(reverse image diffusion)
2.3.1 基本原理
2.3.2 数学表示
2.4 引导扩散(guiding the diffusion)
3 GLIDE:文本引导,定向扩散,2022.04
3.1 架构
3.2 工作原理
3.3 小结
4 DALL·E 2:取长补短,先验称奇,2022.04
4.1 架构:unCLIP = prior + decoder
4.2 The prior
4.2.1 为什么需要 prior 层(为什么单单 CLIP 不够)
4.2.2 prior 选型:decoder-only transformer
4.2.3 损失函数
4.2.4 小结
4.2 The decoder:基于 GLIDE 的改进
4.3 引导扩散和上采样
5 Google Imagen:删繁就简,扩散三连,2022.05
5.1 架构:T5-XXL + Diffusion + Diffusion + Diffusion
5.2 与 GLIDE、DALL·E 2 等架构的不同
5.2.1 使用预训练的 transformer (T5-XXL) 而不是从头开始训练
5.2.2 使用更高效的底层神经网络(efficient U-net)
5.2.3 使用 conditioning augmentation 来增强图像保真度(image fidelity)
5.3 小结
1 OpenAI DALL·E
:起于文本,潜入图像,2021.01
1.1 GPT-3
(2020):基于 transformer 架构的多模态大语言模型
2020 年,OpenAI 发布了 GPT-3 模型 [1],这是一个基于 Transformer
架构的多模态大语言模型,能够完成机器翻译、文本生成、语义分析等任务, 也迅速被视为最先进的语言建模方案(language modeling solutions)。
1.2 DALL·E
(2021.01):transformer 架构扩展到计算机视觉领域
DALL·E [7] 可以看作是将 Transformer(语言领域)的能力自然扩展到计算机视觉领域。
如何根据提示文本生成图片?DALL·E 提出了一种两阶段算法:
训练一个离散 VAE (Variational AutoEncoder) 模型,将图像(images)压缩成 image tokens。
VAE 是一种神经网络架构,属于 probabilistic graphical models and variational Bayesian methods 家族。
将编码之后的文本片段(encoded text snippet)与 image tokens 拼在一起(concatenate
), 训练一个自回归 Transformer,学习文本和图像之间的联合分布。
最终是在从网上获取的 250 million 个文本-图像对(text-image pairs)上进行训练的。
1.3 量化“文本-图像”匹配程度:CLIP
模型
训练得到模型之后,就能通过推理生成图像。但如何评估生成图像的好坏呢?
OpenAI 提出了一种名为 CLIP 的 image and text linking
方案 [9], 它能量化文本片段(text snippet)与其图像表示(image representation)的匹配程度。
抛开所有技术细节,训练这类模型的思路很简单:
将文本片段进行编码,得到 TiTi; 将图像进行编码,得到 IiIi;对 400 million 个 (image, text)
进行这样的操作,
F.g CLIP contrastive pre-training 工作原理 [9]. (文本大意:澳大利亚小狗)。
基于这种映射方式,就能够评估生成的图像符合文本输入的程度。
1.4 小结
DALL·E 在 AI 和其他领域都引发了广泛的关注和讨论。 不过热度还没持续太久,风头就被另一个方向抢走了。
2 Diffusion
:高斯去噪,扩散称王,2021.12
Sohl-Dickstein 等提出了一种图像生成的新思想 —— 扩散模型(diffusion models) [2]。 套用 AI 领域的熟悉句式,就是
All you need is diffusion
.
2.1 几种图像生成模型:GAN/VAE/Flow-based/Diffusion
Fig. 几种生成式模型(generative models)[13]
Diffusion 模型受到了非平衡热力学(non-equilibrium thermodynamics)的启发,但其背后是一些有趣的数学概念。 它仍然有大家已经熟悉的 encoder-decoder 结构,但底层思想与传统的 VAE(variational autoencoders)已经不同。
要理解这个模型,需要从原理和数学上描述正向和反向扩散过程。
公式看不懂可忽略,仅靠本文这点篇幅也是不可能推导清楚的。感兴趣可移步 [13-15]。
2.2 正向图像扩散(forward image diffusion)
2.2.1 基本原理
向图像逐渐添加高斯噪声,直到图像完全无法识别。
这个过程可以被形式化为顺序扩散马尔可夫链(Markov chain of sequential diffusion steps)。
2.2.2 数学描述
假设图像服从某种初始分布 q(x0)q(x0), 那么,我们可以对这个分布采样,得到一个图像 x0x0, 接下来,我们希望执行一系列的扩散步骤,x0→x1→...→xTx0→x1→...→xT,每次扩散都使图像越来越模糊。 如何添加噪声?由一个noising schedule
(加噪计划/调度) {βt}Tt=1{βt}t=1T 定义, 对于每个 t=1,...,Tt=1,...,T,有 βt∈(0,1)βt∈(0,1)。
基于以上定义,我们就可以将正向扩散过程描述为
q(xt∣xt−1)=N(√1−βtxt−1,βtI).q(xt∣xt−1)=N(1−βtxt−1,βtI).
注,
NN 可能来自 next 首字母,表示下一个状态的概率分布(马尔科夫状态转移概率);几点解释:
随着加噪次数的增多 (T→∞)(T→∞),最终分布 q(xT)q(xT) 将趋近于常见的各向同性高斯分布(isotropic Gaussian distribution),这使得未来的采样非常简单和高效。使用高斯核加噪还有一个好处 —— 可以绕过中间加噪步骤,直接得到任意中间状态(intermediate latent state), 这要归功于 reparametrization。直接采样,
q(xt∣x0)=N(√¯αtx0,(1−¯αt)I)=√¯αtx0+√1−¯αt⋅ϵ,q(xt∣x0)=N(α¯tx0,(1−α¯t)I)=α¯tx0+1−α¯t⋅ϵ,其中 αt:=1−βtαt:=1−βt,¯αt:=∏tk=0αkα¯t:=∏k=0tαk,ϵ∼N(0,I)ϵ∼N(0,I)。 这里的 ϵϵ 表示高斯噪声 —— 这个公式对于模型训练至关重要。
2.3 反向图像扩散(reverse image diffusion)
2.3.1 基本原理
正向过程定义好了,是否能定义一个反向过程 q(xt−1∣xt)q(xt−1∣xt), 从噪声回溯到图像呢?
Fig. The Markov chain of forward (reverse) diffusion process of generating a sample by slowly adding (removing) noise [13]
首先,从概念上来说,是不行的;
其次,这需要 marginalization over the entire data distribution。 要从加噪样本返回到起始分布 q(x0)q(x0),必须对所有可能从噪声中得到 x0x0 的方式进行 marginalization,包括所有中间状态。 这意味着计算积分 ∫q(x0:T)dx1:T∫q(x0:T)dx1:T,这是不可行的。
不过,虽然无法精确计算,但可以近似! 核心思想是以可学习网络(learnable network
)的形式, 近似反向扩散过程。
2.3.2 数学表示
Fig. An example of training a diffusion model for modeling a 2D swiss roll data. [2]
实现这一目标的第一步是估计去噪步骤的均值和协方差(mean and covariance):
pθ(xt−1∣xt)=N(μθ(xt,t),Σθ(xt,t)).pθ(xt−1∣xt)=N(μθ(xt,t),Σθ(xt,t)).
在实践中,
可以通过神经网络估计 μθ(xt,t)μθ(xt,t), Σθ(xt,t)Σθ(xt,t) 可以固定为与 noising schedule 相关的常数,例如 βtIβtI。用这种方式估计 μθ(xt,t)μθ(xt,t) 是可行的,但 Ho 等 [3] 提出了另一种训练方法: 训练一个神经网络 ϵθ(xt,t)ϵθ(xt,t) 来预测前面公式 q(xt∣x0)q(xt∣x0) 中的噪声 ϵϵ。
与 Ho 等的方法类似[3],训练过程包括以下步骤:
采样图像 x0∼q(x0)x0∼q(x0), 在扩散过程中选择特定的步骤 t∼U({1,2,...,T})t∼U({1,2,...,T}), 添加噪声 ϵ∼N(0,I)ϵ∼N(0,I), 估计噪声 ϵθ(xt,t)=ϵθ(√¯αtx0+√1−¯αt⋅ϵ,t)ϵθ(xt,t)=ϵθ(α¯tx0+1−α¯t⋅ϵ,t), 通过梯度下降学习网络上的损失 ∇θ∥ϵ−ϵθ(xt,t)∥2∇θ‖ϵ−ϵθ(xt,t)‖2。一般来说,损失可以表示为
Ldiffusion=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2],Ldiffusion=Et,x0,ϵ[‖ϵ−ϵθ(xt,t)‖2],
这里的公式、参数化和推导都没有详细展开,想深入了解推导过程,强烈推荐 [13-15]。
以上已经解释了为什么扩散模型也是一种生成模型。 一旦模型 ϵθ(xt,t)ϵθ(xt,t) 训练好,就可以用它从加躁的 xtxt 回溯到原始图像 x0x0。 由于从各向同性高斯分布中采样噪声非常简单,我们可以获得无限的图像变化。
2.4 引导扩散(guiding the diffusion)
如果在训练过程中向神经网络提供额外的信息,就可以引导图像的生成。 假设图像已经打标(labeled),关于图像的类别信息 yy 就可以送到 class-conditional diffusion model ϵθ(xt,t∣y)ϵθ(xt,t∣y) 中。
引入指导的一种方式是训练一个单独的模型,该模型作为噪声图像的分类器(classifier of noisy images)。
在每个去噪步骤中,分类器检查图像是否以正确的方向去噪,并将自己的损失函数梯度计入扩散模型的整体损失中。
Ho & Salimans 提出了一种无需训练额外分类器,就能将类别信息输入模型的方法 [5]。
训练过程中,模型 ϵθ(xt,t∣y)ϵθ(xt,t∣y) 有时(以固定概率)类别标签被替换为空标签 ∅∅,也就是不显示实际的类别 yy。 因此,它学会了在有和没有引导的情况下进行扩散。
对于推理,模型进行两次预测,一次给定类别标签 ϵθ(xt,t∣y)ϵθ(xt,t∣y),一次不给定 ϵθ(xt,t∣∅)ϵθ(xt,t∣∅)。 模型的最终预测变成乘以引导比例(guidance scale) s⩾1s⩾1,
^ϵθ(xt,t∣y)=ϵθ(xt,t∣∅)+s⋅(ϵθ(xt,t∣y)−ϵθ(xt,t∣∅))ϵ^θ(xt,t∣y)=ϵθ(xt,t∣∅)+s⋅(ϵθ(xt,t∣y)−ϵθ(xt,t∣∅))这种无分类器引导(classifier-free guidance)复用主模型的理解力,不需要额外的分类器,Nichol 等的研究显示这种方式效果更好 [6]。
3 GLIDE
:文本引导,定向扩散,2022.04
以上介绍了扩散模型的工作原理,现在要回答的两个问题是:
如何使用文本信息(textual information)来引导扩散模型? 如何确保模型的质量足够好?GLIDE 论文见提出了非常新颖和有趣的见解 [6]。
3.1 架构
三个主要组件:
一个基于UNet
的模型:负责扩散的视觉部分(visual part of the diffusion learning),
一个基于 Transformer
的模型:负责将文本片段转换成文本嵌入(creating a text embedding from a snippet of text),
一个 upsampling
扩散模型:增大输出图像的分辨率。
前两个组件生成一个文本引导的图像,最后一个组件用于扩大图像并保持质量。
3.2 工作原理
GLIDE 模型的核心是著名的 UNet 架构 [8],用于扩散。
串联几个下采样和上采样卷积的残差层。 还包括 attention 层,这对于同时进行文本处理至关重要。 模型有约2.3b
个参数,并在与 DALL·E 相同的数据集上进行了训练。
用于引导的文本(text used for guidance)编码为 token,并送入 transformer 模型。 GLIDE 中使用的 transformer 有约 1.2b
个参数, 由 24 个 2048-width 的残差块构建。transformer 的输出有两个目的:
很明显,为了生成图像的准确性,大量精力放在了确保模型获得足够的与文本相关的上下文(text-related context)。 根据 text snippet embedding,模型将编码的文本与 attention 上下文拼接(concatenate),并在训练期间使用无分类器引导。
最后,使用扩散模型,通过一个 ImageNet upsampler
将图像从低分辨率转成高分辨率。
3.3 小结
Fig. GLIDE 效果。提示词 "a corgi in a field"(田野里一只柯基) [6]
GLIDE 融合了近年的几项技术精华,为文本引导图像生成带来了新的启示。 考虑到 DALL·E 模型是基于不同结构(非扩散)构建的,因此,可以说 GLIDE 开启了扩散式文生图时代。
4 DALL·E 2
:取长补短,先验称奇,2022.04
OpenAI 团队马不停蹄,在 2022 年 4 月份以 DALL·E 2 [7] 再次震撼了整个互联网。 它组合了前面介绍的 CLIP 模型和 GLIDE 架构的精华。
Fig. Visualization of DALL·E 2 two-stage mechanism. [13]
4.1 架构:unCLIP = prior + decoder
两个主要基础组件(也是两个阶段),
prior decoder二者组合产生图像输出。整个机制名为 unCLIP
, 如果还记得前面介绍的 CLIP 机制,就能从 unCLIP
这个名字猜到底层可能是如何工作的。
4.2 The prior
第一阶段称为 prior
,作用是将标题 —— 例如 “a corgi playing a flame throwing trumpet” —— 从文本转换成文本嵌入(text embedding)。
这个通过一个冻结参数的 CLIP 模型实现的。
4.2.1 为什么需要 prior 层(为什么单单 CLIP 不够)
前面介绍过,CLIP 模型记录的 text embedding 和 image embedding 的联合分布。所以, 直觉上来说,有了一个经过良好训练的 CLIP 模型,只要经过下面简单三步就能完成文生图的任务:
将文本(提示词)转换成对应的 text embedding; 将 text embedding 输入 CLIP 模型,获取最佳的 image embedding; 用 image embedding 通过扩散生成图像。这里有问题吗?有,在第 2 步。DALL·E 2 的作者给了一个很好的解释:
“(在 CLIP 空间里)可能有无数的图像与给定的标题一致,因此两个编码器的输出不会完全一致。 因此,需要一个单独的 prior 模型来将 text embedding “翻译”为对应的 image embedding ”。
下面是对比:
Fig. 分别通过三种方式生成的图片:仅标题(caption)、标题+CLIP 和 prior-based。[7]
4.2.2 prior 选型:decoder-only transformer
作者对 prior 模型测试了两类模型:
自回归模型(autoregressive model) 扩散模型(diffusion model)本文只讨论第二种:扩散 prior 模型。因为从计算角度来看,它的性能优于自回归模型。
为了训练 prior 模型,选择一个 decoder-only Transformer
, 通过以下几个输入进行训练:
目标是输出一个无噪的 image embedding (unnoised image embedding)zizi。
4.2.3 损失函数
直接预测未加噪声的 image embedding 而不是预测噪声更合适,这与之前讨论的 Ho 等提出的训练方式不同。 因此,回顾前面引导模型中扩散损失的公式
Ldiffusion=Et,x0,ϵ[∥ϵ−ϵθ(xt,t∣y)∥2],Ldiffusion=Et,x0,ϵ[‖ϵ−ϵθ(xt,t∣y)‖2],
我们可以将 prior 扩散损失(the prior diffusion loss)表示为
Lprior:diffusion=Et[∥∥zi−fθ(zti,t∣y)∥∥2],Lprior:diffusion=Et[‖zi−fθ(zit,t∣y)‖2],
其中
fθfθ:prior 模型 ztizit:带噪图像的嵌入 tt:时间戳 yy:用于引导的标题。4.2.4 小结
以上就是 unCLIP 的前半部分,旨在生成一个能够将文本中的所有重要信息封装到 CLIP 样式的 image embedding 中的模型。 有了这个模型之后,就能根据用户输入的文本得到一个 image embedding。 而有了 image embedding,就能基于扩散模型反向(un-)生成最终的视觉输出 —— 这就是 unCLIP
名称的由来 —— 从 image embedding 回溯到图像,与训练 CLIP image encoder 的过程相反。
接下来看 DALL·E 2 中是如何实现这个反向过程的。
4.2 The decoder:基于 GLIDE 的改进
一个扩散模型的尽头是另一个扩散模型!(After one diffusion model it is time for another diffusion model!)。
在 DALL·E 2 中,“另一个扩散模型”就是前面已经介绍过的 GLIDE
。
对 GLIDE 做了点修改,将 prior 输出的 CLIP image embedding 添加到 vanilla GLIDE text encoder 中。 其实这正是 prior 的训练目标 - 为 decoder 提供信息。
4.3 引导扩散和上采样
引导方式与普通的 GLIDE 一样。为改进效果,10% 概率将 CLIP embedding 设置为 ∅∅,50% 概率设置文本标题 yy。
跟 GLIDE 一样,在图像生成之后,利用另一个扩散模型进行上采样。 这次用了两个上采样模型(而不是原始 GLIDE 中的一个),一个将图像从 64x64 增加到 256x256,另一个进一步提高分辨率到 1024x1024。
5 Google Imagen
:删繁就简,扩散三连,2022.05
DALL·E 2 发布不到两个月, Google Brain 团队也展示了自己的最新成果 - Imagen(Saharia 等 [7])。
5.1 架构:T5-XXL + Diffusion + Diffusion + Diffusion
Fig. Overview of Imagen architecture. [7]
Imagen 架构在结构上非常简单:
预训练的文本模型用于创建 embedding,然后用这些 embedding 扩散成图像; 通过超分辨率扩散模型增加分辨率。但架构中还是有一些新颖之处,比如模型本身和训练过程,总体来说还是先进一些。 这里只介绍下它与前面几个模型不同之处。
5.2 与 GLIDE、DALL·E 2 等架构的不同
5.2.1 使用预训练的 transformer (T5-XXL
) 而不是从头开始训练
与 OpenAI 的工作相比,这是核心区别。
对于 text embedding,
GLIDE 使用了一个新的、经过专门训练的 transformer 模型; Imagen 使用了一个预训练的、冻结的 T5-XXL 模型 [4]。这里的想法是,T5-XXL 模型在语言处理方面比仅在图像标题上训练的模型有更多的上下文, 因此能够在不需要额外微调的情况下产生更有价值的 embedding。
5.2.2 使用更高效的底层神经网络(efficient U-net)
使用了称为 Efficient U-net
的升级版神经网络, 作为超分辨率扩散模型的核心。
比之前的版本更节省内存,更简单,并且收敛速度更快。 主要来自残差块和网络内部值的额外缩放。细节详见 [7]。
5.2.3 使用 conditioning augmentation 来增强图像保真度(image fidelity)
Imagen 可以视为是一系列扩散模型,因此在模型连接处 (areas where the models are linked)可以进行增强。
Ho 等提出了一种称为条件增强(conditioning augmentation)的解决方案[10]。 简单来说就是在将低分辨率图像输入超分辨率模型之前对其 apply 多个 data augmentation 技术,如高斯模糊。 还有一些对于低 FID score 和高图像保真度至关重要的资源(例如 dynamic thresholding), 论文 [7] 中有详细解释。但这些方法的核心已经在前几节都涵盖了。5.3 小结
截至 2022.04,Google’s Imagen 是最好的 text-to-image generation 模型。
Fig. Imagen 根据提示词生成的一些图片。[7]
总结