用设计师能理解的语言
来解释AIGC中的技术名词
“AIGC 属于跨学科的产物,涉及领域众多,包括高等数学、统计学、计算机图形图像学、机器学习等各个领域。AIGC 设计软件的界面上往往会涉及到许多这些领域的技术术语。要想搞清楚它们背后的知识体系需要展开的知识树体量十分庞大繁杂。术业有专攻,我们无法全面俱到地在每一个领域都做到精通,但又需要了解到一定的程度,以便更好地使用 AIGC 的相关软件。所以,我们将尽量以设计行业从业者能理解的语言来解释那些经常遇到无法绕开的技术术语。
Stable Diffusion 稳定扩散模型(上)
Stable Diffusion 是 Diffusion 扩散模型中最先进的模式,它采用了更加稳定、可控和高效的方法来生成高质量图像。在生成图像的质量、速度和成本上都有显著的进步,因此该模型可以直接在消费级显卡上实现图像生成,可达至少512*512像素的图像。最新的 XL 版本可以在 1024*1024 像素的级别上生成可控的图像,生成效率也比以往的 Diffusion 扩散模型提高了30倍。目前 Stable Diffusion 的应用已经不局限于图像生成领域,它还被广泛应用于自然语言处理、音频视频等生成领域。
Stable Diffusion 背后的公司是足以与 OpenAI 抗衡的 Stability AI 公司。Stable Diffusion的模型架构是于2022年8月由 CompVis、Stability AI和 LAION 的研究人员在 Latent Diffusion Model 的基础上创建的。其核心技术来源于 AI 视频剪辑技术创业公司 Runway 的 Patrick Esser,以及慕尼黑大学机器视觉学习组的 Robin Romabach 这两位开发者在计算机视觉大会 CVPR22 上合作发表的潜扩散模型(Latent Diffusion Model)的研究(论文:https://arxiv.org/abs/2112.10752 )。
Stability AI 旗下各大项目
Stability AI 公司虽然在普通大众来看并不出名,但在业内它的地位却十分显赫。除了 Stable Diffusion,Stability AI 雄心勃勃的计划下面还聚集了 EleutherAI 和 LAION 等知名开源项目,以及生物模型 OpenBioML、音频生成 Harmonai、人类偏好学习 Carperai、多模态 DeepFloyd 等更多项目。Stability AI 的迅速崛起给因 ChatGPT 而闻名天下的 OpenAI 公司造成了不小压力,前 Oculus CTO John Carmack 表示:“Stable Diffusion 是一个开源炸弹。OpenAI 虽然资金充裕,但从商业化以及产品化的角度很难与其匹敌。”
下面就让我们详细看看,这个来自于 Stability AI 公司的著名的 Stable Diffusion 到底是怎样一种 AIGC 的技术。
Stable diffusion (稳定扩散模型)相比它的上一代版本 Latent diffusion (潜空间扩散模型)主要有以下几点改进:
训练尺寸:Latent Diffusion 是在256x256分辨率上训练,而 Stable Diffusion 是先在256x256分辨率上预训练,然后再在512x512分辨率上微调优化的,而现在 XL 版本则采用了 Laion-High-Resolution 训练集,一个规模为170M,图像分辨率大于 1024 的高分辨率训练子集,用于超分辨率任务。
然而要想说清楚 Stable Diffusion,必须首要搞清楚 Latent Diffusion 的核心优势。可以说 Latent Diffusion 是 Stable Diffusion 的鼻祖,因为它首次采用了浅空间的高效处理方法,解决了 Diffusion 效率低下的问题。它内部的 U-Net 网络是在潜空间的低维度中进行运算的,这极大地降低了内存消耗和计算的复杂度。例如,一个512*512像素的照片图像,数据表达为(3,512,512),即 RGB 三通道*512*512像素的图像数据规模,数据体积在786432之上。而在潜空间中则会被压缩成(4,64,64),数据体积为16384,内存消耗将会减少到原来的64分之1。这个给模型的运行带来了极大的高效性与普及性。Stable Diffusion 自然也继承了 Latent Diffusion 的这个核心优势。
接下来,我们将部分参考并翻译几位技术大牛对 Stable Diffusion 的文章内容,尤其是 Jay Alammar 在其博客上针对 Stable Diffusion 解构所配的十分简明扼要的拓扑图,引用其中一些关键的部分进行讲解。
Jay Alammar
Stable Diffusion 稳定扩散模型可以被应用在许多领域,但在 AIGC 设计领域,我们仅关注它的两个主要方面:
第一个是文生图(text2img)。下图展示了一套文本和对应生成的图像。这套文本就是 Prompt 提示词:paradise cosmic beach。
文生图:提示词“paradise cosmic beach”生成了对应的图片
第二个是改变图片。很明显,改变图片需要的是输入一张图片,还有用来改变图片的提示词。对应的例子是第一次生成的图+提示词:Pirate ship。
提示词修图:修图提示词“Pirate ship”在原图上进行了新元素的添加
Stable Diffusion 稳定扩散模型的组成部分
其实 Stable Diffusion 本身并不是一个模型,而是一个由多个模块和模型组成的系统。论模型来说,Stable Diffusion 由三大核心部件组成,每个组件都是一个神经网络系统,也称为三大基础模型:
1,CLIPText 用于文本编码,使文本数字化:
Output:77 token embeddings vectors,每个 token 向量有 768 个维度;
2,U-Net + Scheduler 用于逐步处理/扩散被转化到潜空间中的信息:
Output:处理后的信息矩阵;
3,Auto-EncoderDecoder (主要是一个VAE:Variational AutoEncoder )使用处理后的信息矩阵解码绘制出最终图像,把潜空间的运算结果解码成实际图片维度:
Output:生成的图像,维度:(3, 512, 512)为(RGB三个通道、和两个像素尺寸)。
首先,让我们看一下 CLIPText,它是一个文本理解与编码组件( Text Understander 图中蓝色模块),它将文本信息转换为用数字表达的信息(通常为一个数据集 ),以便让机器能够捕捉文本的含义。
蓝色模块为文本理解组件 Text Understander
这个文本理解组件如果按照技术结构组成来说,可以理解为一个文本编码器(Encoder),它是一个特殊的 Transformer 语言模型(技术术语: CLIPText ,或 Clip模型文本编码器),它的输入是文本,输出则为数据集,即用数据集的方式来表达文本中的每个单词/token(通常每个向量对应一个token)。
然后,这些信息输入给由若干模块组成的图像生成器(Image Generator 图中粉色黄色模块 ) 。
蓝色3*5的格子为Token转化的数据集,粉红色黄色模块为图像生成器 Image Generator
这个图像生成器进一步拆解如下:
这个模块就是 Stable Diffusion 稳定扩散的核心武器,是它比以前的 Diffusion 版本能够获得更多性能提升的地方。此组件反复运行多步(Steps)来生成用于产生图像的信息。Steps 数值通常默认为 50 或 100。
图像信息创建器完全在潜在空间中工作,这使它比以前在像素空间中工作的效率提高了64倍。从技术上讲,这个组件由一个 U-Net 神经网络和一个调度算法组成。
在这个图像信息创建器组件中,信息的运行方式是一个逐层处理的机制,即 Diffusion 的过程。处理完毕后,将数据传输给下一个模块——图像解码器(Image Decoder)来生成最终的图像。
图像生成器 Image Generator 中的结构
Image Decoder 图像解码器
图像解码器根据从图像信息创建器传递过来的信息绘制图像。它只在之前的 Diffusion 过程完全结束后才运行一次,即把潜空间中的图像信息解码生成最终的像素图像。
构成 Stable Diffusion 模型的三大组件
小结一下上面的内容,构成 Stable Diffusion 的三个主要组件 CLIPText 用于文本编码(Text Encoder)、U-Net 用于处理潜空间中的信息(Diffusion的实际运行过程)、VAE 使用处理后的信息解码绘制出最终图像。
要继续往下进一步解构,我们首先要详细了解一下,到底“Diffusion 扩散”是怎样运行的?
“Diffusion 扩散”的详细运行过程
扩散的过程发生在图中粉红色的部分,即图像信息创建器(Image Information Creator)组件中。这部分同时包含了两个输入,见下图:①从文本编码器( CLIP Text模型)输出过来的 Token embeddings,和②随机的初始图像信息矩阵,即潜空间的噪点图,然后经过图像信息创建器(Image Information Creator)处理后输出③处理过的图像信息矩阵,最终交给图像解码器来绘制图像。
粉红色部分:图像信息创建器(Image Information Creator)组件
输入① ②,再输出 ③,这些步骤不是一次性完成的,而是一个反复迭代多次的进程 ,每一次迭代都会去掉部分噪点并添加更多与目标图片相关的信息。
不仅仅为了讲述这个模型的方便,在实际模型运行过程中,都可以在每一次迭代步骤后添加一个检查点,以查看图像中的噪点被逐渐去除的效果。我们在使用 Stable Diffusion WebUI 软件时能够看到,每过一段时间预览窗口中就会生成出一个中间步骤的图像,这个图像逐渐变得清晰,就是源于这些检查点。
当扩散过程发生时,每迭代一步就引入一个 U-Net 预测噪点矩阵,并用之前一步包含噪点的图片减去这个预测噪点矩阵,产生一个更好的、噪点更少的图片。所谓“更好”的意思就是,这个图片更像从预先训练好的大模型中抽取出的所有与输入文本语义相关的图片在潜空间中的表达。50或100步迭代后,便最终生成了结果,一个不带任何噪点的图片从潜空间矩阵中被解码出来。这样讲肯定还是让人感觉一头雾水,主要是这个逐步去噪点的过程很难用一两句话就讲清楚,接下来下面我们详细地展开这部分。
这里我们可以看出,CLIP 文本语义的潜空间矩阵和大模型中提炼出来的 U-Net 预测噪点潜空间矩阵给 Diffusion 的多次迭代过程提供了不断校准的能力。
如果我们在某一次迭代步骤之后检查一下潜空间矩阵,看看这个扩散过程进展到了什么程度。比如我们在第 1、2、4、5、1
0、30、50 步后查看,就会发现,它呈现如下图的状态。
在第 1、2、4、5、10、30、50 步后查看噪点去除情况
这就是之前我们在 Diffusion 模型课程章节中讲到的反向过程(Reverse Diffusion Process) 。而前向过程就是预训练模型阶段,通过不断地加噪点去训练模型对每一个阶段噪点的预测能力,以便为日后反向过程中为每一次迭代去噪点阶段提供噪点校准的能力。
下面我们先来看看前向(训练)阶段具体发生了什么。如之前所述,Diffusion 扩散模型生成图像(反向过程)的过程中最关键地方是我们事先拥有了一个强大的 U-Net 模型。这个模型预训练的过程可以简述为以下几个步骤。
假设我们有了一张照片(下图中1),并生成了一些随机噪点(下图中2),然后在若干噪点强度中选择其中某一个强度级别(下图中3),然后将这个特定强度级别的噪点加到图片中(下图中4)。这样,我们就完成了一次典型的样本的训练。(注意,噪点并不是直接在像素维度加到图片上的,而是在潜空间中加到图片的潜空间数据矩阵中的。这里的噪点图只是为了方便大家理解。)
一次典型的样本的训练
然而,仅仅一幅图的一次训练是远远不够,我们需要许多许多这样的图来进行多次训练。下图演示了第二次,采用另一张样本图片训练的情况。与第一次训练图片不同的另一张照片(下图中1),并生成了一些随机噪点(下图中2),然后在若干噪点强度中选择其中某一个强度级别(下图中3),注意第二次和第一次选择的噪点强度级别不同。然后将这个特定强度级别的噪点加到图片中(下图中4)。这样,我们就完成了第二次典型的样本的训练。