Stable Diffusion组成

发布时间 2023-12-20 09:29:26作者: 梅丹隆

image.png

一、Text Understander(蓝色部分)

将文字转换成某种计算机能理解的数学表示

  • text understander是个特别的Transformer语言模型(例如clip,可参考Clip介绍
  • text understander的输入是人类语言(token),输出是一系列的向量(token embeddings,每个向量有768维),这些向量的语义对应着我们输入的文字
  • text understander将输出传递给图像生成器(Image Generator

image.png

代表语义的向量(就比如上面的蓝色3*5方格)

二、Image Generator

分为两个子模块

1、图片信息生成器(粉色部分)

粉色的模块是Stable Diffusion的核心,也是Stable Diffusion和其他diffusion模型最大的区别,很多性能上的提升就来源于此。

  • 图片信息生成器不直接生成图片,而是生成的较低维度的图片信息,也就是所谓的隐空间信息(information of latent space)
  • 再将下图中这个隐空间信息输入到(下图中黄色的)解码器(Decoder)里,就可以成功生成图片了

image.png

这个隐空间信息在下面的流程图中表现为那个粉色的4*3的方格

  • Stable Diffusion主要引用的论文“latent diffusion”中的latent也是来源于隐变量中的“隐”(latent)
  • 一般的diffusion模型都是直接生成图片,并不会有先生成隐变量的过程,所以普通的diffusion在这一步上需要生成的信息更多,负荷也更大。因而之前的diffusion模型在速度上和资源利用上都比不过Stable Diffusion

1.1、隐空间(Latent Space)

"隐空间"(Latent Space)是指在机器学习和深度学习中,数据经过降维、编码或其他转换过程后所处的低维空间。在这个空间中,原始数据的一些隐藏特征得以体现,可以用于数据生成、特征抽取或其他任务。在 stable diffusion 的上下文中,隐空间通常用于表示输入数据的潜在表示,以便于模型学习数据的内在结构和特征。

个人理解:进行向量运算的地方

架构

image.png
潜在扩散模型结构

U-Net

卷积神经网络(Convolutional Neural Network,CNN),这种网络结构主要用于图像分割(Image Segmentation)任务,可以有效地提取图像的特征并进行精确的分割。

Stable Diffusion 中主要用于噪声预测
image.png
整个UNet是由一系列ResNet构成的,每一层都是上一层的输出

ResNet

在深度学习中,ResNet是一种常用的神经网络结构,它通过引入残差模块来解决深度神经网络训练过程中的梯度消失和梯度爆炸问题。每个残差模块内,输入不仅会传递给下一层,还会与下一层的输出进行相加,形成一个“短路连接”,这就是所谓的“残差连接”。
在Stable Diffusion模型中,ResNet作为编码器,可以将输入的高维数据(如图像)编码为低维的隐向量;作为解码器,可以将低维的隐向量解码为高维的输出数据。ResNet的这种特性使其在处理图像、音频等高维数据时具有很好的性能。

Stable Diffusion模型中,主要用作编码器和解码器。对图片进行降噪处理

Attention

attention 中将语义融入Latent,以便下一个ResNet处理过程中融入生图信息
image.png

1.2、图片生成器小结

  1. Text Understander输入转换后的语义向量特征
  2. 初始化随机噪音(随机初始化的多维数组组成的噪音)
  3. 发送到UNet神经网络
  4. 在潜空间内,运行多个step,逐步处理信息。
    1. 在一次降噪过程中,UNet多次进行crossattention操作
    2. 其中crossattention包括:
      1. ResNet:对图片进行降噪的解码器
      2. Attention:将语义融入latent,以便下一个ResNet处理过程中融入这些信息
  5. 输出经过处理的信息数组(去噪的隐变量(4,64,64))

2、图像解码器(黄色部分)

从图片信息生成器(Image Information Creator)中接过图片信息的隐变量,将其升维放大(upscale),还原成一张完整的图片

根据图像信息创建图像,只在过程结束时运行一次

三、总结

image.png

模块 功能 输入 输出
Text Encoder 将人类语言转换成机器能理解的数学向量 人类语言 语义向量(77,768)
Image Information Creator 结合语义向量,从纯噪声开始逐步去除噪声,生成图片信息隐变量 噪声隐变量(4,64,64)+语义向量(77,768) 去噪的隐变量(4,64,64)
Image Decoder 将图片信息隐变量转换为一张真正的图片 去噪的隐变量(4,64,64) 一张真正的图片(3,512,512)