当前位置:AIGC资讯 > AIGC > 正文

Datawhale X 魔搭 AI夏令营第四期 魔搭-AIGC方向 task01笔记

赛题内容

参赛者需在可图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)。

Transformer 是如何工作的:600 行 Python 代码实现 self-attention 和两类 Transformer(2019) GPT 是如何工作的:200 行 Python 代码实现一个极简 GPT(2023)

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 和其他领域都引发了广泛的关注和讨论。 不过热度还没持续太久,风头就被另一个方向抢走了。

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]。

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 的输出有两个目的:

最终 embedding token 用作 ϵθ(xt,t∣y)ϵθ(xt,t∣y) 中的 class embedding yy, final layer of token embeddings 添加到模型的每个 attention layer 中。

很明显,为了生成图像的准确性,大量精力放在了确保模型获得足够的与文本相关的上下文(text-related context)。 根据 text snippet embedding,模型将编码的文本与 attention 上下文拼接(concatenate),并在训练期间使用无分类器引导。

最后,使用扩散模型,通过一个 ImageNet upsampler 将图像从低分辨率转成高分辨率。

3.3 小结

Fig. GLIDE 效果。提示词 "a corgi in a field"(田野里一只柯基) [6]

GLIDE 融合了近年的几项技术精华,为文本引导图像生成带来了新的启示。 考虑到 DALL·E 模型是基于不同结构(非扩散)构建的,因此,可以说 GLIDE 开启了扩散式文生图时代。

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, 通过以下几个输入进行训练:

已编码的文本(encoded text) CLIP text embedding embedding for the diffusion timestep 加噪的 image embedding

目标是输出一个无噪的 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]

总结

更新时间 2024-09-09