Stable Diffusion之最全详解图解

1. Stable Diffusion 稳定扩散模型简介

Stable Diffusion 是 Diffusion 扩散模型中最先进的模式( Diffusion 有一些早期版本,比如: 原始Diffusion、Latent Diffusion)。它采用了更加稳定、可控和高效的方法来生成高质量图像。在生成图像的质量、速度和成本上都有显著的进步,因此该模型可以直接在消费级显卡上实现图像生成,可达至少 512*512 像素的图像。最新的 XL 版本可以在 1024*1024 像素的级别上生成可控的图像,生成效率也比以往的 Diffusion 扩散模型提高了30倍。目前 Stable Diffusion 的应用已经不局限于图像生成领域,它还被广泛应用于自然语言处理、音频视频等生成领域。

1.1 Stable Diffusion 发展的历史

Stable Diffusion 这个模型架构是由 Stability AI 公司推于2022年8月由 CompVis、Stability AI 和 LAION 的研究人员在 Latent Diffusion Model 的基础上创建并推出的。其核心技术来源于 AI 视频剪辑技术创业公司 Runway 的首席研究科学家 Patrick Esser,以及慕尼黑大学机器视觉学习组的 Robin Rombach 这两位开发者在计算机视觉大会 CVPR22 上合作发表的潜扩散模型(Latent Diffusion Model)的研究(论文:https://arxiv.org/abs/2112.10752 )。

Patrick Esser(左)、Robin Rombach(右)

而,Latent Diffusion Model 是对早在2015年就提出的原始 Diffusion Model 的革命性升级改造。有关 Diffusion 模型的原始框架可以在这篇文章中详细了解《Diffusion 扩散模型》。

虽然,坊间最近大面积流传着 Stable diffusion 其实是抄袭 Runway 的 Latent diffusion 的代码,并且 Stability AI 的老板 Emad Mostaque 被福布斯扒皮说他学历造假等丑闻,但这一点也没有耽误 Stable diffusion 的持续火爆,并且继续获得大部头的融资。

Stability AI 的老板 Emad Mostaque

至于 Stable diffusion 是否真的抄袭 Latent diffusion 目前尚没有明确的结论,但一个不争的事实是,Stable diffusion 相对于 Latent diffusion 来说进步确实不多,可以说基本都集中在了算力基础大大提升、训练数据大大增加、数据质量大大改善等“大力出奇迹”上,而并非什么架构本质的升级换代。

但,到目前为止,我们使用的 Stable diffusion WebUI 仍然是基于 Stability AI 公司发布的 Stable diffusion 架构。所以,让我们仍然沿用这一称呼“Stable diffusion”来进行讲解。

1.2 “浅空间 Latent Space”的重要性!

Stable diffusion 相比 Latent diffusion 主要有以下几点改进:

  • 训练数据:Latent Diffusion 是采用 Laion-400M 数据训练的,而 Stable Diffusion 是在 Laion-2B-en数据集上训练出来的。 “2B-en”是 20 亿个图像及英文对照文本的意思,确切的说是包含 23.2 亿个。明显后者用了更多的训练数据,而且后者还采用了数据筛选来提升样本数据质量,即采用了 Laion-Aesthetic,一个 120M 的训练子集,以专门选择美学评分较高的图像用于文生图任务。
  • Text Encoder:Latent Diffusion 采用一个随机初始化的 Transformer 来编码 text(这个 Transformer 就是 GPT 用的那个 Transformer,“GPT”的最后一个字母“T”,我单独写过一篇文章来详细介绍它:《“GPT”到底是什么,三个字母应该怎样翻译!》)。而 Stable Diffusion 采用一个预训练好的 Clip text encoder 来编码 text,预训练的 text model 往往要优于从零开始训练的模型。
  • 训练尺寸: Latent Diffusion 是在 256x256 分辨率数据集上训练,而 Stable Diffusion 是先在256x256分辨率上预训练,然后再在 512x512 分辨率上微调优化的,而现在 XL 版本则采用了 Laion-High-Resolution 训练集,一个规模为 170M,图像分辨率大于 1024 的高分辨率训练子集,用于超分辨率任务。

可以看出来,改进确实不是特别大。其中一个最重要的核心“Latent”并没有被改变,还一直被 Stable Diffusion 所沿用着,那么这个“Latent”到底是什么意思呢。可以说 Latent Diffusion 是 Stable Diffusion 的鼻祖,因为它首次采用了“浅空间 Latent Space”中高效处理数据的方法,解决了原始 Diffusion 模型效率低下的问题。它内部的 U-Net 网络是在“潜空间”的低维度中进行运算的,这极大地降低了内存消耗和计算的复杂度。例如,一个 512*512 像素的照片图像,数据表达为(3,512,512),即 RGB 三通道 *512*512 像素的图像数据规模,数据体积在 786432 之上。而在潜空间中则会被压缩成(4,64,64),数据体积为 16384,内存消耗将会减少到原来的 64 分之 1。这个给模型的运行带来了极大的高效性与普及性。Stable Diffusion 自然也继承了 Latent Diffusion 的这个核心优势。(有关“浅空间 Latent Space”的具体讲解,请参考此篇:《到底什么是“Latent Space 潜空间”?》)

接下来,我们将部分参考几位技术大牛对 Stable Diffusion 的文章内容,尤其是 Jay Alammar 在其博客上针对 Stable Diffusion 解构所配的十分简明扼要的拓扑图来讲解。

Jay Alammar 的博客账户

2. Stable Diffusion 稳定扩散模型详细结构

Stable Diffusion 稳定扩散模型可以被应用在许多领域,但在 AIGC 设计领域,我们仅关注它的两个主要方面:

第一个是文生图(text2img)。下图展示了一套文本和对应生成的图像。这套文本就是 Prompt 提示词: paradise cosmic beach。

提示词“paradise cosmic beach”通过Stable Diffusion 模型生成对应图像

第二个是改变图片。很明显,改变图片需要的是输入一张图片,还有用来改变图片的提示词。对应的例子是在原有图像上+提示词:Pirate ship,生成一张变化的图。

在原有图像上+提示词:“Pirate ship”,生成一张变化的图

其实 Stable Diffusion 本身并不是一个模型,而是一个由多个模块和模型组成的系统架构,它由三大核心部件组成,每个组件都是一个神经网络系统,也称为三大基础模型:

1. CLIPText 用于文本编码,使文本数字化:

    • Input:输入文本(提示词 Prompt);
    • Output:77 token embeddings vectors,每个 token 向量有 768 个维度;

2. U-Net + Scheduler 用于逐步处理/扩散被转化到潜空间中的信息:

    • Input:文本嵌入和由噪点组成的起始多维矩阵(是一种结构化的数字列表,也称为张量 Tensor);
    • Output:处理后的信息矩阵;

3. AutoEncoder Decoder (主要是一个VAE:Variational AutoEncoder )使用处理后的信息矩阵解码绘制出最终图像,把潜空间的运算结果解码成实际图片维度:

    • Input:处理后的信息矩阵,维度:4, 64, 64;
    • Output:生成的图像,维度:3, 512, 512 即 RGB三个通道、和两维像素尺寸。

2.1 CLIPText 文本编码器

首先,让我们看一下 CLIPText,它是一个内涵编码器的文本理解组件( Text Understander 图中蓝色模块),它将文本信息转换为用数字表达的信息,以便让机器能够理解提示词文本的语义。

文本理解组件 Text Understander (蓝色模块)本质上是一个编码器 Encoder

这个文本理解组件如果按照技术结构组成来说,可以理解为一个文本编码器(Encoder),它是一个特殊的 Transformer 语言模型(技术术语: CLIP 模型的 Text Encoder 文本编码器)。它的输入是文本,输出则为数字表达的矩阵,即用 Embedding 的方式来表达提示词中的一连串文本中的每个 token,每个 token 对应一组 Embedding 向量,一连串的 token 组合到一起就形成了一个 Embedding 的矩阵,下图中蓝色网

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值