位置: IT常识 - 正文

【翻译】图解Stable Diffusion(sta翻译中文)

编辑:rootadmin
【翻译】图解Stable Diffusion 原文信息

推荐整理分享【翻译】图解Stable Diffusion(sta翻译中文),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sttu,sta中文,sttu,stcture,sta翻译中文,sta图片,stl 图,sta图片,内容如对您有帮助,希望把文章链接给更多的朋友!

翻译自作者V2 Nov 2022版本。

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

作者博客:@Jay Alammar

这是我翻译这位大佬的第五篇文章了。

带引用标签的内容 属于我自己加的,和原作者无关,如有漏无欢迎批评指正。 尽量保持原文意思的意译。

原文翻译

AI最近比较吸引人的一个方向是图像生成。从文本描述中生成图像,某种意义上也意味着人类创造艺术的方式的转变。

Stable Diffusion的发布是这一发展的里程碑,因为它的存在让普通用户使用高性能模型成为可能。

高性能模型:图像质量高、生成速度快并且相对来说对内存等资源的要求较小。

在试过AI图像生成后,你肯定想知道其背后原理。

本文就是对Stable Diffusion工作原理的简要介绍。

Stable Diffusion非常灵活,可以用不同的方式进行图像生成。

我们先来看一下只用文本来生成图像(text2img)。上图向我们展示了输入文本通过Stable Diffusion的生成的结果。

除了从文本中生成图像之外,另一种主要的生成方法是修改图片,输入是文本和图像。

比如下图,输入一张图片,再加上文字,图片就可以根据文字内容修改图像。

现在让我们深入了解一下。解释一下不同的组件之间是如何作用的,以及图像生成中选项、参数的含义。

Stable Diffusion的组成部分

Stable Diffusion是由几个组件和模型共同组成的,不是一个单一模型。

当我们深入了解的时候,我们首先可以看到一个文本理解组件,它将文本信息转化为数字表示,用于捕获文本中的信息。

刚才我们是从更高层面看的整个模型,接下来本文会深入讲一下机器学习的细节。

其中的文本编码器是一个特殊的Transformer语言模型,其实就是CLIP模型的文本编码器。文本编码器接受输入文本,输出代表每个单词或token的向量。然后将这些信息提供给图像生成器。

图像生成要经过两个阶段:

1. 图像信息生成器

这个组件是Stable Diffusion技术的秘密武器。它的实现是Stable Diffusion暴打前人模型获得更好的性能的关键。

这个组件通过多个步骤来生成图像信息。步骤 这个是Stable Diffusion的参数,通常默认为50或100。

图像信息生成器完全在图像信息空间(或潜空间)中运行。我们稍后会详细讨论这意味着什么。这个特性使Stable Diffusion比以前在像素空间中工作的扩散模型更快。在技术是线上,这个组件由一个U-Net神经网络和一个调度算法组成。

“扩散”一词描述了在这个组件中发生的事情。信息一步步被处理,最后生成高质量的图像(生成这一步是由下一个组件图像解码器进行的)。

2. 图像解码器

图像解码器 用 信息生成器中获取的信息 画出图像。它只在整个画图过程结束时运行一次,产生最终的图像。

通过这个,我们可以看到组成Stable Diffusion的三个主要组件(每个组件都有自己的神经网络):

ClipText:用于文本编码。

输入:文本。

输出:77个标记嵌入向量,每个向量有768个维度。

UNet+调度器:在信息(潜在)空间中逐步处理扩散信息。

输入:文本嵌入和由噪声组成的起始多维数组(结构化数字列表,也称为张量)。

输出:处理后的信息张量。

自动编码器-解码器使用处理后的信息数组绘制最终图像。

输入:处理后的信息数组(维度:(4,64,64))

输出:生成的图像(维度:(3, 512, 512),即(红色/绿色/蓝色,宽度,高度))

所以什么是“扩散”?

“扩散”指的是下图中粉色这一块组件“图像信息生成器”中发生的处理过程。该组件获取能表示输入文本信息的token嵌入和一个随机初始化的图像信息张量(aka 潜变量),然后用它们生成一个信息张量,把这个信息张量交给图像解码器,去生成最终的图像。

这个过程是一步一步进行的,逐步添加相关信息。想更直观的了解这个过程的话我们可以去检查随机潜变量那个张量,可以看到它逐步转变为图像噪声。这个检查过程需要借助图像解码器进行。

作者意思是,这个扩散过程是一步一步进行的,初始时候潜变量张量是随机的,每一步都给它加上一点文本相关信息。怎么知道它是逐步进行的?我们可以检查处理过程中的潜变量张量的变化,把其中一步的张量放到图像解码器中去生成,可以看到生成的东西从随机噪声变为我们想要的东西。

整个扩散过程需要很多步,每个步骤都对输入的潜变量矩阵进行操作,并生成下一步的潜变量矩阵,生成的这个潜变量矩阵会比前一步生成结果更符合输入信息,也会更像模型从训练集中获取的视觉信息。

通过下图我们可以直观地看到这些潜变量即集合每一步都添加了什么信息。

整个处理过程如下图:

我们可以看到第二步和第四步效果尤其惊人,就好像一堆噪声中突然就显示出了轮廓。

扩散步骤是如何工作的

扩散模型图像生成的核心要依赖于强大的计算机视觉领域的模型。在足够大的数据集的基础上,这些模型可以学会很多复杂运算。扩散模型通过如下方式建模问题以实现图像生成:

假设我们有一个图像,我们首先生成一些噪声,然后将这些噪声添加到图像上。

这里是广义的噪声,不只是声音上的狭义噪声。对于图像来说,照片中的噪点导致图像模糊,我们就可以认为这些噪点是当前图像上的噪声。

我们可以将这看成是一个训练示例。之后我们使用同样的方法去创建更多的训练示例,然后用这些示例去训练我们图像生成模型的核心组件。

虽然上图例子展示了从图像到噪音图的一些噪音值只有四步(0步不添加噪音,第4步将图像破坏为完全噪音),但实际上我们可以很容易控制给图像添加多少噪音,因此我们可以将整个过程分散到数十个步骤中,为数据集中的每个图像创建数十个训练示例。

【翻译】图解Stable Diffusion(sta翻译中文)

有了这个数据集,我们就可以训练噪声预测器了。训练完后会得到一个在特定配置下运行时可以生成图像的预测器。如果你接触过机器学习,那训练步骤看起来应该很熟悉。

接下来我们来看看 Stable Diffusion 是如何生成图像的。

通过降噪生成图片

训练好的噪声预测器,接受一张带噪图片和噪声步长作为输入,输出是它预测的噪声。

预测出来噪声之后,如果我们从带噪图片中减去这个噪声,那我们得到的图像就会得到一张和原始图片接近的图。(当然这里的“图”指的不是图像本身,而是图像服从的分布,这个分布是图像像素的分布方式,决定了天空通常是蓝色并高于地面,人们有两只眼睛,猫……)

如果模型训练集的图片质量比较高,那训练出来的模型产生的图像也会比较好看。比如 Stable Diffusion用到了LAION Aesthetics训练集。如果我们在 logo 图像上对其进行训练,那么我们最终会得到一个 logo 生成模型。

laion-datasets/laion-aesthetic.md at main · LAION-AI/laion-datasets (github.com)

项目官网:https://laion.ai/projects/

到这里我们就讲完了关于扩散模型图像生成的过程,主要是根据Denoising Diffusion Probabilistic Models描述的。现在你已经掌握了扩散的基本概念。你不仅了解了 Stable Diffusion,还了解了DALL·E 2 和谷歌 Imagen 的主要组件。

注意嗷,到目前为止,我们描述的扩散过程生成的图像不使用任何文本数据。如果我们直接用这个模型,它会生成好看的图,但我们无法控制它生成的是什么东西,可能是金字塔,可能是猫,还是其他任何东西。在接下来的内容中,我们讲一下如何将文本提示加入到图像生成过程中,以便控制模型生成的图像类型。

速度提升:扩散在压缩数据中进行而不是在图像上进行

为了加快图像生成的过程,稳定扩散(Stable Diffusion)论文并不直接对像素图像进行扩散过程,而是对图像的压缩版本进行扩散。该论文称之为“转移到潜空间”。

压这种压缩(以及之后的解压缩/绘制)是通过自编码器实现的,自编码器使用编码器将图像压缩到潜在空间中,然后解码器可以重构潜在空间上压缩后的信息获得原图像。

现在,正向扩散过程是在压缩的潜在空间中完成的。噪声片段是应用于这些潜变量的噪声,而不是像素图像。因此,噪声预测器实际上是训练在压缩表示(潜空间)中预测噪声的。

正向过程(使用自编码器的编码器)中我们生成训练噪声预测器所需的数据。训练完毕后,我们就可以通过运行逆向过程(使用自编码器的解码器)来生成图像。

这两个流程在LDM/Stable Diffusion论文的图3中是这么画的:

这张图右边部分还展示了“条件”组件,这个组件是模型生成图像过程中增加文字提示的,现在让我们往下深挖这个图像的文本提示组件:

文本编码器:一种 Transformer 语言模型

Transformer 语言模型作为语言理解组件,能够接受文本提示词并生成 token embeddings。Stable Diffusion 模型使用的是 ClipText(基于 GPT 的模型),而论文中用的是BERT。

谷歌的 Imagen 论文表明,语言模型的选择对图像生成质量是非常重要的。你换个更大的图像生成组件 不如 换个更大的语言模型 对生成图像的质量的影响大。

早期的 Stable Diffusion 模型仅使用了 OpenAI 发布的预训练模型 ClipText。未来模型可能转向新发布的更大的 CLIP 变体 OpenCLIP。(更新于 2022 年 11 月,详情见 Stable Diffusion V2 uses OpenClip。与仅含有 630 万文本模型参数的 ClipText 相比,OpenCLIP 文本模型参数多达 3.54 亿。)

CLIP是如何训练的

CLIP 模型是在图像-文本数据对上训练的。可以将该数据集想象成下图中的形式,只不过该数据集包含了4亿张图像和相应的说明:

实际上,CLIP数据集是网络上抓取的图像及其“alt”标签上的文本。

CLIP 是图像编码器和文本编码器的结合。简单来说,训练过程可以简化为将图像和其说明进行编码。

然后使用余弦相似度比较它们的嵌入向量。

当我们开始训练时,即使文本正确地描述了图像,相似度计算出来也会很低。

所以我们更新这两个模型,以便下一次嵌入它们时,生成的嵌入向量更加相似。

使用较大的batch size在整个数据集上重复这个过程,我们最终得到编码器能够生成嵌入向量,在这些向量中,一张狗的图片和句子“一张狗的照片”是相似的。就像在Word2vec中一样,训练过程还需要包括图像和文本描述不匹配的样本对作为负样,并且需要模型在计算这些负样本的时候给它们较低的相似度分数。

将文本信息融入图像生成过程

为了将文本加到图像生成过程中,我们必须调整噪声预测器,让它能接受文本作为输入。

我们的数据集现在再加上一项:编码的文本。

由于我们在潜在空间中进行计算的,因此输入图像和预测噪声都在潜在空间中。

为了更好地理解文本token在U-net中的使用方式,让我们进一步讲一下U-Net。

无文本的U-net噪声预测器

首先让我们看一下不使用文本的扩散Unet的输入和输出如何:

我们可以看到:

U-net是一系列层,用于转换潜在张量每个层都在前一层的输出上操作一些输出通过残差连接添加到网络的后续处理中在每层中会把时间步转换为时间步嵌入向量

带文本的U-net噪声预测器

现在让我们看看如何修改预测器,让它能加上文本内容。

我们需要其支持文本输入(术语:文本控制),主要是在ResNet块之间添加一个注意力层。

请注意,ResNet块不会直接看文本是什么。但是,注意力层可以将这些文本表示合并到潜在表示中。现在,下一个ResNet就可以在其处理中过程中利用这些整合的到潜在表示中的文本信息了。

结语

我希望这篇文章能让你对Stable Diffusion工作原理有一个初步认识,还有很多其他概念,我相信如果你了解了上边讲的内容,那你会很容易理解其他本文中没提到的概念。

下边是我发现的一些比较有用的资源,可以对其进行进一步了解。

其他资源

我有一个一分钟的YouTube短片,介绍如何使用Dream Studio和Stable Diffusion生成图像。

Stable Diffusion with 🧨 Diffusers (huggingface.co)

The Annotated Diffusion Model (huggingface.co)

How does Stable Diffusion work? – Latent Diffusion Models EXPLAINED - YouTube

Stable Diffusion - What, Why, How? - YouTube

论文原文:High-Resolution Image Synthesis with Latent Diffusion Models - Computer Vision & Learning Group (ommer-lab.com)

如果想深入了解其中的数学原理What are Diffusion Models? | Lil’Log (lilianweng.github.io)

观看fast.ai的技术视频Lesson 9: Deep Learning Foundations to Stable Diffusion, 2022 - YouTube

本文链接地址:https://www.jiuchutong.com/zhishi/299321.html 转载请保留说明!

上一篇:51 种 AI 工具,生活、编程、内容创建都应该使用它(ai的工具介绍)

下一篇:High-resolution image reconstruction with latent diffusion models from human brain activity

  • realme gt neo2屏幕亮度怎么调节(realmegtneo2屏幕亮度多少尼特)

    realme gt neo2屏幕亮度怎么调节(realmegtneo2屏幕亮度多少尼特)

  • win10图标大小怎么调节(win10图标大小怎么设置注册表)

    win10图标大小怎么调节(win10图标大小怎么设置注册表)

  • vivos9支持的5G频率有哪些(vivos9支持几个5g频段)

    vivos9支持的5G频率有哪些(vivos9支持几个5g频段)

  • 苹果平板wlan和cellular的区别(苹果平板wlan和cellular什么意思)

    苹果平板wlan和cellular的区别(苹果平板wlan和cellular什么意思)

  • 麒麟990比麒麟980提升了吗(麒麟990比麒麟980性能提升多少)

    麒麟990比麒麟980提升了吗(麒麟990比麒麟980性能提升多少)

  • 手机怎样拍抖音短视频(手机怎样拍抖音?)

    手机怎样拍抖音短视频(手机怎样拍抖音?)

  • 该内存不能为read(该内存不能为read,要终止程序)

    该内存不能为read(该内存不能为read,要终止程序)

  • word不能编辑的解决办法是什么(word不能编辑的视图)

    word不能编辑的解决办法是什么(word不能编辑的视图)

  • 局部截屏电脑快捷键是什么(电脑截局部图快捷键ctrl加什么)

    局部截屏电脑快捷键是什么(电脑截局部图快捷键ctrl加什么)

  • 换尾插对手机有影响吗(手机换了尾插还能用多久)

    换尾插对手机有影响吗(手机换了尾插还能用多久)

  • 苹果手机排线松了会有什么症状(苹果手机排线松了修一下多少钱)

    苹果手机排线松了会有什么症状(苹果手机排线松了修一下多少钱)

  • 拼多多待支付怎么催付(拼多多待支付怎么取消)

    拼多多待支付怎么催付(拼多多待支付怎么取消)

  • soul怎么有的人不能私聊了(为什么soul上的人突然消失了)

    soul怎么有的人不能私聊了(为什么soul上的人突然消失了)

  • qq提交作业后修改老师知道吗(qq提交作业后修改老师能看到时间吗)

    qq提交作业后修改老师知道吗(qq提交作业后修改老师能看到时间吗)

  • 微信是什么字体(微信是什么字体几号字)

    微信是什么字体(微信是什么字体几号字)

  • 刚买的笔记本电脑怎么下软件(刚买的笔记本电脑充电要注意什么)

    刚买的笔记本电脑怎么下软件(刚买的笔记本电脑充电要注意什么)

  • 陌陌几天可以视频(陌陌几天可以视频聊天)

    陌陌几天可以视频(陌陌几天可以视频聊天)

  • 小米9se有呼吸灯吗(小米9se有呼吸灯嘛)

    小米9se有呼吸灯吗(小米9se有呼吸灯嘛)

  • iphone11怎么关闭前置美颜(iphone11怎么关闭勿扰模式)

    iphone11怎么关闭前置美颜(iphone11怎么关闭勿扰模式)

  • oppo的nfc在哪(oppo手机的nfc在哪个位置)

    oppo的nfc在哪(oppo手机的nfc在哪个位置)

  • 苹果mt762cha是什么型号(iphone mt762za/a)

    苹果mt762cha是什么型号(iphone mt762za/a)

  • 哈罗助力车自动充电吗(哈罗助力车自动扣费)

    哈罗助力车自动充电吗(哈罗助力车自动扣费)

  • 小米手环4能用热水泡吗(小米手环4能用4G吗)

    小米手环4能用热水泡吗(小米手环4能用4G吗)

  • 小程序里音频怎么下载(小程序音频怎么导出来手机)

    小程序里音频怎么下载(小程序音频怎么导出来手机)

  • kindle oasis3和2的区别(kindle oasis1 2 3区别)

    kindle oasis3和2的区别(kindle oasis1 2 3区别)

  • 验证应用没反应怎么办(验证应用没反应怎么解决)

    验证应用没反应怎么办(验证应用没反应怎么解决)

  • scanpay是什么意思(scanpay-sla)

    scanpay是什么意思(scanpay-sla)

  • airpods兼容安卓吗(airportspro 安卓兼容)

    airpods兼容安卓吗(airportspro 安卓兼容)

  • 怎么让手机桌面上时间和日期显示出来(怎么让手机桌面显示时间)

    怎么让手机桌面上时间和日期显示出来(怎么让手机桌面显示时间)

  • 怎样安装全民k歌(全民k歌app怎么下载)

    怎样安装全民k歌(全民k歌app怎么下载)

  • Vue|内置指令(vue内置指令实验总结)

    Vue|内置指令(vue内置指令实验总结)

  • 职工福利费计税税率
  • 房地产公司自用房屋销售土地增值税计算
  • 啥子是增值税
  • 所得税费用怎么算分录
  • 怎么交税费
  • 制造业的加工费可以放制造费用的二级科目加工费吗
  • 金税四期怎么监控银行流水
  • 进项税额转出冲红
  • 个税申报时提示扣缴单位无有效的税费种认定信息
  • 盘盈固定资产属于企业的会计差错
  • 资产类低值易耗品
  • 商业收入会计分录
  • 进口缴纳关税
  • 进口货物报关费可以计入制造费用
  • 进项税发票不认证可以吗
  • 从关联企业获得非工资报酬怎么缴纳个税?
  • 财会【2016】22号文
  • 专票开错了可以作废吗
  • 该期已经申报此税种且数据已提交,不能预约扣款
  • 企业盈利所得税交多少
  • 增值税申报表能更正申报吗
  • 工程款主营业务成本
  • 日记账的填制
  • 简易计税进项税额转出公式
  • 职工养老金怎么交费
  • 个人取得经济补偿金个人所得税计算
  • microsoft阻止应用启动
  • 2020年计提印花税怎么做账
  • 冲销多计提个税怎么做账
  • 固定资产可以一次性抵扣进项税吗
  • 王者荣耀电脑版怎么键盘操作
  • 银行保证金账务处理流程
  • php的核心
  • 在windows 7中
  • 电脑前面板耳机没声音怎么设置bios
  • 股本减少的账务怎么处理
  • vue组件引入外部js
  • conda操作
  • 销售建材行业
  • 银行回单打回来会计要做什么
  • 固定资产清理需要交企业所得税吗
  • python导入模块的语句
  • mongodb数据库操作题
  • 入库时的会计分录
  • 登记会计账簿的实训总结
  • 增值是什么意思解释
  • 工程物资月末必须结转吗
  • 购销合同印花税计税依据
  • 劳务合同如果不发工资怎么办
  • 其他应收款审计说明怎么写
  • 建筑业异地预缴税款怎么纳税申报
  • 事业单位购入
  • 企业购房需要缴纳土地税么吗
  • 差额征税发票可以税前扣除吗
  • 劳务派遣的工资是谁发的
  • 代金券消费怎么入账
  • 收到稳岗补贴要交税吗
  • 生产车间的保险有哪些
  • 小规模附加税减半征收什么时候开始
  • 赠送的产品价格为发票金额为零怎么入库
  • centos 6.6安装教程
  • windows8装 .NET 3.5 时出现0x800F0907错误解决方法
  • win8怎么安装微信
  • linux的free命令详解
  • window八
  • win8任务栏设置在哪
  • Extjs中DisplayField的日期或者数字格式化扩展
  • shell脚本的fi
  • vue复用node_module
  • ubuntu nodejs
  • Unity3D游戏开发pdf
  • python的cumprod
  • 终于实现的图片
  • android布局教程
  • Python遍历循环
  • jquery图片轮播代码
  • android天气预报课程设计报告
  • 国家税务总局青海省税务局
  • 淄博市地税局局长
  • 消费税的纳税人是买方还是卖方
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设