Stable Diffusion、DALL-E、Imagen背后共同的套路

【Stable Diffusion、DALL-E、Imagen背后共同的套路】李宏毅2023春机器学习课程笔记

考虑到个人在一些问题上需要李宏毅教授在2023年课程中讲到的内容补充,所以我会把部分李宏毅教授在2023年的课程内容提上来挑着学习,因为是挑着看的,我也不知道会不会全部看完,所以这里就不分EP了。课程的地址:【授权】李宏毅2023春机器学习课程_哔哩哔哩_bilibili


本篇博客要说的是有关Stable Diffusion、DALL-E、Imagen背后共同的套路。

Stable Diffusion、DALL-E、Imagen背后共同的套路

这三个模型都有一个共同的架构。

首先我们把文字的输入到专门处理文字的Text Encoder里面,把文字变成一串向量。然后把这串向量和我们从一个distribution里面simple出来的向量输入到Generation Model里面得到的是一个模型当作的“中间产物”,一个中间产物可能是我们看得懂的一张微缩版的图片,也可能是我们看不懂的杂讯。最后我们把这个“中间产物”放到Decoder里面输出的图像就是我们最终生成的图像。

Stable Diffusion框架

Stable Diffusion里面最右边标1的地方就是Encoder,然后标2的绿色部分可以看作Generation Model,那在Stable Diffusion里面用到的自然就是diffusion model了。最后最左边红色地方就是Decoder了。

DALL-E系列的框架

然后DALL-E系列的框架也是差不多的。

最左边标1的蓝色部分就是text的encoder。然后中间标2的部分就是Generation Model,这里用的是Autoregressive(AT自回归),当然用Diffusion也是可以的,这里如果你不知道AT是什么的话,这里给一个传送门可以去看看:【Transformer】李宏毅2021/2022春机器学习课程笔记EP12(P49-P50) – -TobyKSKGD的个人博客-。最后最右边标3的就是模型的decoder部分。

Imagen模型的框架

还有就是谷歌的Imagen模型也是差不多的。

最上面标1的部分就是Encoder。然后中间标2的部分就是一个Diffusion Model,这里的中间产物就是一个比如说64 * 64的小图。最后下面标3的部分就是负责把小图变大的Decoder部分。

文字的encoder其实对结果的影响是非常大的

我们可以看下面的实验,FID和CLIP是两个衡量图像生成好坏的指标,之后会对这两个指标做说明,现在只需要知道FID的值越小就代表图片生成得越好,CLIP的值是越大越好的,也就是说下图当中越靠近右下角就代表生成的图像是越好的。

左边第一张图做的就是不同encoder的影响的实验,你会发现这个encoder对结果的影响是非常大的。

但是你看右边是diffusion model大小对于结果的影响,你会发现这个对结果的影响就没有那么大了。

对于FID的解释

下面就来解释FID是什么,其实这个FID在2021年的课程(【生成式对抗网络GAN(下):理论介绍与WGAN+生成器效能评估与条件生成+Cycle GAN】李宏毅2021/2022春机器学习课程笔记EP17(P59-P61) – -TobyKSKGD的个人博客-)里面也提过一点。这里会做一次比较详细的说明。

我们评价一个生成的图像是不是好的会把这个图像放到一个影像分类的系统当中,下面这里用到就是CNN去当作影像的分类系统。下图当中蓝色部分表示的是真实的正确的资料集当中的图像,红色部分表示的是我们模型生成出来的图像。那我们用影像分类系统CNN把这两部分做了一个分类,然后这两组越接近,代表生成出来的影像跟真实的影像越接近。

那怎么去计算着两组的距离呢?

这里的做法很简单,FID就假设两组都是Gaussians distribution,然后计算它们之间的距离,结果就是FID了。然后FID的值是越小越好的。

最后要做一点说明的是,一般在算FID的时候需要simple出来大量的图像。

对于CLIP的说明

CLIP是一个用400百万个图像-文字成对资料训练出来的模型。

如果文字和图像在encoder出来的向量是成对的话,即文字确实是在描述图片,那么CLIP就想让这两个向量越接近越好。相反,如果不是成对的,就希望这两个向量越远越好。CLIP的分数就基于如果是成对的并且两个向量接近,那给的分数就会高;如果不是成对的,两个向量离得远,给得分数也高。

对Decoder的说明

上面其实就是对于Encoder的说明。接着我们先来看Decoder。

Decoder有一个很好的点就是它不需要文字和图像成对的资料,我们只需要单凭大量的影像资料就可以训练出来Decoder。

因为Decoder的作用就是把“中间产物”变成最终的图像而已,我们完全可以自己造训练资料出来。

先说“中间产物”是缩小图的情况。

这里Decoder的作用就是把小图变大图,我们只需要把资料集图像做down sampling就能获得大图和小图这样子成对的资料去训练Decoder了。

然后如果中间产物是我们不知道是什么的Latent Representation的话,我们的做法就是训练一个Auto-encoder,然后输入图片经过一个encoder得到一个Latent Representation,再把Latent Representation通过Decoder还原成原图,要让输入跟输出越接近越好。这样子我们也训练出来了一个Decoder。

对于Generation Model的说明

【浅谈图像生成模型Diffusion Model原理】李宏毅2023春机器学习课程笔记 – -TobyKSKGD的个人博客-这里我们说Diffusion模型的生成就是不断对图像去噪,训练的时候就是不断对图像加噪。然后这里换成了“中间产物”而已。这里主要对于Generation Model的部分其实都在上面的这个博客里面,这里就只是简单地说一下。

我们来说说Generation Model的训练,这里Encoder就是输入一张图片输出一张中间产物,这里以Latent Represention是“中间产物”为例。然后我们把sample的杂讯加到Latent Represention上,接着就是像这样经过固定步数的操作得到一个我们完全看不出来的杂讯。这里训练Noise Predicter就和前面博客里面说的一样,这里还把文字向量当作中间的一个输入。

生成图像的过程

最后可以看看整体生成图像的过程:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇