ComfyUI 相关博客目录:
现如今,AI绘图软件风靡互联网。使用AI绘图,你只要输入几个词语,动动手指就可以生成一张图片。你是否好奇这背后的逻辑?SD是什么?潜空间又是什么?AI 究竟是如何将算力转化为那些鲜活的图片的?如果你对此感到好奇,那么请往下阅读。本文将以最简明易懂的方式,阐释 AI 的基础原理。了解其中的流程和原理,能够帮助你更好地使用AI绘图工具,更高效地调整AI绘图的参数,更有目的性地选择对应的模型。
AI绘图的过程
首先,让我们来了解一下 AI绘图的基本流程,它到底是怎么运作的?不同的 AI 绘图软件,提供的界面、交互方式或许有很大差别,但是本质都是一样的。让我们从最简单的开始,以 ComfyUI 最基础的一个文生图流程为例。

或许你会感到奇怪,Load Checkpoint 为什么要载入模型?为什么输入 Prompt 的节点,却被称为 CLIP Text Encoder?为什么在 KSampler 之后,Save Image之前,还需要有一个 VAE Decoder?不要着急,我们先提炼这张图中显示的,AI绘图的基础流程。
如上图所示,我们可以看到:
- 首先,在Load Checkpoint 中,我们载入了模型。
- 之后,我们要输入文本 prompt,也就是所谓的提示词,以文字的形式告诉 AI,我们想要的图片里面有什么元素,是什么风格。
- 然后,这些文本会被输入到 CLIP 编码器中,也就是 CLIP Encoder。在这里,CLIP 编码器会从我们输入的自然语言中,提取形态(小狗的四肢分布)、视觉(斑点小狗)、语义(小狗是人类忠诚的伙伴)等多个方面的特征,将我们输入的文本转换成词特征向量。什么是词特征向量?在这里,你暂且把它当成一种 AI 能够读懂的数据格式就好,CLIP 编码器就是人类与AI的翻译官。
- 在上一步得到的词特征向量,接下来,会和一张随机噪声图一起,被传入 VAE 编码器中进行编码。VAE 编码器会提取这些像素空间中的信息,压缩转化到潜空间中,大大减少空间的占用。所谓潜空间,就是 Latent Image,可以理解为压缩信息后更节省空间的一种数据存储方式。
- 在这之后,Diffusion 模型会在潜空间中开始运算,不断地迭代。每一步,它都根据 prompt 来预测噪声,然后去除这个噪声,直到达到我们指定的迭代步数。
- 去除噪声以后获得的仍然是潜空间中的一堆压缩数据。这些数据还需要再经过 VAE 解码器,即 VAE Decoder 的解码,才能够转化到像素空间中,得到右侧生成的图像。
上述提到的流程或许还是有一些晦涩难懂。我们不妨来个比喻。其实整个AI绘图的过程就好比是雕刻。一张随机的噪声图就是一块石料,每一次要刻哪里、怎么刻,就是 Diffusion 模型通过我们输入的 prompt 来计算得到的。而 CLIP 编码器只是个翻译官,帮助 Diffusion 模型理解我们下达的文本指令。 VAE 编码器则是提取、压缩数据信息,提供了一个更舒适、高效的工作环境。
可以看到AI绘图中使用到了三个基础模型,分别是VAE, diffusion扩散模型和CLIP模型。这三个模型在 AI 绘图的过程中至关重要,让我们在后文更进一步地认识它们。
三个基础模型:VAE / CLIP / DIFFUSION
VAE: Variation Auto-Encoder 变分自编码器
要了解 VAE,我们首先要知道什么是 Auto Encoder。
Auto-encoder 自编码器
Auto Encoder 实际上是一个对称的网络结构,它包含了 encoder 和 decoder 两个部分。
- Encoder:将数据量为n维的数据压缩成更小的k维特征(潜空间),并尽可能包含原始数据的所有信息。
- Decoder:将k维特征转换回原始数据。
不难理解,经过提取和重建,输出的数据会和之前的输入有所不同。因此,自编码器的训练目标,就是让原始输入数据和重建输出的数据之间的差尽可能小。如下图所示:

这种训练好的自编码器,常常被用于特征提取,例如图像分类应用,输入一张图片,判断是不是小狗。它的优势很明显,能够节省存储空间,降低应用对硬件的要求,提升效率,更有效地表示图像特征,对图像进行更精细的控制和编辑等。但是缺点也不可忽视,自编码器随机生成新图像的能力很差,而且在输入输出前后,数据会有一定的丢失。
Variation Auto-encoder 变分自编码器
VAE 就是在上述的自编码器上,改进得到的产物。它满足 k 维特征中的每个值都符合高斯分布的概率值,只要改变概率,就可以平滑地改变图片信息。例如下图,就是将性别特征这个维度从0到1调整,图像中人物的性别也能够平滑地变化。

当然,VAE 仍然通过原始数据和重建后数据的差来评估结果的好坏。只是它对于图像特征地把控,可以更细节,也更容易生成随机的图像。
Diffusion Model 扩散模型
Diffusion Model ,扩散模型,也是现在的AI绘图普遍使用的模型。它具体的数学理论很复杂,在这里我们不再展开。但是总体而言,它的运行思路是比较简洁的。Diffusion 模型的训练,其实就是从高斯噪声中还原图片,学习马尔科夫链的概率分布,使还原出来的图片符合训练集的分布。这些学术名词究竟是什么意思?别着急,往下看。
如下图所示,从右到左,可以看到,不断地在上一个状态的基础上叠加符合正态分布的噪声,这就是扩散的过程。因为每次添加的噪声,都只和上一次的状态有关,所以,这是一个马尔科夫链模型。其中的转换矩阵可以用神经网络预测。而从左到右,图像越来越清晰,越来越接近我们的预期,这就是 Diffusion 模型做的事。它每一次,都去除掉预测的噪声,将图片一点点还原出来。

CLIP 模型 Contractive Language-Image Pretraining
如开头我们所提到的,CLIP 模型就好像是一位翻译官,将我们的自然语言,转化成 AI 能够理解的词特征向量,它所做的工作,其实就是对比语言和图像的预训练。如图所示,输入的文本会通过 Text Encoder 进行编码,图片则会通过 Image Encoder 进行编码,编码后进行向量运算,会得到一个相似性矩阵,也就是右侧的这个矩阵。因此,CLIP 模型常用于计算图片和文本之间的关联度(CLIP-score),这个关联度越高,说明图文越相符。

在 CLIP 模型的训练中,会使用巨量的文本和图片数据对,来计算图片和文本编码后的特征的相似性矩阵。优化的方式,就是最大化对角线元素,同时最小化非对角线元素,来提升两个编码器的准确率,让最后的文本和图片编码器的语义可以强对应起来。例如下图,是 OpenAI 使用了 4 亿组图片文本对,最后训练出来的 CLIP 模型效果。可以看到,例如一张猫猫图片和 “a facial photo of a tabby cat” 的对角线元素是最大的,说明它们的关联度最高。

总结
至此,我们大概清楚了,一个 AI 绘图的基本流程可以其实可以梳理为:
- 载入模型(VAE CLIP Diffusion)。
- 输入提示,它可能是图片或者文字。
- CLIP 对输入的提示内容进行转化,输出词特征向量。
- 将词特征向量和随机噪声图输入到 VAE 中,进一步地提取数据特征并压缩。
- Diffusion 开始迭代,预测噪声,并去除,一步步雕刻出预期的画面。
- 最后,VAE 将潜空间中的输出解码,转化成我们看得懂的二维图像。
现在,你应该能够理解,为什么在 ComfyUI 中的第一个节点,Load Checkpoint 总是要载入这三个模型了吧。因为它们是 AI 绘图的基础,并且三者的关系相当紧密。或许你能训练出一个很强的 CLIP 模型,但是它未必能和其他两个模型配合、发挥出更好的作用。因此,这三个模型在下载和载入时,通常都是捆绑的。为什么输入 Prompt 的节点,却被称为 CLIP Text Encoder?因为是由CLIP来完成输入的翻译和提取。为什么在 KSampler 之后,Save Image之前,还需要有一个 VAE Decoder?因为计算得到的图片它是一堆压缩数据,还需要解码,才能转化成我们想要的二维图像。
- 本文作者: Berry
- 本文链接: https://wuxinberry.github.io/2024/12/23/ComfyUI基础原理/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!