OpenAI发布DALL-E2:基于文本的图像生成新产品

释放双眼,带上耳机,听听看~!
2022年OpenAI发布了基于文本的图像生成产品DALL-E2,其整体架构包括CLIP模型、Prior模型和Decoder模型。DALL-E2相较于之前的模型在生成图片的多样性上有所提升。

DALL-E2

2022年OpenAI发表了论文《Hierarchical Text-Conditional Image Generation with CLIP Latents》,其中发布了基于文本的图像生成产品DALL-E2。DALL-E2并不是一蹴而就,而是基于OpenAI最近数年已有的工作成果,包括DALL-E、CLIP、GLIDE等。使用DALL-E2基于文本生成图像的示例如图1所示。

OpenAI发布DALL-E2:基于文本的图像生成新产品

整体架构

OpenAI发布DALL-E2:基于文本的图像生成新产品

DALL-E2整体架构如图2所示。首先,训练CLIP模型,如图2虚线上方所示,其包含文本编码器和图片编码器,分别将文本和图片映射到同一个隐向量空间中。CLIP模型训练完成后,其模型参数被固定、不再改变。令图片、文本对为(x,y)(x,y),其中xx为图片,yy为文本,xxyy经过CLIP模型文本编码器和图片编码器后生成的图片Embedding向量和文本Embedding向量分别为ziz_iztz_t。DALL-E2文生图流程如图2虚线下方所示,包含两个核心模型:

  • Prior模型。对于给定文本yy,通过CLIP模型的文本编码器生成文本yy的Embedding向量ztz_t后,再通过Prior模型生成其对应图片的Embedding向量ziz_i。Prior模型可表示为P(zi∣y)P(z_i|y)
  • Decoder模型。对于文本yy和其对应图片的Embedding向量ziz_i,通过Decoder模型生成图片xx。Decoder模型可表示为P(x∣zi,y)P(x|z_i,y)

而CLIP模型对于图片、文本对生成的Embedding向量,可以作为Prior模型和Decoder模型的训练数据。DALL-E2通过串联Prior模型和Decoder模型生成图片的流程可以用以下公式表示:
P(x∣y)=P(x,zi∣y)=P(x∣zi,y)⋅P(zi∣y)P(x|y)=P(x,z_i|y)=P(x|z_i,y)cdot P(z_i|y)
上述公式中,第一个等式成立的原因是ziz_i可由xx计算可得,第二个等式成立的原因是根据条件概率定义有:
P(AB)=P(A∣B)P(B)P(AB)=P(A|B)P(B)
P(x∣y)P(x|y)表示由文本yy生成图片xx,而P(x∣zi,y)P(x|z_i,y)P(zi∣y)P(z_i|y)分别表示Decoder模型和Prior模型。因为相对于CLIP模型通过图片编码器将图片xx转化为Embedding向量ziz_i,DALL-E2中的Decoder模型逆向基于Embedding向量ziz_i生成图片xx,所以,论文也将DALL-E2整体架构称为unCLIP。论文通过实验验证,DALL-E2和之前的文生图模型GLIDE相比,生成质量相当,但多样性更好。

Prior

Prior模型的作用是根据文本yy生成其对应图片的Embedding向量ziz_i。DALL-E2探索了两种Prior模型:

  • 基于自回归(Autoregressive)模型,将图片的Embedding向量ziz_i看做离散序列,并基于文本yy

以自回归的方式逐个预测;

  • 基于扩散模型,使用扩散模型基于文本yy预测ziz_i的概率分布,并基于概率分布采样。

为了改善Prior模型训练完成后、采样生成图片Embedding向量的质量,DALL-E2在Prior模型中采用了Classifier Free Guidance机制,模型训练时,按10%的概率随机丢弃图片的文本,这样,使得模型训练完成时,既具备按文本条件生成图片Embedding向量的能力,也具备直接从噪声无条件生成图片Embedding向量的能力,从而在采样时,分别按条件和无条件进行预测,并基于两者差值,对预测进行调整。
前述已提到,事先基于已有的文本、图片对数据,通过对比学习,训练CLIP模型,并固定模型参数,然后训练Prior模型时,使用已有的文本、图片对数据,通过已预训练的CLIP模型生成相应的文本、图像Embedding向量,将其作为Prior模型的训练数据集,即通过Prior模型输入文本Embedding向量,输出图片Embedding向量,使其尽量接近由CLIP模型输出的图片Embedding向量。因此,不同于以往扩散模型的目标为预测噪声、损失函数为最小化预测噪声和实际噪声的差值,Prior模型的目标为预测图片Embedding向量、损失函数为最小化预测向量和实际向量的差值,可用以下公式表示:

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

基于扩散模型的Prior模型使用Transformer的Decoder作为其网络结构,输入包括文本、文本经过CLIP文本编码器后的Embedding向量、扩散步数的Embedding向量和带噪声的图片Embedding向量,输出是降噪后的图片Embedding向量。同时,为了提升生成图片Embedding向量的质量,DALL-E2在采样时会重复执行两次,生成两个图片Embedding向量,并取和文本Embedding向量点积(zi⋅ztz_i cdot z_t)最大的作为最终输出的图片Embedinng向量,即取和文本最相关的图片Embedding向量。

Decoder

Decoder模型的作用根据文本yy和其对应图片的Embedding向量ziz_i,生成图片xx。之前一篇论文阅读笔记中已提到,GLIDE在已有扩散模型的基础上,使用文本信息指导扩散过程,对于带噪声的图片xtx_t和文本cc,能够通过模型预测pθ(xt−1∣xt,c)p_theta(x_{t-1}|x_t,c),从而逐步降噪,实现了基于文本的图片生成。具体实现上,GLIDE基于ADM模型,先将文本cc转化为长度为KK的token序列,再通过Transformer输出文本的Embedding向量,最后使用文本Embedding向量替换原ADM模型输入中的类别Embedding向量。另外,文本Embedding向量还会经过投影与注意力层中的KKVV拼接在一起,通过注意力机制指导扩散过程。
DALL-E2的Decoder模型也使用了GLIDE来进行图片生成,但不同于CLIDE基于文本生成图片,DALL-E2的Decoder模型基于图片的Embedding向量生成图片。因此,DALL-E2的Decoder模型在GLIDE的基础上,进行如下修改:将图片的Embedding向量进行投影并添加到扩散步数的Embedding向量上;另外,在保持和GLIDE一致、仍然会对文本的token序列进行编码作为模型输入外,还会对图片的Embedding向量进行投影并追加到文本的Embedding向量上。
为了改善Decoder模型训练完成后、采样生成图片的质量,DALL-E2在Decoder模型中也采用了Classifier Free Guidance机制,模型训练时,按10%的概率随机将图片的Embedding向量设置为0,并按50%的概率随机丢弃图片的文本,这样,使得模型训练完成时,既具备按图片Embedding向量和文本条件生成图片的能力,也具备直接从噪声无条件生成图片的能力,从而在采样时,分别按条件和无条件进行预测,并基于两者差值,对预测进行调整。

Stable Diffusion

Stable Diffusion是由Stability AI、CompVis和Runway于2022年发布的开源文生图、图生图产品,其GitHub地址为:github.com/Stability-A…。Stable Diffusion基于LDM(Latent Diffusion Model),介绍LDM的论文《High-Resolution Image Synthesis with Latent Diffusion Models》于2021年发表。LDM相较于DDPM,在隐向量空间进行反向扩散过程,而不是在原始图片上,从而能够减少训练资源、提升推理速度。《The Illustrated Stable Diffusion》是一篇介绍Stable Diffusion的经典博客,以下内容是对这篇博客的翻译和精简。

整体架构

OpenAI发布DALL-E2:基于文本的图像生成新产品

Stable Diffusion的整体架构如图3所示,其文生图流程和DALL-E2类似,先在隐向量空间中进行反向扩散过程得到图片的Embedding向量,再通过图片解码器得到最终的图片,该流程包含以下核心组件:

  • Text Encoder,将文本转化为Embedding向量,其中包含文本的语义信息;
  • Image Information Creator,Stable Diffusion的核心,可以类比DALL-E2中的Prior模型,使用扩散模型,基于文本Embedding向量通过逐步的反向扩散过程,生成相应的图片Embedding向量,反向扩散步数默认50到100;反向扩散过程在图片的隐向量空间进行,并不是在图片的原始像素空间,这样相比于原先的扩散模型可以减少计算量;
  • Image Decoder,可以类比DALL-E2中的Decoder模型,基于图片Embedding向量生成图片。

Stable Diffusion各组件的模型细节:

  • Text Encoder,使用CLIP的文本编码器,输入文本,输出77个Token的Embedding向量,每个Token的Embedding向量的维度为768;
  • Image Infomation Creator,使用扩散模型,网络结构为UNet,输入文本Embedding向量、步数Embedding向量、带噪声的图片Embedding向量(64×64、4通道的张量),输出图片Embedding向量(64×64、4通道的张量);
  • Image Decoder,使用自编码器模型中的解码器部分,未使用扩散模型,输入图片Embedding向量(64×64、4通道的张量),输出生成的图片(512×512、3通道的张量)。

和DALL-E2中的Prior模型类似,Image Infomation Creator在反向扩散过程中逐步去噪的是图片Embedding向量(隐向量),如果将每步去噪的图片Embedding向量直接输入Image Decoder并输出相应的图片,可以看到初始的Embedding向量对应完全噪声,中间的Embedding向量对应的图片逐渐清晰,直至得到最终生成的图片,如图4所示。

OpenAI发布DALL-E2:基于文本的图像生成新产品

模型训练

Stable Diffusion基于LDM(Latent Diffusion Model),LDM论文中的模型结构如图5所示,和上一节的Stable Diffusion整体架构图基本一致,其中xx表示原始图片,x~tilde{x}表示生成的图片,Emathcal{E}Dmathcal{D}分别表示自编码器的编码器和解码器(已预训练),通过Emathcal{E}得到xx的Embedding向量zz,基于zz进行正向扩散过程,逐步增加噪声得到z1,…,zTz_1,…,z_T,将z1,…,zTz_1,…,z_T作为训练样本,进行LDM模型的训练,LDM模型的输出仍是预测噪声ϵθ(zt,t)epsilon_theta(z_t,t),损失函数为:
LLDM:=EE(x),ϵ∼N(0,1),t[∥ϵ−ϵθ(zt,t)∥22]L_{text{LDM}}:=mathbb{E}_{mathcal{E}(x),epsilonsimmathcal{N}(0,1),t}left[parallelepsilon-epsilon_theta(z_t,t) parallel_2^2right]
扩散模型训练过程可以参见《从DDPM到DALL-E2和Stable Diffusion——扩散模型相关论文阅读(1)》中的介绍。模型训练完成、进行采样生成时,基于完全噪声进行反向扩散,通过模型逐步预测噪声并降噪,得到最终的图片Embedding向量z~tilde{z},再通过Dmathcal{D}得到x~tilde{x}

OpenAI发布DALL-E2:基于文本的图像生成新产品

基于已预训练的自编码器,使用编码器生成带噪声的图片Embedding向量用于扩散模型训练,并使用解码器基于扩散模型采样、生成的图片Embedding向量解码得到图片的流程如图6所示。

OpenAI发布DALL-E2:基于文本的图像生成新产品

基于文本生成

Stable Diffusiion在图片生成过程中引入文本信息作控制,具体机制和DALL-E2类似,先使用CLIP的文本编码器将文本转化为Embedding向量,而扩散模型所使用网络结构UNet由多层ResNet组成,在每层ResNet输出的后面,增加一个Attention层,将前序ResNet的输出,和文本Embedding向量作为该Attention层的输入,通过注意力机制基于文本调整前序ResNet的输出,再输入到下一个ResNet中,整体流程如图7所示。

OpenAI发布DALL-E2:基于文本的图像生成新产品

用公式描述该过程,Attention层可用以下公式表示:

Attention(Q,K,V)=softmax(QKTd)⋅Vtext{Attention}(Q,K,V)=text{softmax}left(frac{QK^T}{sqrt{d}}right)cdot V
Q=WQ(i)⋅ψi(zt),K=WK(i)⋅τθ(y),V=WV(i)⋅τθ(y)Q=W_Q^{(i)}cdotpsi_i(z_t),K=W_K^{(i)}cdottau_theta(y),V=W_V^{(i)}cdottau_theta(y)

其中ψi(zt)∈RN×dϵipsi_i(z_t)inmathbb{R}^{Ntimes d_epsilon^i}表示前序ReNet的输出,τθ(y)∈RM×dτtau_theta(y)inmathbb{R}^{Mtimes d_{tau}}表示文本经过CLIP文本编码器后的Embedding向量,WV(i)∈Rd×dϵiW_V^{(i)}inmathbb{R}^{dtimes d_epsilon^i}WQ(i)∈Rd×dτW_Q^{(i)}inmathbb{R}^{dtimes d_{tau}}WK(i)∈Rd×dτW_K^{(i)}inmathbb{R}^{dtimes d_{tau}}表示Attention层中用于线性投影的参数矩阵。若进一步了解注意力机制,可以参见Transformer的经典论文《Attention Is All You Need》或笔者梳理的《AIGC系列-Transfromer论文阅读笔记》
综上,笔者个人感觉Stable Diffusion的文生图流程虽然和DALL-E2类似,也是分成两个阶段,并使用许多相同的技术,但Stable Diffusion的流程更加清晰和合理,第一阶段在图片隐向量空间从随机噪声开始反向扩散,中间通过Attention层引入文本信息进行控制,最终输出包含文本语义信息的图片隐向量,而第二阶段通过自编码器的解码器将图片隐向量转化为图片。

落地使用

Stable Diffusion web UI基于Gradio库对Stable Diffusion进行封装、从而提供B/S架构的文生图、图生图等操作界面,其GitHub地址为:github.com/AUTOMATIC11…。笔者本地环境为:

  • 机型,Macbook Pro(14英寸,2021年);
  • 芯片,Apple M1 Pro;
  • 内存,16G;
  • 系统,macOS Monterey,12.6.2;
  • Python,3.10.6;

下载源码后,还需从该地址下载Mac下的Stable Diffusion模型CheckPoint文件,并保存至models/Stable-diffusion目录,随后可以使用以下命令启动Stable Diffusion web UI:

./webui.sh --no-half # 启动Stable Diffusion web UI

启动后输入文本提示进行反向扩散过程生成图片,如图8所示,其中选择Stable Diffusion模型、输入文本提示、选择采样方法和步数等参数后进行生成。当然这只是一个简单示例,如果需要生成符合特定需求的高质量图片,一方面可以精心设计文本提示、并合理选择参数,另一方面可以从Civitai炼丹阁上下载不同风格的模型(CheckPoint文件或微调的Lora、ControlNet文件)进行生成,也可以更进一步基于自有的特定图片进行模型微调,再基于微调后的模型进行生成。

OpenAI发布DALL-E2:基于文本的图像生成新产品

参考文献

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

基于BERT的模型在语义角色标注(SRL)中的应用

2023-12-20 17:17:14

AI教程

智能运维领域的大语言模型Owl的性能评测

2023-12-20 17:33:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索