Diffusion 扩散模型
Diffusion 的意思就是如滴入一杯清水中的墨滴一样,慢慢散开最终变成一片浑浊。如果这个过程可逆,那么就可以创造一个由一片浑浊去探寻最初墨滴状态的方法。
Diffusion Models 它分为两个部分:
- 前向过程(Forward Diffusion Process)在图片中添加噪声,犹如墨滴逐渐扩散开来。这个过程用于训练阶段;
- 反向过程(Reverse Diffusion Process)去除图片中的噪声,犹如一片浑浊的水逐渐逆转,时间倒流回到一滴墨汁的状态。这个过冲用于生成阶段。
前向过程时,对图像逐步施加噪点,直至图像变成完全的高斯噪声图。然后在反向过程中,从高斯噪声逐渐还原为某一张图像,而反向过程,则是生成图像的过程,图像生成是靠不断地去除噪点。首先给定一个全高斯噪点图 ,通过训练好的 U-Net 网络估算的噪点逐步去噪,直至最终复现出图像。
Stable Diffusion
Diffusion 扩散模型和其它生成模型的区别是,它不是直接地从图像到潜变量、再从潜变量到图像的一步到位,它是一步一步地逐渐分解、逐渐去噪的过程。这也导致了 Diffusion 的缺点,即在反向扩散过程中需要把完整尺寸的图片输入到 U-Net 网络,这使得当图片尺寸以及随机时间步长足够大时,Diffusion 运行得将会非常缓慢,系统算力耗费巨大。于是为了解决这一问题 Stable Diffusion 应运而生了。
Stable Diffusion 本身并不是一个模型,而是一个由多个模块和模型组成的系统架构,它由三大核心部件组成,每个组件都是一个神经网络系统,也称为三大基础模型:
1. CLIPText 用于文本编码,使文本数字化:
- Input:输入文本(提示词 Prompt);
- Output:77 token embeddings vectors,每个 token 向量有 768 个维度;
2. Image information creator 图像信息创建器 用于逐步处理/扩散被转化到潜空间中的信息:
- Input:文本嵌入和由噪点组成的起始多维矩阵(是一种结构化的数字列表,也称为张量 Tensor);
- Output:处理后的信息矩阵;
3. AutoEncoder Decoder (主要是一个VAE:Variational AutoEncoder )使用处理后的信息矩阵解码绘制出最终图像,把潜空间的运算结果解码成实际图片维度:
- Input:处理后的信息矩阵,维度:4, 64, 64;
- Output:生成的图像,维度:3, 512, 512 即 RGB三个通道、和两维像素尺寸。
CLIPText 文本编码器
CLIPText 是一个 Text Encoder 文本编码器,就是之前这个图中深蓝色模块,它本身是一个特殊的 Transformer 自然语言模型,它把输入的文本提示词生成下的 Token embeddings 矩阵。embedding 是指将高维度的数据(可以是文字、图片、声音等)映射到低维度空间的过程,其结果也可以称为 embeddings。
CLIP,全称是 Contrastive Language-Image Pre-Training,中文的翻译是:通过语言与图像比对方式进行预训练,可以简称为图文匹配模型,即通过对自然语言理解,和对计算机视觉分析,并最终对语言和图像之间的一一对应关系进行比对训练,然后产生一个预训练的模型,以便能为日后有文本参与的生成图像的任务所使用。
CLIP 本身也是一个神经网络,它将 Text Encoder 从文本中提取的语义特征和 Image Encoder 从图像中提取的图像特征进行匹配训练,即不断调整两个模型内部参数, 使得模型分别输出的文字特征值和图像特征值能让对应的“文字-图像”经过简单验证确认匹配。
Image information creator 图像信息创建器
这个模块就是 Stable Diffusion 稳定扩散架构的核心武器,是它比以前的 Diffusion 版本能够获得更多性能提升的地方。此组件反复迭代运行多步(Steps)来生成图像信息。Steps 数值通常默认为 50 或 100。
图像信息创建器完全在“潜在空间”中工作,这使得它比以前在像素空间中工作的效率提高了64倍。从技术上讲,这个组件由一个 U-Net 神经网络和一个调度算法组成。
Image Information Creator 模块内部是至少是 50 个U-Net 组成的迭代串联模块组合,经过训练的噪点预测器 U-Net 可以预测噪点和该噪点所处的强度级别(Noise amount),那么这个 U-Net 就有能力移除这些噪点,以生成每一步迭代的结果,即含有更少噪点的图像,直至最后生成不含噪点的完美的图像。
Image Decoder 图像解码器
图像解码器,实际上是一个 AutoEncoder Decoder 自动编码器(主要是一个VAE:Variational AutoEncoder ),它根据从图像信息创建器传递过来的信息绘制图像。它只在之前的 Diffusion 过程完全结束后才运行一次,即把潜空间中的图像信息解码生成最终的像素图像。