文章主题:生成式模型, 文本生成图像, Diffusion扩散模型, CLIP模型
1. 什么是生成式模型
生成式模型是一种利用文本或随机采样方法生成图像或文本的工具,其中文生图是一种典型的应用。这类模型通过接收文本描述,然后生成相应的图像或段落。目前,最流行的文生图模型包括DALE-2、midjourney和我们要介绍的Stable Diffusion,它们均基于Diffusion扩散模型。
在深度学习模型中,扩散模型之前的经典生成方法包括 GAN 和 VAE。GAN,全称为生成对抗网络,是一种用于生成数据的深度学习框架。该框架主要由两个神经网络构成:生成器和判别器。生成器负责生成新的样本,而判别器则负责鉴别这些样本是真实存在的还是由生成器生成的。这两个网络之间存在一种对抗性的关系,它们会不断地进行博弈和参数调整,以期达到生成尽可能逼真样本的目标。最终,通过采样一个与训练数据分布相似的随机分布,可以生成新的图片并对其进行训练。
而VAE是变分的自回归模型,通过学习图片的潜在空间表示来生成图片。
2. 扩散模型Diffusion
“扩散”这个词汇,源于描述物体物理状态发生改变的过程。例如,房间内的气味会随着时间推移从浓郁逐步散布至周边区域,直至达到一种平衡状态;又如,热量的传递也呈现相似的特性。
扩散模型是一种图像处理方法,其操作过程可分为两个阶段:前向和逆向。在前向阶段中,我们逐步向图像添加噪声,使其逐渐变得混乱,最终变为完全的高斯噪声。而在逆向阶段,模型则试图学习如何从高斯噪声中恢复出原始图像。这种方法广泛应用于图像去噪、模糊和平滑等领域。
那么扩散模型是如何训练?训练的过程就是预测所加噪声的过程,模型是一个Unet模型。
正向:第i步的图像+高斯噪声=第i+1的图像
在训练 Unet 模型时,我们首先输入的是原始图像,然后对其进行预测,得到的高斯噪声作为参考。接下来,我们的目标是恢复原始图像,这个过程可以通过从预测结果中减去高斯噪声来实现。
在一系列操作中,我们逐步从采样的 高斯噪声 中去除噪声,最终恢复出清晰图像。在此过程中,每一步骤的 Unet 模型均共享参数,因此我们需要额外的输入步长信息,以便指示模型当前执行的是第几步去噪操作。
最早的扩散模型(DPM)需要近1000步才能还原图像,这极大的增加了推理的时间。
于就有很多研究针对如何加快采样来减少推理时间的方法,通常就是我们说的Sampling method, 比如DPM++SDE等
扩散模型涉及到几个重要的概念:
步长Step:
采样策略:
一张图总结下VAE、GAN和Diffusion Model的区别
3. Stable Diffusion
从上面可知,Diffusion扩散模型是一个简单且高效的生成式模型。但是离本次要讲的文生图还有一定差别。
还差的环节是文本如何添加到扩散模型里。如果有一个模型可以很好的匹配文本和图像,就可以文本生成的图像向量作为额外的条件加到扩散模型里(有条件的扩散模型)
这个模型就是CLIP模型,CLIP模型是典型的多模态的对比学习模型,通过文本和图像的配对数据,分布对文本和图像进行编码,优化两者向量的相似度,使得配对的两向量相似度最大。
OPENAI的DALE-2利用clip生成文本和图像向量配对,训练一个文本映射到图像向量的模型,得到图像向量模型,在通过diffusion模型生成图片,达到文生图的目的。
而Stable Diffusion有些不同,总体的流程见下图,不同之处在于:
最右边是条件输入,可以引导模型生成的结果,针对文生图,先用预训练模型将文本转换text token embedding,预训练模型可以是CLIP也可以是其他GPT模型
为了融合图通的条件输入,采用一个cross attention的方式添加到Diffusion去噪过程中
另外一个不同是:diffusion的模型输入是图像尺寸大小,这样推理速度较慢。Stable Diffusion将输入改成图像的一个潜在空间的向量表示。那怎么将图像转换为向量表示呢?答案是VAE。也就是上图中最左边,预训练一个VAE模型,将图像encode潜在空间表示,经过diffusion去噪过程,得到一个恢复的潜在变量,经过一个decode恢复成图像。
4. 参考资料
https://zhuanlan.zhihu.com/p/620714629
How does Stable Diffusion work?
http://jalammar.github.io/illustrated-stable-diffusion/
High-Resolution Image Synthesis with Latent Diffusion Models
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!