小白能理解稳定扩散的原理!
还记得风靡全网的《图形变形金刚》吗。
最近博主jay alammar也在自己的博客上写了一篇关于大火稳定扩散模型的插画,让你从零开始彻底了解图像生成模型的原理,配有超详细的视频讲解!
图形稳定扩散
ai模型的最新图像生成能力远超人们的预期可以直接从文本描述中创建具有惊人视觉效果的图像背后的运作机制非常神秘和神奇,但它确实影响了人类创造艺术的方式
稳定扩散的发布是ai图像生成发展的里程碑,相当于为大众提供了一个可用的高性能模型生成的图像不仅质量非常高,运行速度快,而且对资源和内存的要求也很低
相信任何尝试过ai图像生成的人都会想知道它是如何工作的,本文将为你揭开稳定扩散工作原理的神秘面纱。
stable diffusion 从功能上来说主要包括两方面:1)其核心功能为仅根据文本提示作为输入来生成的图像(text2img),2)你也可以用它对图像根据文字描述进行修改(即输入为文本 图像)
以下图表将用于帮助解释稳定扩散的组成部分,它们如何相互作用以及图像生成选项和参数的含义。
稳定扩散成分
稳定扩散是由多个组件和模型组成的系统,而不是单一的模型。
当我们从整个模型的角度看模型内部时,我们可以发现它包含一个文本理解组件,用于将文本信息转换为数字表示,以捕捉文本中的语义信息。
虽然模型还是从宏观角度分析的,后面会有更多的模型细节,但是我们也可以大致猜测这个文本编码器是一个特殊的transformer语言模型。
该模型的输入是一个文本串,输出是一个数字列表,用于表示文本中的每个单词/标记,即每个标记被转换成一个向量。
然后,这些信息将被提交给图像生成器,它也包含多个组件。
图像发生器主要包括两个阶段:
1.图像信息创建者
这个组件是稳定扩散的独家秘密,与之前的模型相比,它的许多性能增益都是在这里实现的。
该组件运行多个步骤来生成图像信息,其中steps也是稳定扩散界面和库中的一个参数,通常默认为50或100。
图像信息创建器完全在图像信息空间中运行,这使得它比在像素空间中工作的其他扩散模型运行得更快从技术上讲,这个组件由一个unet神经网络和一个调度算法组成
扩散这个词描述的是组件内部运行过程中发生的事情,即信息被一步步处理,最后由下一个组件(图像解码器)生成高质量的图像。
2.图像解码器
图像解码器根据从图像信息创建器获得的信息绘制图像,整个过程只需运行一次即可生成最终的像素图像。
如你所见,稳定扩散由三个主要部分组成,每个部分都有一个独立的神经网络:
1)剪辑文本用于文本编码。
输入:文本
输出:77个令牌嵌入向量,每个向量包含768个维度。
2)unet scheduler在信息(潜)空间中一步步处理/扩散信息。
输入:文本嵌入和一个由噪声组成的初始多维数组。
输出:经过处理的信息数组。
3)自动编码器解码器,其使用经处理的信息矩阵来绘制最终图像。
输入:经过处理的信息矩阵,维数为。
输出:尺寸为(红/绿/蓝,宽和高)的结果图像。
什么是扩散。
扩散是一个发生在下图中的粉红色图像信息创建器组件中的过程该过程包括嵌入令牌以表示输入文本和随机的初始图像信息矩阵这个过程还需要图像解码器来绘制最终图像的信息矩阵
整个操作过程是循序渐进的,每一步都会添加更多的相关信息。
为了更直观地感受整个过程,我们可以中途看一下random latents矩阵,观察它是如何转化为视觉噪声的,其中的视觉检查是通过图像解码器进行的。
整个扩散过程包括几个步骤,每个步骤都基于输入的潜在矩阵,并生成另一个潜在矩阵以更好地拟合输入文本和从模型图像集中获得的视觉信息。
将这些潜在信息可视化,看看信息是如何在每一步中累加起来的。
整个过程从零开始,看起来还挺刺激的。
扩散的工作原理
使用扩散模型生成图像的核心思想仍然是基于现有的强大的计算机视觉模型只要输入足够大的数据集,这些模型就可以学习任何复杂的运算
假设我们已经有了一个图像,生成一些噪声并添加到图像中,然后我们就可以把这个图像当作一个训练样本。
使用相同的操作,可以生成大量的训练样本来训练图像生成模型中的核心组件。
上面的例子显示了一些可选的噪声值,从原始图像到总噪声添加(级别4),这样就可以很容易地控制图像中添加了多少噪声。
因此,我们可以将这个过程分散在几十个步骤中,并为数据集中的每幅图像生成几十个训练样本。
基于以上数据集,我们可以训练出一个性能优秀的噪声预测器,每个训练步骤都与其他模型相似当在特定配置下运行时,噪声预测器可以生成图像
去除噪声并绘制图像。
经过训练的噪声预测器可以对添加了噪声的图像进行去噪,并且还可以预测添加的噪声量。
因为采样的噪声是可预测的,如果从图像中减去噪声,最终的图像会更接近模型训练得到的图像。
得到的图像并不是准确的原始图像,而是一种分布,即世界的像素排列,比如天空通常是蓝色的,人有两只眼睛,猫有尖尖的耳朵等等生成的特定图像风格完全取决于训练数据集
不仅稳定扩散通过去噪生成图像,还有dall—e 2和google的imagen模型。
应该注意到,到目前为止描述的扩散过程没有使用任何文本数据来生成图像
在下一节中,我们将描述如何将条件文本合并到流程中,以便控制模型生成的图像类型。
加速:分布在压缩数据上
为了加快图像生成的过程,稳定扩散并不选择在像素图像本身上运行扩散过程,而是在图像的压缩版本上运行,本文也称之为出发到潜空间。
整个压缩过程,包括图像的后续解压缩和绘制,都是由自编码器完成的,自编码器将图像压缩到潜在空间,然后只用解码器利用压缩后的信息进行重构。
前向扩散过程在压缩的分支中完成,噪声的切片是应用于分支的噪声,而不是像素图像,因此噪声预测器实际上被训练来预测压缩表示(latentss空间)中的噪声。
正向过程是通过使用自编码器中的编码器来训练噪声预测器一旦训练完成,就可以通过运行相反的过程来生成图像
向前和向后的过程如下所示,图中还包括一个条件组件,用来描述模型应该生成图像的文本提示。
文本编码器:转换器语言模型
模型中的语言理解组件使用transformer语言模型,该模型可以将输入的文本提示转换为令牌嵌入向量公布的稳定扩散模型使用cliptext为了便于解释,本文选择了bert模型
imagen论文中的实验表明,较大的语言模型比选择较大的图像生成组件能带来更大的图像质量提升。
早期的稳定扩散模型使用openai发布的预训练cliptext模型,但在稳定扩散v2中,它转向了剪辑模型的最新版本和更大的变体openclip。
clip是怎么训练的。
clip需要图像及其标题,数据集包含大约4亿个图像和描述。
剪辑是图像编码器和文本编码器的组合它的训练过程可以简化为拍摄图像和文字描述,用两个编码器分别对数据进行编码
然后嵌入余弦距离比较结果在训练初期,即使文字描述和图像匹配,它们之间的相似度肯定是很低的
伴随着模型的不断更新,在后续阶段,编码器编码的图像和文本的嵌入会逐渐相似。
文本信息馈送图像生成过程
为了将文本条件整合到图像生成过程中,噪声预测器的输入必须针对文本进行调整。
所有的操作都在潜在空间中,包括编码文本,输入图像和预测噪声。
为了更好地理解文本令牌在unet中的用法,我们需要先了解unet模型。
unet噪声预测器中的图层
一个没有文本的扩散unet,它的输入和输出如下:
在模型内部,您可以看到:
1.unet模型中的层主要用于转换潜在客户,,
2.每一层对前一层的输出进行操作,
3.一些输出将它送入网络后面的处理。
4.将时间步长转换为时间步长嵌入向量,可在层中使用。
unet噪声预测器中的图层
现在需要把之前的系统修改成文字版。
主要修改是增加了对文本输入的支持,也就是在resnet块之间增加了一个关注层。
需要注意的是,resnet块并不直接看到文本内容,而是通过attention层将latents中文本的表示组合起来,然后下一个resnet就可以使用这个过程中的文本信息。
参考资料: