1

DALL·E 2 文本到图像生成都给我卷起来

 1 year ago
source link: https://blog.51cto.com/Lolitann/5940283
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DALL·E 2 文本到图像生成都给我卷起来

精选 原创

LolitaAnn 2022-12-15 16:35:00 ©著作权

文章标签 编码器 图像特征 数据集 文章分类 深度学习 人工智能 yyds干货盘点 阅读数149

论文地址: Hierarchical Text-Conditional Image Generation with CLIP Latents

Hierarchical Text-Conditional Image Generation with CLIP Latents

看一下标题啊,使用CLIP出来的特征来做一个层级式的文本到图像的生成器

我们可以获得三个线索:

  1. 用到了CLIP模型

    CLIP模型作为DALL·E 2的基础,先找到图片文本之间的关联。真个DALL·E 2模型都离不开CLIP。

    • 在DALL·E 2中给定一个文本,CLIP就可以对文本编码获得对应的特征。

    • DALL·E 2有一个prior模型,输入是文本特征,输出是图像特征。

    • 把获得的图像特征传给DALL·E 2的解码器,就可以生成图像了。

    CLIP对DALL·E 2来说很重要,不了解的可以先看一下介绍CLIP的文章:[CLIP打通文本图像壁垒,为AI图像生成打下

  2. 层级式是因为DALL·E 2先生成一个64×64的图像,再使用一个模型上采样生成一个256×256,你以为这就完了吗,还有一个模型继续上采样到1024×1024,所以最后DALL·E生成出来的是一个1024×1024的高清大图

  3. 文本到图像生成

    这个就没什么可说的了,现在text to image生成的工作发展地如火如荼。

DALL·E 2是什么

之前OpenAI的CLIP已经做的挺好的了,既能获取到文本对应图片语义信息又能获取到图片的风格信息,既然信息已经可以抽取地这么好了,那只拿着它去做分类是不是很可惜,所以能不能多加利用呢?

为了能充分发挥CLIP的优势,所以作者尝试使用CLIP获得的特征去做图像的生成,因此他们做了一个两阶段的模型。

  • prior:给定一个文本caption产生一个和CLIP模型类似的图像嵌入表示(image embedding)

  • decoder:通过图像嵌入表示解码生成对应的图像

DALL·E 2 文本到图像生成都给我卷起来_数据集

prior

prior要做的是拿到一个caption之后将其转换为文本嵌入,然后再将其转化成图片嵌入。

这里用的是一个预训练好的CLIP模型(图片虚线的上半部分)。我们知道CLIP模型是有两部分的,一个文本编码器和一个图像编码器。

看一下图片虚线的下半部分:

  • caption → text embedding这一步用的是CLIP的文本编码器

  • 然后prior的另一部分的作用是text embedding → image embedding

CLIP的图像编码器出来的结果在这里作为prior出来的结果的ground truth。

作者在这里提了一下,使用prior生成image embedding可以提高图像生成的多样性。此外prior的设计还有一个原因:对于同一个caption,可能会有无数的图片与之对应,因此CLIP两个编码器输出的内容并不是完全一致的,因此在这里需要一个单独的prior模型将文本嵌入“翻译”为可能与之相匹配的图像嵌入。

decoder

这一部分就是用的扩散模型。使用扩散模型可以保证图像生成的多样性。基于给定图像的特征可以生成多种多样的图片,还能保证语义信息和风格。

在这里作者是做了实验,尝试使用了自回归模型和扩散模型,最后还是发现扩散模型比较香,效率又高生成效果又好。


论文方法介绍


和CLIP模型一样,训练数据集也是图片和文本对pair(x,y)pair(x,y)pair(x,y)。给定图片xxx,令ziz_izi​是CLIP出来的图像嵌入表示,ztz_tzt​为CLIP出来的文本嵌入表示,整个DALL·E 2模型就可以拆解成两部分:

  1. prior:P(zi∣y)P(z_i|y)P(zi​∣y),根据输入文本yyy产生图像的嵌入表示ziz_izi​。

  2. decoder:P(x∣zi,y)P(x|z_i,y)P(x∣zi​,y),根据文本yyy和prior得到的图像嵌入表示ziz_izi​重建图片xxx。当然文本yyy也可以不加的。

整个过程的数学表示为:

P(x∣y)=P(x,zi∣y)=P(x∣zi,y)P(zi∣y)P(x \mid y)=P\left(x, z_i \mid y\right)=P\left(x \mid z_i, y\right) P\left(z_i \mid y\right) P(x∣y)=P(x,zi​∣y)=P(x∣zi​,y)P(zi​∣y)

decoder

Guidance

对于扩散模型,为了提高其评价指标的数值表现和加速采样,研究人员已经探讨出多种多样的引导扩散的技巧,集体可以看这里: Guidance,让扩散模型的指标更能打

在DALL·E 2的decoder中用的方法是CLIP guidance + classifier-free guidance。就是说DALL·E 2中的guidance可能来自于文本,也可能来自于CLIP模型, 在这里随机将10%的CLIP的特征表示设置为ϕ\phiϕ,在训练过程中随机去掉50%的文本caption。

层级式生成

这里就是为了提高生成图片的质量,先用模型生产64 × 64 的小图,再使用两个上采样模型,使分辨率逐步提高到256 × 256,1024×1024。

为了提高训练的稳定性,训练过程中加了很多噪声。在网络结构上,由于用的都是U-Net,使用的都是卷积操作,不是使用Transformer,因此训练出来的模型可以用在任意大小的图上, 而不再需要考虑图像编码的长短。

prior

作者在这里使用了两种模型:

自回归模型(autoregressive) prior:

自回归是输入文本特征,加上CLIP的图像特征去做生成,这样不断去预测就可以了。但是之前讲CLIP的时候我们就提到,OpenAI的人已经意识到训练预测式的模型效率很低。为了让训练变得更快速,他们还用了很多加速技巧。总之就是很麻烦,论文中也没详细写,这里就不多赘述。对于自回归模型为什么不太行以及不了解CLIP的可以看: CLIP打通文本图像壁垒,为AI图像生成打下基础

扩散模型(Diffusion) prior:

因为prior的输入输出都是embedding,所以在这里扩散模型的网络用的就不是U-Net了,而是直接训练的一个只用decoder的Transformer,用来处理序列信息。

这里的输入很多:

  • encoded text:编码之后的输入文本

  • CLIP text embedding:CLIP 模型计算的文本的嵌入表示

  • embedding for the diffusion timestep: 当前扩散模型的时间步

  • noised CLIP image embedding:带噪的CLIP 图像嵌入表示

  • a Transformer embedding:Transformer 自己的嵌入特征表示

这些所有的输出组合起来,拿去预测没加过CLIP嵌入特征的图像的表示。其他的就和普通的扩散模型完全一样了。

目标函数用的是:

Lprior =Et∼[1,T],zi(t)∼qt[∥fθ(zi(t),t,y)−zi∥2]L_{\text {prior }}=\mathbb{E}_{t \sim[1, T], z_i^{(t)} \sim q_t}\left[\left\|f_\theta\left(z_i^{(t)}, t, y\right)-z_i\right\|^2\right] Lprior ​=Et∼[1,T],zi(t)​∼qt​​[∥∥​fθ​(zi(t)​,t,y)−zi​∥∥​2]

这里发现最后算目标函数用的是ziz_izi​,而不是预测噪声,因为在DALL·E 2中作者发现很有趣的一点是DDPM之后优化了扩散模型,大家都从预测图像转变到了预测噪声上,但是在这个实验里作者发现直接去预测特征得到的效果会更好。


以上就是整个DALL·E 2 模型的方法介绍。图像生成这边的模型很难画框架,不看代码的话很难把握整体方法,所以感兴趣的可以自己去再去过一下代码。当然了,不用找代码了DALL·E 2不开源,所以大家只可意会了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK