最近,AI绘画大放异彩,热度极高,几度霸占了知乎热榜。AI绘画所用的核心技术叫做扩散模型,不同于传统的GAN网络图像生成方法,扩散模型效果令人震撼,生成的高质量图像比肩专业画师。此外,扩散模型也在科研届备受关注,在ICLR2023投稿论文关键词频率统计中diffusion model从2022年的第173名上升到第14名。那么,这项技术有没有吸引到屏幕面前的你呢?请跟着译者,一起学习下扩散模型吧,相信本文一定能对你有所启发!
02作者介绍
Jay Alammar (opens new window),机器学习可视化知名博主,曾撰写知名博文 The Illustrated Transformer (opens new window)、The Illustrated BERT, ELMo, and co.(opens new window)
03译者说
相信关注AI届的小伙伴们或多或少都了解过一点扩散模型,可能也听说过扩散模型的数学原理比较高深,公式推导比较繁琐。本篇博客的原作者绕开了数学公式推导,用尽可能简单直白的语言描述扩散模型是什么、在干什么,力求给读者们一个直观、清晰的认识。当然,倘若读者想要深入了解扩散模型背后的理论基础以及内在逻辑,译者同样推荐大家阅读原论文“Denoising Diffusion Probabilistic Models”。此外,译者考虑到生硬的逐字翻译不太符合我们中国人常用的表达习惯,所以在保证语义不变的情况下,会适当地加以“汉化”以保证译文自然、通顺。
AI加持下的图像生成的效果令人震撼。文字描述创造语义图片是一项有魅力的技术,该技术表明人们艺术创作的方式发生改变。Stable Diffusion (opens new window)的发布是图像生成的一座里程碑,因为它提供了有较高的图像质量、较快的速度、较低的内存要求的高性能模型。
在尝试AI图像生成之后,你可能会开始想知道它是如何工作的。这是一个关于Stable Diffusion如何工作的入门介绍。
Stable Diffusion有通用性,有多种不同的使用方式。其中一种是文本生成图像(text2img)。上图显示一个由文本描述到图像生成的样例。除此之外,另一种是图像修改(输入是文本+图像)。
4.2 The Components of Stable Diffusion
Stable Diffusion不是单一的模型,而是一个由多个组件构成的系统。
首先注意到文本理解部分,它将文本描述转化成蕴含语义的向量化表示。
下图是整体的结构示意图,其中Text Encoder是一种特殊的 Transformer 语言模型(CLIP的文本编码器),接收输入文本,输出蕴含语义的向量化表示。然后将蕴含语义的向量化表示送入Image Generator。
Image Generator包含两个组件:
1)Image Information Creator
Image Information Creator是Stable Diffusion的核心组件,保证Stable Diffusion模型的性能。
Image Information Creator运行多步生成图像,运行步数作为Stable Diffusion接口的超参数,通常设置为50或100。
Image Information Creator在图像信息隐空间上运行,这个特性使得它比在像素空间中运行的扩散模型更快。从技术上讲,它由UNet模型与调度算法组成。
Diffusion一词描述Image Information Creator发生的事情。正是信息的逐步处理使得图像的生成质量更高,最后由Image Decoder生成最终的图像。
2)Image Decoder
Image Decoder根据Image Information Creator那里获得的信息绘制图片。在得到Image Information Creator输出后,Image Decoder运行一次以生成最终的像素级别的图像。
Stable Diffusion主要有三个组件,每个组件都有各自的神经网络。
(1)ClipText用于文本编码
输入:文本描述
输出:文本信息(77个token embedding,每个768维)
(2)UNet+Scheduler在隐信息空间逐步处理信息
输入:文本信息和噪声信息
输出:处理后的信息
(3)Autoencoder decoder使用处理后的信息绘制图像
输入:处理后的信息(维度(4,64,64))
输出:生成的图像(维度(3, 512, 512)(红/绿/蓝, 宽, 高))
4.3 What is Diffusion Anyway?
Diffusion发生在粉红色的Image Information Creator部分中,输入有两部分,一部分是表示输入文本的词嵌入,另一部分是随机初始化的图像信息向量,输出为用于Image Decoder生成最终图像的信息向量。
Diffusion逐步发生,每个步骤都会添加更多相关信息。为了直观了解该过程,可以将隐随机向量送入Image Decoder,查看其代表的图像信息。
Diffusion发生在多个步骤中,每个步骤都对输入的隐信息进行操作,生成另一个隐信息。生成的隐信息蕴含输入文本信息以及模型从图像训练集获得的视觉信息的融合信息。
可视化一组隐信息状态,查看每个步骤信息变化。
4.4 How diffusion works
扩散模型生成图像依赖于强大的计算机视觉模型。给定足够大的数据集,扩散模型可以学习复杂的操作。扩散模型处理问题如下:
假设我们有一张图像,首先添加一些噪声。
我们将添加到图像中的噪声称为“noise slice 1”,之后添加“noise slice 2”。
此时,图像完全由噪声构成。我们将这些带有噪声的图片作为计算机视觉神经网络的训练堂本。给定步数和图像,希望可以预测出在上一步中添加的噪声“noise slice”。
虽然这个样例只显示了从常规图像到完全噪声的两个步骤,但我们可以控制向图像添加多少噪声。所以我们可以把这个过程扩充至数十个步骤,为训练集中的每一张图像创建数十个训练样例。
此处巧妙在于,一旦Noise Predictor正常工作,它可以通过多个步骤去除噪声,完成图片的绘制。
注意:这是diffusion算法的过度简化。
Noise Predictor一旦训练完成,输入噪声图像,以及步骤数(超参),它可以预测噪声。
输入图像中减去预测出的噪声,会得到接近模型训练数据的图像。
如果训练数据集是美观的图像,如LAION Aesthetics (opens new window),那么生成的图像将趋于美观。
这里总结了扩散模型处理图像生成任务的过程,主要如Denoising Diffusion Probabilistic Models (opens new window)论文所述。
到目前为止我们描述的扩散过程,没有使用任何文本数据。接下来中,我们将介绍如何将文本信息融入扩散过程。
为了加快图像生成过程,Stable Diffusion论文 (opens new window)不是在像素级别图像上进行扩散,而是在图像的压缩版本上运行。
这个压缩(解压缩)通过自动编码器完成。自动编码器使用Image Encoder将图像处理成压缩信息,使用Image Decoder对压缩信息进行重构。
正向的扩散过程在隐空间上完成。噪声信息是应用于压缩的隐空间,而不是直接应用于像素图像。因此,噪声预测器被训练用来预测隐空间上的表示。
Diffusion的前向过程是使用Image Encoder生成带有噪声的图像数据,训练Noise Predictor。一旦训练完成,可以运行反向过程,使用Image Decoder生成图像。
这两个流程显示在Stable Diffusion 论文的图3中:
上图还显示“Conditioning”组件,在本例中描述模型生成图像的文本提示。接下来,我们介绍文本组件。
Transformer语言模型,作为语言理解组件,接收文本提示,生成词嵌入。发布的Stable Diffusion模型使用ClipText(基于GPT的模型 (opens new window)),而论文中使用BERT (opens new window)。
Imagen论文表明语言模型的选择很重要。相较于较大的图像生成组件,较大的语言模型组件对生成图像的质量有更大的影响。
早期的Stable Diffusion模型只是使用OpenAI发布的预训练的ClipText模型。未来的模型可能会切换到新发布的更大的Clip变体OpenCLIP (opens new window)。OpenCLIP文本模型参数量多达354M,对比下ClipText中参数量含有63M。
CLIP 在图像及其描述的数据集上进行训练。想象一个看起来像这样的数据集,有 4 亿张图像及其描述。
CLIP 是图像编码器和文本编码器的组合。分别对图像和文本进行编码。
然后,使用余弦相似度比较生成的嵌入。当刚开始训练时,即使文本正确描述了图像,相似度也会很低。
更新这两个模型,以便下次编码时,得到的嵌入是相似的。
通过在数据集上重复此操作并使用大的batch size,最终使编码器能够生成图像和描述相似的嵌入。如word2vec (opens new window)中一样,训练过程也需要包含不匹配的图像和描述作为负样本,得到较低的相似度分数。
为了使文本融入图像生成,我们须调整Noise Predictor使用文本作为输入。
现在,数据集中加入文本。注意,文本表示、图像信息和预测噪声都在隐空间状态下。
为了更好地了解UNet中如何使用文本信息,简单介绍UNet模型。
Layers of the Unet Noise predictor (without text)
首先看不使用文本的UNet。它的输入和输出如下所示:
可以看到:
(1)UNet是一系列用于转换隐信息的层
(2)每一层都对前一层的输出进行操作
(3)通过残差连接,将网络前面层的输出送入到后面处理
(4)时间步被转化向量,在网络层中使用
4.10 Layers of the Unet Noise predictor WITH text
现在让我们看看如何改变这个系统以增加对文本的关注。
添加对文本输入的支持,对系统的主要更改是在 ResNet 块之间添加一个注意层。
文本信息不直接由ResNet处理,而是通过注意力层融入。
05总结
为了完成图像生成,Stable Diffusion进行了扩散过程与逆扩散过程。扩散过程,是向原始数据中不断地添加高斯噪声,仅通过确认超参数就可以完成。逆扩散过程,是从高斯噪声中恢复原始数据,通过噪声预测的神经网络完成。输入随机噪声以及文本语义,执行逆扩散过程,完成蕴含语义的图像生成。
文章链接:
https://jalammar.github.io/illustrated-stable-diffusion/
评论
沙发等你来抢