大连密封材料 发表于 2024-9-5 09:29:12

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 模子 ,这是一个基于 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 可以看作是将 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 方案 , 它能量化文本片段(text snippet)与其图像表示(image representation)的匹配程度。
抛开全部技术细节,训练这类模子的思路很简单:

[*]将文本片段举行编码,得到 TiTi;
[*]将图像举行编码,得到 IiIi;
对 400 million 个 (image, text) 举行如许的操作,

https://img-blog.csdnimg.cn/img_convert/77fdd8f7f6c3e44eb2d0b0ffb9668140.png
F.g CLIP contrastive pre-training 工作原理 . (文本大意:澳大利亚小狗)。
基于这种映射方式,就可以或许评估生成的图像符合文本输入的程度。
1.4 小结

DALL·E 在 AI 和其他领域都引发了广泛的关注和讨论。 不外热度还没持续太久,风头就被另一个方向抢走了。
2 Diffusion:高斯去噪,扩散称王,2021.12

Sohl-Dickstein 等提出了一种图像生成的新思想 —— 扩散模子(diffusion models) 。 套用 AI 领域的熟悉句式,就是
   All you need is diffusion.
2.1 几种图像生成模子:GAN/VAE/Flow-based/Diffusion


https://img-blog.csdnimg.cn/img_convert/4557797b62f6a511ee50fdfd7e9e9f28.png
Fig. 几种生成式模子(generative models)
Diffusion 模子受到了非均衡热力学(non-equilibrium thermodynamics)的开导,但其背后是一些有趣的数学概念。 它仍旧有大家已经熟悉的 encoder-decoder 布局,但底层思想与传统的 VAE(variational autoencoders)已经差别。
要理解这个模子,必要从原理和数学上描述正向和反向扩散过程。
   公式看不懂可忽略,仅靠本文这点篇幅也是不可能推导清晰的。感兴趣可移步 。
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), 从噪声回溯到图像呢?

https://img-blog.csdnimg.cn/img_convert/09bf154643eb5002b392b86014350d82.png
Fig. The Markov chain of forward (reverse) diffusion process of generating a sample by slowly adding (removing) noise
首先,从概念上来说,是不行的;
其次,这必要 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 数学表示


https://img-blog.csdnimg.cn/img_convert/8d64a8c993112afdb00fa3dcf230b1ae.png
Fig. An example of training a diffusion model for modeling a 2D swiss roll data.
实现这一目的的第一步是估计去噪步骤的均值和协方差(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 等 提出了另一种训练方法: 训练一个神经网络 ϵθ(xt,t)ϵθ(xt,t) 来推测前面公式 q(xt∣x0)q(xt∣x0) 中的噪声 ϵϵ。
与 Ho 等的方法类似,训练过程包括以下步骤:

[*]采样图像 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],
这里的公式、参数化和推导都没有详细睁开,想深入相识推导过程,强烈推荐 。
以上已经表明了为什么扩散模子也是一种生成模子。 一旦模子 ϵθ(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 提出了一种无需训练额外分类器,就能将种别信息输入模子的方法 。
训练过程中,模子 ϵθ(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 等的研究表现这种方式效果更好 。
3 GLIDE:文本引导,定向扩散,2022.04

以上先容了扩散模子的工作原理,如今要答复的两个问题是:


[*]如何使用文本信息(textual information)来引导扩散模子?
[*]如何确保模子的质量充足好?
GLIDE 论文见提出了非常新颖和有趣的看法 。
3.1 架构

三个紧张组件:

[*]一个基于 UNet 的模子:负责扩散的视觉部门(visual part of the diffusion learning),
[*]一个基于 Transformer 的模子:负责将文本片段转换成文本嵌入(creating a text embedding from a snippet of text),
[*]一个 upsampling 扩散模子:增大输出图像的分辨率。
前两个组件生成一个文本引导的图像,末了一个组件用于扩大图像并保持质量。
3.2 工作原理

GLIDE 模子的核心是闻名的 UNet 架构 ,用于扩散。


[*]串联几个下采样和上采样卷积的残差层。
[*]还包括 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 小结


https://img-blog.csdnimg.cn/img_convert/09c039ae628785383aba17ded2713d74.png
Fig. GLIDE 效果。提示词 "a corgi in a field"(旷野里一只柯基)
GLIDE 融合了比年的几项技术精华,为文本引导图像生成带来了新的启示。 考虑到 DALL·E 模子是基于差别布局(非扩散)构建的,因此,可以说 GLIDE 开启了扩散式文生图时代。
4 DALL·E 2:取长补短,先验称奇,2022.04

OpenAI 团队快马加鞭,在 2022 年 4 月份以 DALL·E 2 再次震撼了整个互联网。 它组合了前面先容的 CLIP 模子和 GLIDE 架构的精华。

https://img-blog.csdnimg.cn/img_convert/7d96fc899023e9db688c445046227d6b.png
Fig. Visualization of DALL·E 2 two-stage mechanism.
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 ”。
下面是对比:

https://img-blog.csdnimg.cn/img_convert/82bac8854d6beeea6bca3e75a2b522b3.png
Fig. 分别通过三种方式生成的图片:仅标题(caption)、标题+CLIP 和 prior-based。
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 等 )。
5.1 架构:T5-XXL + Diffusion + Diffusion + Diffusion


https://img-blog.csdnimg.cn/img_convert/018b782eb8a7d4925053f800f6cf6169.png
Fig. Overview of Imagen architecture.
Imagen 架构在布局上非常简单:

[*]预训练的文本模子用于创建 embedding,然后用这些 embedding 扩散成图像;
[*]通过超分辨率扩散模子增加分辨率。
但架构中还是有一些新颖之处,比如模子本身和训练过程,总体来说还是先进一些。 这里只先容下它与前面几个模子差别之处。
5.2 与 GLIDE、DALL·E 2 等架构的差别

5.2.1 使用预训练的 transformer (T5-XXL) 而不是重新开始训练

与 OpenAI 的工作相比,这是核心区别。
对于 text embedding,


[*]GLIDE 使用了一个新的、经过专门训练的 transformer 模子;
[*]Imagen 使用了一个预训练的、冻结的 T5-XXL 模子 。
这里的想法是,T5-XXL 模子在语言处理惩罚方面比仅在图像标题上训练的模子有更多的上下文, 因此可以或许在不必要额外微调的情况下产生更有价值的 embedding。
5.2.2 使用更高效的底层神经网络(efficient U-net)

使用了称为 Efficient U-net 的升级版神经网络, 作为超分辨率扩散模子的核心。
比之前的版本更节省内存,更简单,并且收敛速率更快。 紧张来自残差块和网络内部值的额外缩放。细节详见 。
5.2.3 使用 conditioning augmentation 来加强图像保真度(image fidelity)

Imagen 可以视为是一系列扩散模子,因此在模子连接处 (areas where the models are linked)可以举行加强。


[*]Ho 等提出了一种称为条件加强(conditioning augmentation)的解决方案。 简单来说就是在将低分辨率图像输入超分辨率模子之前对其 apply 多个 data augmentation 技术,如高斯模糊。
[*]还有一些对于低 FID score 和高图像保真度至关紧张的资源(例如 dynamic thresholding), 论文 中有详细表明。但这些方法的核心已经在前几节都涵盖了。
5.3 小结

截至 2022.04,Google’s Imagen 是最好的 text-to-image generation 模子。

https://img-blog.csdnimg.cn/img_convert/4327fdffdffc05eb2e78d6fdb1feac85.png
Fig. Imagen 根据提示词生成的一些图片。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Datawhale X 魔搭 AI夏令营第四期 魔搭-AIGC方向 task01笔记