抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一、引言

本文将以尽量减少数学知识点、多用类比的方式,帮助大家理解Stable Diffusion。

二、Stable Diffusion概述

严格来说,Stable Diffusion 是一个由几个组件(模型)构成的系统,而非单独一个模型。以最常见的文生图为例,当输入一句prompt,如“Cat, standing on the castle”,Stable Diffusion看似一步生成图片,但实际上经过三个大步骤。

  1. 文本编码
    用户输入的Prompt会被Text Encoder(文本编译器)编译成一个个的词特征向量,此步骤输出77个等长的向量,每个向量包含768个维度。可以简单理解为将文本转化为机器能识别的多组数字。

  2. 潜空间降噪
    这些特征向量会和一张随机图(可理解为布满电子雪花或充满信息噪声的图)一起放到Image Information Creator里。在此步骤,机器先将特征向量和随机图转化到 Latent Space(潜空间),然后根据特征向量将随机图“降噪”为一个“中间产物”。此时的“中间产物”是人类看不懂的一堆数字,但已包含如站在城堡上的猫的信息。

  3. 图片解码
    中间产物会被 Image Decoder(图片解码器)解码成一张真正的图片。简单理解,就是用户输入Prompt指令,机器按指令在潜空间里将随机图降噪为符合指令的图片。整个过程与其说是AI“生成”图片,不如说是“雕刻”。

SD完整的处理的过程如下:

  1. 输入文本,使用 CLIP 模型对文本进行编码,获得文本 Embedding
  2. 从潜空间生成噪声 Latent
  3. 将文本 Embedding 和 Latent 输入 UNet 模型,预测 Latent 中的噪声
  4. 将去除 Latent 中的噪声,去除噪声后的结果重新赋值为 Latent
  5. 重复步骤3、4
  6. 将 Latent 传入VAE解码器,得到最终图片
  7. 模型的核心是一个 UNet 噪声预测网络。不同于 GAN 直接从噪声中生成图片,Stable Diffusion 会进行多次预测噪声并降噪,最终生成图片。

三、Text Encoder:从文本到特征向量

CLIP模型原理

Stable Diffusion 常用的 Text Encoder 是OpenAI开源的 CLIP 模型,全称 Contrastive Language Image Pre-training(对比语言图像预训练)。CLIP 有 Text Encoder 将文本转化为特征向量,还有 Image Encoder 将图片转成特征向量,两向量越近,描述越接近图片内容,反之则越不相关。OpenAI 使用了 4 亿组图片文本对,对此模型进行了训练,最后训练出来的 CLIP 模型效果如下图所示。比如下图中第四行,描述是「一张斑点猫面部照片」,它与纵向第四张图最相关,相似度达到 0.31,与第一张书本的截图相似度只有 0.12。

向量的隐含特征

在 Stable Diffusion 里只使用 CLIP 的 Text Encoder 部分,因为它能将文本转化为与现实图片相关的特征向量。当输入 Cat 时,生成的图大概率是橘猫或斑点猫,是因为 Text Encoder 将 Cat 转化的77个等长向量 Embedding 里可能包含:

  • 形态特征:捕捉Cat的体型、头部形状、四肢位置等,帮助区分Cat与其他动物或物体。
  • 视觉特征:包含Cat的颜色、斑纹、眼睛形状等,帮助识别其外观特点。
  • 语义含义:包含与Cat相关的语义含义,如它是宠物、独立动物、与人类有亲密关系等,帮助理解其在人类文化和社会中的角色和意义。需注意,模型有些地方具有不可解释性,这些向量不一定包含这些特征,举例是为更好解释。

Embedding 又名 textual inversion 中文名:“嵌入或文本反转”。
在计算机科学中,Embedding是将高维数据映射到低维空间的过程。
在图像处理中,Embedding通常用于将图像转换为向量表示,以便进行机器学习和深度学习任务。

四、Image Information Creator:降噪

降噪步骤

在 Prompts 被模型理解之后,就是一个降噪的过程,U-Net 网络结构会进行不断地迭代,每一次迭代都去除一部分的噪声。
降噪过程在 Latent Space(潜空间)进行,会进行多 Steps(步)降噪,一般 Steps 越多图片质量越好,但耗时越长,这也与模型有关。

U-Net 一个 基于深度学习的卷积神经网络 ,主要用于图像分割任务,特别是生物医学图像的分割。 它由编码器(下采样路径)和解码器(上采样路径)两部分组成,形状呈U型,因此得名U-Net。这里不深入了解。

下图是第一个 Denoise (降噪) 过程的可视化:

看上去很复杂,但不要恐惧,我们只要懂加减乘除就能理解这张图:

Denoise内部机制

  1. 噪声预测器:Denoise 里有 Noise Predictor(噪音预测器),能预测随机图里的噪音。输入随机图、Prompt 的词特征向量和当前 Step 数,程序运行的是同一个 Denoise,需通过 Step 数告知预测器进行哪一步预测。
  2. 双路径预测
    • 橙色线:Noise Predictor 用随机图(如4X4的图)和Prompt词特征向量预测出噪声图B,这是根据词向量预测随机图里不需要的噪声,类比雕刻的废料。
    • 蓝色线:Noise Predictor 不使用Prompt词特征向量预测出噪声图C。
  3. 噪声处理
    • 用噪声图B减C得出图D,B包含“根据Prompt预测的噪声”+“根据随机图预测的噪声”,C是“根据随机图预测的噪声”,所以D是“根据Prompt预测的噪声”。
    • 将D噪声放大(乘以系数,在一些 Stable Diffusion 里以 CFG、CFG Scale 或 Guidance Scale 表示),再与噪声图C相加得到图E,这样做是为提高图片生成准确性,提高“根据Prompt预测的噪声”权重,此方法称 Classifier Free Guidance(无分类引导法)。
    • 用图A减图E得出新图,即“雕刻”过程,去掉不需要的噪声。
  4. 负向Prompt作用:输入负向Prompt时生成噪声图B2,用正向Prompt生成的噪声图B1减B2再减C得出D,意味着最终生成的图片会更远离B2,减掉更多与B2相关的噪声。

五、Image Decoder与潜空间(Latent Space)

潜空间概念

“潜空间”(Latent Space)是一个在机器学习和数据科学中经常出现的概念,特别是在生成模型如生成对抗网络(GANs)和变分自编码器(VAEs)等中。在这些上下文中,潜空间是一个高度抽象的、通常较低维度的空间,用于表示数据的一些内在特性。

VAE工作流程

图片先被 Image Encoder 编码成一组数据并压缩,如原图512*512,压缩后64*64,数据大幅减少,最后用 Image Decoder 还原,Encoder加 Decoder 组件称 Variational Auto Encoder(变分自编码器),简称VAE,所以 Image Decoder 在一些产品里也叫 VAE Decoder。

vae分两部分,称之为编码器和解码器。
vae编码器是指将图像从512*512*3编码为64*64*4(推理生成图片不需要这个,只在训练需要)。
vae解码器是指将图像从64*64*4解码为512*512*3(实际推理生成只需要解码)、图像在64*64*4这个分辨率上,称之为潜变量(又叫潜图像,latent,是人类无法理解的图像)。

VAE的优缺点

  • 优点
    • 效率提升显著,使用VAE后民用GPU能相对较快完成降噪运算,训练模型时间也更短。
    • 潜在空间维度比原始图像低得多,可更有效表示图像特征,在潜在空间操作和插值能更精细控制和编辑图像,提高生成图像质量和逼真度。
  • 缺点:编码再还原会导致数据丢失,且潜在空间维度低,可能无法完全捕捉原始数据所有细节和特征,导致还原图片奇怪。

评论