【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

这篇具有很好参考价值的文章主要介绍了【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【AIGC】Stable Diffusion的建模思想、训练预测方式快速

在这篇博客中,将会用机器学习入门级描述,来介绍Stable Diffusion的关键原理。目前,网络上的使用教程非常多,本篇中不会介绍如何部署、使用或者微调SD模型。也会尽量精简语言,无公式推导,旨在理解思想。让有机器学习基础的朋友,可以快速了解SD模型的重要部分。如有理解错误,请不吝指正。

大纲

  1. 关键概念
  2. 模型结构及关键组件
  3. 训练和预测方式

关键概念

名词解释

Stable Diffusion

之所以叫Stable,是因为金主公司叫StabilityAI。

其基础模型是Latent Diffusion Model(LDM),也是本文主要介绍的部分。

模型任务

  1. text-2-img:输入文本描述、输出图像
  2. img-2-img:输入图片及其他文本描述,输出图像

总的来说,不论是输入是文字还是图片,都可以称为是“condition”,用于指引图像生成的“方向”。因此,SD模型的任务,可以统称为是cond-2-img任务。

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

模型结构与关键组件

模型结构

LDM论文结构图,初看时会有点懵,但稍微理解后还是非常清晰准确的。先初步介绍几个大的模块。建议把这张图截图固定在屏幕上,再继续浏览下面的内容。

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

整体输入输出

上图中最左侧的 x x x x ~ \widetilde{x} x 是模型的输入与输出,形如 [ W , H , C ] [W, H, C] [W,H,C]的三维张量,代表一张图像的宽、高和通道数。

需要注意,这里的输入 x x x,并不是模型img-2-img中的输入图像,而是模型训练时的原始图像输入。img-2-img的输入图像,是上图中最右侧的Conditioning模块中的images。

像素空间与隐空间

所谓空间,可以理解为数据的表示形式,通常有着不同的坐标轴。

  • 像素空间(Pixel Space),上图左侧,红框部分。通常是人眼可以识别的图像内容。
  • 隐空间(Latent Space),上图中央,绿框部分。通常是人眼无法识别的内容,但包含的信息量与像素空间相近。

像素空间到隐空间

输入的图像 x x x,经过Encoder(图中蓝色的 E \mathcal{E} E),转换为另一种shape的张量 z z z,即称为隐空间。

从压缩角度理解:图像经过转换后,产生的新张量是人眼无法识别的。但其包含的信息量相差不大,数据尺寸却大幅缩小,因此可以看做是一种图像数据压缩方式

隐空间到像素空间

经过模型处理后的隐向量输出 z z z(特指绿框左下角的 z z z),经过Decoder(图中蓝色的 D \mathcal{D} D),转换回像素空间。

隐空间Diffusion操作

对应图中绿色Latent Space框的上半部分,包括以下三步:

  1. 图像经过Encoder压缩后,得到隐向量表示 z = E ( x ) z=\mathcal{E}(x) z=E(x)隐向量
  2. 从1~1000的均匀分布中,随机采样一个整数 T T T,称为扩散步数
  3. 对向量 z z z T T T次高斯噪声,满足分布 N ( 0 , β t ) N(0, \beta_t) N(0,βt),得到 z T z_T zT向量

在这个操作中,有一些有趣的特性:

噪声收敛

加噪声次数足够多时,理论上会得到一组符合高斯分布的噪声。利用这个特性,在预测阶段我们就不需要执行Diffusion操作,只需要采样一组高斯分布的噪声,即代表了 z T z_T zT

高斯噪声可加性

当我们需要得到任意时刻的 z T z_T zT时,可以直接从 z 0 z_0 z0以及一系列 β t \beta_t βt计算得到,只需要采样一次噪声。这部分的具体公式推导,可以参考由浅入深了解Diffusion Model - 知乎 (zhihu.com)。

隐空间Denoising操作

对应图中绿色框的下半部分,包括以下步骤:

  1. 输入 z t , t , c o n d z_t,t,cond zt,t,cond给U-Net结构,预测出一个噪声 ϵ θ ( z t , t , c o n d ) \epsilon_{\theta}(z_t,t,cond) ϵθ(zt,t,cond),shape与 z t z_t zt一致
  2. 使 z t − 1 = z t − ϵ θ ( z t , t , c o n d ) z_{t-1} = z_t - \epsilon_{\theta}(z_t,t,cond) zt1=ztϵθ(zt,t,cond),重复上一步骤,直至获得 z 0 z_0 z0隐向量
  3. 使用Decoder得到输出图像, x ~ = D ( z 0 ) \widetilde{x} = \mathcal{D}(z_0) x =D(z0)

条件Conditioning

对应图中最右边灰白色框,输入类型包括text、images等。在Conditioning模块中,会执行以下步骤:

  1. 这些“附加信息”会通过对应的编码器 τ θ \tau_\theta τθ,转换成向量表示
  2. 转换后的向量,会输入给U-Net,作为其中Attention模块的K、V输入,辅助噪声的预测

在这个模块中,有几个有趣的问题:

为什么需要Conditioning

由于“噪声收敛”特性,当噪声加得比较多时, z T z_T zT已经趋近于一个“纯噪声”了,但训练过程需要比对输入图像 x x x和输出图像 x ~ \widetilde{x} x 的相似度。如何从一个“纯噪声”,还原回与输入图像相似的图像,就必须要给模型提供额外的信息指引,这就是Conditioning的作用。

关键组件

VAE(Variational Auto Encoders)

在LDM中,如何将原始图片“压缩”转换至隐空间,经过处理再转换回来,即使用VAE的Encoder和Decoder。这个模块是预训练好的,在LDM训练时固定住参数。

原理

  1. 原始张量输入,经过非常简单的网络结构,转换成较小的张量
  2. 在Latent张量上,加一点点噪声扰动
  3. 用对称的简单网络结构,还原回原始大小
  4. 对比输入前后的张量是否相似

特点

  1. 网络计算复杂度比较低
  2. Encoder和Decoder可以分开使用
  3. 无监督训练,不需要标注输入的label
  4. 有了噪声扰动之后,Latent Space的距离具有实际物理含义,可以实现例如“(满杯水+空杯子)/ 2 = 半杯水”的操作

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

CLIP

文本信息如何转换成张量,靠的是CLIP模块。这个模块是预训练好的,在LDM训练时固定住参数。

训练方式

图像以及它的描述文本,经过各自的Encoder转换为向量表示,希望转换后的向量距离相近。经过训练后,文本描述可以映射到向量空间的一个点,其代表的物理含义与原始图像相近。

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

假设无预训练

开个脑洞,假如没有这个模块,直接将文本token化后,去Embedding Table中查表作为文本张量,理论上也是可以训练的,只不过收敛速度会慢很多。

因此,这里使用一个预训练text-2-embedding模块,主要目的是加速训练。CLIP的训练数据集,也选择了和LDM的数据集的同一个(LAION-5B的子集),语义更一致。

模型标识解释

我们经常会看到类似“ViT-L/14”的模型名,表示一种CLIP的结构。具体的,ViT表示Vision Transformer,L表示Large(此外还有Base、Huge),14表示训练时把图像划分成14*14个子图序列输入给Transformer。

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

U-Net

作为LDM的核心组件,U-Net是模型训练过程中,唯一需要参数更新的部分。在这个结构中,输入是带有噪声的隐向量 z t z_t zt、当前的时间戳 t t t,文本等Conditioning的张量表示 E E E,输出是 z t z_t zt中的噪声预测。

模型任务

U-Net的任务,就是从 z t z_t zt中预测出噪声部分 ϵ t \epsilon_t ϵt,从而得到降低噪声后的 z t − 1 = z t − ϵ t z_{t-1}=z_t - \epsilon_t zt1=ztϵt,直到获得 z 0 z_0 z0。下图是一个可视化示意图,实际上,我们去噪的 z t z_t zt是隐向量空间的数据,人眼无法识别。

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

模型结构

U-Net大致上可以分为三块:降采样层、中间层、上采样层。之所以叫U-Net,是因为它的模型结构类似字母U。

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

降采样层

  1. 时间戳 t t t转换为向量形式。用的是“Attention is All you Need”论文的Transformer方法,通过sin和cos函数再经过两个Linear进行变换
  2. 初始化输入 X = c o n v ( c o n c a t ( z t , E ) ) X = conv(concat(z_t, E)) X=conv(concat(zt,E)),其中 c o n v conv conv是卷积, E E E是Conditioning
  3. 重复以下步骤(a~c)多次,将输入尺寸降至目标尺寸(如上图的 4 × 4 4\times4 4×4
    1. 重复以下两步多次,训练多个ResBlock和SpatialTransformer层,输入值 X X X的尺寸不变
      1. 输入上一层的输出 X X X和时间戳向量,给ResBlock
      2. ResBlock的输出,与 E E E一起输入给SpatialTransformer,在这里考虑到text等信息
    2. 重复多次3~4步,
    3. 通过卷积或Avg-Pooling进行降采样,缩小 X X X的尺寸

【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式
【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

中间层

很简单,ResBlock + SpatialTransformer + ResBlock,输入 X X X尺寸不变。

上采样层

大部分步骤与降采样层一致,只有以下两点不同

  1. 输入 X X X需要拼上对应降采样层的输出,称为skip connection,对应U-Net结构图中横向的箭头
  2. 把降采样步骤,换成使用卷积或插值(interpolate)方式来上采样,使得 X X X的尺寸增大

输出

上采样层的输出,会经过normalization + SiLU + conv,得到U-Net的最终输出,即噪声的预测值,尺寸保持与输入 z t z_t zt一致。

训练方式

模型更新方式

LDM模型需要训练的部分,只有U-Net的参数。训练的方式,可以简单总结为:

  1. 输入一张图片 x x x,以及它的文本描述等Conditioning,一个随机的整数 T T T
  2. 经过Encoder压缩、Diffusion加噪声,得到 z T z_T zT隐向量
  3. 结合Conditioning,使用U-Net,进行 T T T次去噪,得到预测值 z 0 z_0 z0向量
  4. 使用Decoder还原回 x ~ \widetilde{x} x ,计算 x x x x ~ \widetilde{x} x 之间的差距(KL散度),得到模型更新的loss

模型预测方式

  1. 随机一个高斯噪声,作为 z T z_T zT向量
  2. 输入text等Conditioning,使用U-Net进行指定次数 T T T的去噪操作
  3. 使用Decoder还原回 x ~ \widetilde{x} x ,得到图像输出

训练、预测过程,在论文中的伪代码为下图所示。
【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式

展望

下一篇文章,将会讨论以下几个更深入的内容:

  1. ControlNet、LoRA等插件的实现
  2. 各种Conditioning Context是如何转换为张量的
  3. 训练的数据集情况

参考

The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)

【原创】万字长文讲解Stable Diffusion的AI绘画基本技术原理 - 知乎 (zhihu.com)

Diffusion Models:生成扩散模型 (yinglinzheng.netlify.app)

由浅入深了解Diffusion Model - 知乎 (zhihu.com)

How does Stable Diffusion work? - Stable Diffusion Art (stable-diffusion-art.com)

[2006.11239] Denoising Diffusion Probabilistic Models (arxiv.org)

CompVis/latent-diffusion: High-Resolution Image Synthesis with Latent Diffusion Models (github.com)文章来源地址https://www.toymoban.com/news/detail-481675.html

到了这里,关于【AIGC】Stable Diffusion原理快速上手,模型结构、关键组件、训练预测方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【AIGC】 快速体验Stable Diffusion

    stable Diffusion是一款高性能的AI绘画生成工具,相比之前的AI绘画工具,它生成的图像质量更高、运行速度更快,是AI图像生成领域的里程碑。 推荐阅读:Stable diffusion干货-运作机制 纵观全网,目前找到的最简单的安装方法: 三分钟完成Stable Diffusion本地安装 安装好后,打开

    2024年02月12日
    浏览(51)
  • 【AIGC系列】Stable Diffusion 小白快速入门课程大纲

    本文是《Stable Diffusion 从入门到企业级应用实战》系列课程的前置学习引导部分,《Stable Diffusion新手完整学习地图课程》的课程大纲。该课程主要的培训对象是: 没有人工智能背景,想快速上手Stable Diffusion的初学者; 想掌握Stable Diffusion核心技术,进行商业应用的创业者; 希望

    2024年02月09日
    浏览(55)
  • AIGC:文生图模型Stable Diffusion

    Stable Diffusion 是由CompVis、Stability AI和LAION共同开发的一个文本转图像模型,它通过LAION-5B子集大量的 512x512 图文模型进行训练,我们只要简单的输入一段文本,Stable Diffusion 就可以迅速将其转换为图像,同样我们也可以置入图片或视频,配合文本对其进行处理。 Stable Diffusion的

    2024年02月15日
    浏览(42)
  • 【AIGC】Stable Diffusion的模型微调

    为什么要做模型微调 模型微调可以在现有模型的基础上,让AI懂得如何更精确生成/生成特定的风格、概念、角色、姿势、对象。Stable Diffusion 模型的微调方法通常依赖于您要微调的具体任务和数据。 下面是一个通用的微调过程的概述 : 准备数据集 :准备用于微调的数据集。

    2024年02月19日
    浏览(47)
  • 【AIGC】Stable Diffusion的模型入门

    下载好相关模型文件后,直接放入Stable Diffusion相关目录即可使用,Stable Diffusion 模型就是我们日常所说的大模型,下载后放入**webuimodelsStable-diffusion**目录,界面上就会展示相应的模型选项,如下图所示。作者用夸克网盘分享了「大模型」 链接:https://pan.quark.cn/s/bd3491e5199

    2024年02月20日
    浏览(44)
  • 【AIGC】Stable Diffusion之模型微调工具

    推荐一款好用的模型微调工具,cybertron furnace 是一个lora训练整合包,提供训练 lora 模型的工具集或环境。集成环境包括必要的依赖项和配置文件、预训练脚本,支持人物、二次元、画风、自定义lora的训练,以简化用户训练 lora 模型的流程。支持图片预处理、图片的标签编辑

    2024年02月20日
    浏览(54)
  • AI作画,国风油画风随心定制~ Stable Diffusion模型使用,三步就上手

    最近, AIGC (即 AI Generated Content ,是指利用人工智能技术来生成内容)真的是火出了天际。除了被挤到服务器满负荷的 chatGPT ,另一个也颇受瞩目的领域当属 AI 作画了。利用开源的一类“扩散( diffusion )”模型,你可以随时用AI进行绘画创作。除了常见的网页版注册-输入文

    2023年04月09日
    浏览(47)
  • 【小白】一文读懂AIGC模型之Stable Diffusion模型

      Stable Diffusion(SD)模型是一种基于Latent Diffusion Models(LDMs)的生成式模型,总共有1B左右的参数量,可以用于文生图、图生图、等任务中。   文生图任务是将文本输入到SD模型中,输出符合文本描述的图片;图生图任务是在输入文本的基础上,再输入一张图片,模型根

    2024年04月25日
    浏览(36)
  • Stable Diffusion的模型选择,采样器选择,关键词

    模型下载地址:https://civitai.com/,需要科学上网。 Deliberate:全能模型,prompt越详细生成的图片质量越好 Realistic Vision:现实模型,生成仿真式图片,它的真实性搭配任何人物的Lora,就可以生成照片级的作品 DreamShaper:V5版本有真实感和噪声抵消的优化,模型初衷是为了肖像画

    2024年02月04日
    浏览(45)
  • Stable Diffusion:一种新型的深度学习AIGC模型

    潜在扩散模型 | AIGC| Diffusion Model  图片感知压缩 | GAN | Stable Diffusion 随着生成型AI技术的能力提升,越来越多的注意力放在了通过AI模型提升研发效率上。业内比较火的AI模型有很多,比如画图神器Midjourney、用途多样的Stable Diffusion,以及OpenAI此前刚刚迭代的DALL-E 2。 对于研发

    2024年02月09日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包