关于稳定扩散最详细的介绍

news2024/11/27 0:49:54
推荐基于稳定扩散(stable diffusion) AI 模型开发的自动纹理工具: DreamTexture.js自动纹理化开发包 - NSDT

Stable Diffusion 用途广泛,因为它可以以多种不同的方式使用。首先,让我们关注仅从文本 (text2img) 生成图像。上图显示了一个示例文本输入和生成的图像(实际的完整提示在这里)。除了文本到图像之外,使用它的另一种主要方法是让它改变图像(因此输入是文本 + 图像)。

让我们开始了解一下,因为这有助于解释组件、它们如何交互以及图像生成选项/参数的含义。

稳定扩散的组成部分

Stable Diffusion 是一个由多个组件和模型组成的系统。它不是一个整体模型。

当我们深入研究时,我们可以做出的第一个观察是,有一个文本理解组件,它将文本信息转换为数字表示,以捕捉文本中的想法。

我们从高级视图开始,本文稍后将详细介绍机器学习。但是,我们可以说这个文本编码器是一种特殊的 Transformer 语言模型(技术上是:CLIP 模型的文本编码器)。它接受输入文本并输出一个数字列表,表示文本中的每个单词/标记(每个标记一个向量)。

然后将该信息呈现给图像生成器,该生成器本身由几个组件组成。

图像生成器经历两个阶段:

1-图像信息创建者

这个组件是Stable Diffusion的秘诀。与以前的型号相比,这是实现大量性能提升的地方。

此组件运行多个步骤以生成图像信息。这是 Stable Diffusion 接口和库中的 steps 参数,通常默认为 50 或 100。

图像信息创建者完全在图像信息空间(或潜在空间)中工作。我们将在后面的帖子中详细讨论这意味着什么。此属性使其比以前在像素空间中工作的扩散模型更快。从技术上讲,该组件由 UNet 神经网络和调度算法组成。

“扩散”一词描述了该组件中发生的情况。正是对信息的逐步处理最终生成了高质量的图像(由下一个组件,图像解码器)。

2-图像解码器

图像解码器根据从信息创建者那里获得的信息绘制图片。它仅在过程结束时运行一次以生成最终像素图像。

至此,我们看到了构成 Stable Diffusion 的三个主要组件(每个组件都有自己的神经网络):

  • 用于文本编码的 ClipText
    输入:text。
    输出:77 个标记嵌入向量,每个向量有 768 个维度。
  • UNet + Scheduler 在信息(潜在)空间中逐渐处理/扩散信息。
    输入:文本嵌入和由噪声组成的起始多维数组(结构化数字列表,也称为张量)。
    输出:经过处理的信息数组
  • 自动编码器解码器,使用处理后的信息数组绘制最终图像。
    输入:处理后的信息数组(尺寸:(4,64,64)) 输出:生成的图像(尺寸:(3,512,512),分别是(红/绿/蓝,宽度,高度))

扩散到底是什么?

扩散是发生在粉红色“图像信息创建者”组件内部的过程。通过表示输入文本的标记嵌入和随机起始图像信息数组(也称为潜在图像),该过程会生成一个信息数组,图像解码器使用该数组来绘制最终图像。

此过程以循序渐进的方式进行。每个步骤都会添加更多相关信息。为了获得对过程的直觉,我们可以检查随机潜伏数组,并看到它转化为视觉噪声。在这种情况下,目视检查是通过图像解码器。

扩散分多个步骤进行,每个步骤对输入的潜在数组进行操作,并生成另一个潜在数组,该数组更类似于输入文本和模型从模型训练的所有图像中获取的所有视觉信息。

我们可以可视化一组这些潜伏物,看看每一步都添加了哪些信息。

这个过程令人叹为观止。

在这种情况下,在步骤 2 和 4 之间发生了一些特别有趣的事情。就好像轮廓从噪音中浮现出来一样。

扩散的工作原理

使用扩散模型生成图像的中心思想依赖于我们拥有强大的计算机视觉模型这一事实。给定足够大的数据集,这些模型可以学习复杂的操作。扩散模型通过构建如下问题来生成图像:

假设我们有一个图像,我们产生一些噪点,并将其添加到图像中。

现在可以将其视为一个训练示例。我们可以使用相同的公式来创建大量训练示例,以训练图像生成模型的核心组件。

虽然此示例显示了从图像(量 0,无噪声)到总噪声(量 4,总噪声)的几个噪声量值,但我们可以轻松控制要添加到图像中的噪声量,因此我们可以将其分布在数十个步骤中,为训练数据集中的所有图像创建每个图像数十个训练示例。

有了这个数据集,我们可以训练噪声预测器,并最终得到一个伟大的噪声预测器,当在特定配置下运行时,它实际上会创建图像。如果您接触过 ML,则训练步骤应该看起来很熟悉:

现在让我们看看它如何生成图像。

通过去除噪点来绘制图像

训练有素的噪声预测器可以拍摄噪声图像和去噪步骤的数量,并能够预测一片噪声。

对采样噪声进行预测,因此,如果我们从图像中减去它,我们得到的图像更接近模型训练的图像(不是确切的图像本身,而是分布 - 像素排列的世界,天空通常是蓝色的,高于地面,人有两只眼睛,猫看起来有某种方式 - 尖尖的耳朵,显然不为所动)。

如果训练数据集是美观的图像(例如,训练 Stable Diffusion 的 LAION Aesthetics),那么生成的图像往往在美观上令人愉悦。如果我们在徽标图像上对其进行训练,我们最终会得到一个徽标生成模型。

到此结束,对扩散模型生成图像的描述主要如去噪扩散概率模型中所述。现在你已经有了这种扩散的直觉,你不仅知道了 Stable Diffusion 的主要组件,还知道了 Dall-E 2 和 Google 的 Imagen。

请注意,到目前为止,我们描述的扩散过程在不使用任何文本数据的情况下生成图像。因此,如果我们部署这个模型,它会生成漂亮的图像,但我们无法控制它是金字塔、猫或其他任何东西的图像。在接下来的部分中,我们将介绍如何将文本合并到流程中,以控制模型生成的图像类型。

速度提升:在压缩(潜在)数据上扩散,而不是像素图像

为了加快图像生成过程,Stable Diffusion 论文不是在像素图像本身上运行扩散过程,而是在图像的压缩版本上运行扩散过程。

这种压缩(以及后来的解压缩/绘画)是通过自动编码器完成的。自动编码器使用其编码器将图像压缩到潜在空间中,然后使用解码器仅使用压缩信息重建图像。

现在,前向扩散过程是在压缩潜伏物上完成的。噪声切片是应用于这些潜在粒子的噪声,而不是应用于像素图像的噪声。因此,噪声预测器实际上经过训练,可以预测压缩表示(潜在空间)中的噪声。

正向过程(使用自动编码器的编码器)是我们生成数据来训练噪声预测器的方式。训练完成后,我们可以通过运行反向过程(使用自动编码器的解码器)来生成图像。

LDM/Stable Diffusion 论文的图 3 中显示了这两种流:

该图还显示了“条件反射”组件,在本例中是描述模型应生成的图像的文本提示。因此,让我们深入研究文本组件。

文本编码器:转换器语言模型

Transformer 语言模型用作语言理解组件,该组件采用文本提示并生成令牌嵌入。已发布的 Stable Diffusion 模型使用 ClipText(基于 GPT 的模型),而论文使用 BERT。

Imagen的论文表明,语言模型的选择是一个重要的选择。与较大的图像生成组件相比,在较大的语言模型中交换对生成的图像质量的影响更大。


更大/更好的语言模型对图像生成模型的质量有显著影响。

早期的 Stable Diffusion 模型只是插入了 OpenAI 发布的预训练 ClipText 模型。未来的型号可能会切换到新发布的、更大的 CLIP OpenCLIP 变体(2022 年 2 月更新:没错,Stable Diffusion V354 使用 OpenClip)。这个新批次包括大小不超过 63M 参数的文本模型,而不是 ClipText 中的 <>M 参数。

如何训练 CLIP

CLIP 是在图像及其标题数据集上训练的。想象一个数据集看起来像这样,只有 400 亿张图像及其标题:


图像及其标题的数据集。

实际上,CLIP是根据从网络上抓取的图像及其“alt”标签进行训练的。

CLIP 是图像编码器和文本编码器的组合。它的训练过程可以简化为考虑拍摄图像及其标题。我们分别使用图像和文本编码器对它们进行编码。

然后,我们使用余弦相似度比较得到的嵌入。当我们开始训练过程时,即使文本正确地描述了图像,相似度也会很低。

我们更新了这两个模型,以便下次嵌入它们时,生成的嵌入是相似的。

通过在整个数据集中重复此操作,并且具有较大的批量大小,我们最终使编码器能够生成嵌入,其中狗的图像和句子“狗的图片”相似。就像在 word2vec 中一样,训练过程还需要包括不匹配的图像和标题的负面示例,并且模型需要为它们分配低相似度分数。

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

为了使文本成为图像生成过程的一部分,我们必须调整噪声预测器以使用文本作为输入。

我们的数据集现在包括编码的文本。由于我们在潜在空间中操作,因此输入图像和预测的噪声都在潜在空间中。

为了更好地了解文本标记在 Unet 中的使用方式,让我们更深入地了解 Unet。

Unet 噪声预测器的层(无文本)

让我们首先看一个不使用文本的扩散 Unet。它的输入和输出如下所示:

在里面,我们看到:

  • Unet 是一系列用于转换潜在数组的层
  • 每一层都对前一层的输出进行操作
  • 一些输出(通过残余连接)被馈送到网络后期的处理中
  • 时间步长被转换为时间步长嵌入向量,这就是在图层中使用的内容

带有文本的 Unet 噪声预测器的层

现在让我们看看如何改变这个系统,以包括对文本的关注。

我们需要对系统添加对文本输入的支持(技术术语:文本调节)的主要变化是在 ResNet 块之间添加一个注意力层。

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

结论

我希望这能让您对 Stable Diffusion 的工作原理有一个很好的初步直觉。还涉及许多其他概念,但我相信一旦您熟悉了上面的构建块,它们就更容易理解了。

转载:关于稳定扩散最详细的介绍 (mvrlink.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“箭在弦上”的边缘计算,更需要冷静和智慧

AI大模型、云游戏、自动驾驶、工业互联网等新一代数字技术&#xff0c;会给各行各业和社会经济生活带来巨大改善&#xff0c;这是大家都知道的。 要实现我们所期待的产业变化&#xff0c;一个完整的AI计算架构应该是&#xff1a;云侧端侧边缘侧&#xff0c;进行高效有序的协同。…

Mysql数据库 12.SQL语言 触发器

一、触发器&#xff08;操作日志表&#xff09; 1.介绍 不需要主动调用的一种储存过程&#xff0c;是一个能够完成特定过程&#xff0c;存储在数据库服务器上的SQL片段。 对当前表中数据增删改查的一种记录<日志表>&#xff0c;根据触发器自动执行&#xff0c;记录当前…

【阿里云】任务2-OSS对象存储教程(找我参加活动可获得京东卡奖励)

目录 前言说明第一步第二步第三步&#xff1a;开通并使用OSS传输加速三、清理第四步-提交作品第五步-提交记录到小程序 前言 本次任务是阿里云官方发出的&#xff0c;每个任务30软妹币&#xff0c;欢迎大家加入我的活动群&#xff0c;门槛很低&#xff0c;所有人都可以参加&…

kkFileView getCorsFile 任意文件读取漏洞(CVE-2021-43734)

kkFileView getCorsFile 任意文件读取漏洞 &#xff08;CVE-2021-43734&#xff09; 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: body"kkFileView" 漏洞复现1. 构造poc2. 读取文件 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提…

用于汽车主驱逆变器的NVVR26A120M1WST、NVVR26A120M1WSS、NVVR26A120M1WSB 1200V、碳化硅(SiC)模块

碳化硅&#xff08;SiC&#xff09;模块 – EliteSiC主驱逆变器功率模块 1200V&#xff0c;半桥&#xff0c;介绍 1、&#xff08;NVVR26A120M1WST&#xff09;功率模块是用于混合动力车&#xff08;HEV&#xff09;和电动车&#xff08;EV&#xff09;主驱逆变器应用的VE-Tra…

​​​​​​​​​​​​​​汽车网络信息安全分析方法论

目录 1.典型信息安全分析方法 1.1 HEAVENS威胁分析模型 1.2 OCTAVE威胁分析方法 1.3 Attack Trees分析方法 2. 功能安全与信息安全的关系讨论 与Safety的典型分析方法一样&#xff0c;Security也有一些典型的信息安全威胁分析方法(TARA分析)&#xff0c;根据SAE J3061、I…

C++: 类和对象(下) (初始化列表, 隐式类型转换, static成员, 友元, 内部类, 匿名对象)

文章目录 一. 再谈构造函数1. 构造函数体赋值2. 初始化列表3. explitcit 关键字 二. static 成员1. 概念2. 特性声明静态成员使用类的静态成员定义静态成员 三. 友元1. 友元函数2. 友元类 四. 内部类五. 匿名对象 一. 再谈构造函数 1. 构造函数体赋值 在创建对象时, 编译器通过…

一张数学地图带你尽览数学分支

我们在学校学习的数学可能也只是数学领域的冰山一角&#xff0c;作为庞大而多样的学科&#xff0c;我今天将通过一张数学地图带你尽览数学分支。 本数学地图对应的视频讲解地址如下&#xff1a; https://www.youtube.com/watch?vOmJ-4B-mS-Y 另外&#xff0c;由于图片较大&a…

STM32中断简介

中断系统 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行&#xff1b; 以上是中断的…

【Linux】JREE项目部署与发布

目录 一.jdk安装配置 1.1.传入资源 1.2. 解压 1.3. 配置 二.Tomcat安装 2.1.解压开启 2.2. 开放端口 三.MySQL安装 3.1.解压安装 3.2.登入配置 四.后端部署 今天就到这里了哦&#xff01;&#xff01;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.jdk…

半导体(芯片)制造工艺流程简单说

半导体行业是国民经济支柱性行业之一&#xff0c;是信息技术产业的重要组成部分&#xff0c;是支撑经济社会发展和保障国家安全的战略性、基础性和先导性产业&#xff0c;其发展程度是衡量一个国家科技发展水平的核心指标之一&#xff0c;属于国家高度重视和鼓励发展的行业。 …

ant design pro of vue怎么使用阿里iconfont

一 使用离线iconfont 首先需要生成图所有图标对应的js文件。如下图所示&#xff0c;将生成的js代码复制&#xff0c;在项目中创建一个js文件&#xff0c;将代码粘贴进去。这里我将js文件放在了src/assets/iconfont下面 然后&#xff0c;在main.js中引入文件&#xff0c;并进…

强化IP地址管理措施:确保网络安全与高效性

IP地址管理是网络安全和性能管理的关键组成部分。有效的IP地址管理可以帮助企业确保网络的可用性、安全性和高效性。本文将介绍一些强化IP地址管理的关键措施&#xff0c;以帮助企业提高其网络的安全性和效率。 1. IP地址规划 良好的IP地址规划是强化IP地址管理的基础。它涉及…

【操作系统】考研真题攻克与重点知识点剖析 - 第 2 篇:进程与线程

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

基于SSM框架的管理系统-计算机毕设 附源码 23402

基于SSM框架的管理系统 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。在目前的形势下&#xff0c;无论是从国家到企业再到家庭&#xff0c;计算机都发挥着其不可替代的作用&#xff0c;可以说…

【洛谷 P1012】[NOIP1998 提高组] 拼数 题解(贪心算法+字典序排序)

[NOIP1998 提高组] 拼数 题目描述 设有 n n n 个正整数 a 1 … a n a_1 \dots a_n a1​…an​&#xff0c;将它们联接成一排&#xff0c;相邻数字首尾相接&#xff0c;组成一个最大的整数。 输入格式 第一行有一个整数&#xff0c;表示数字个数 n n n。 第二行有 n n …

mac 安装 selenium + chrome driver

前言 使用 selenium 模拟浏览器渲染数据&#xff0c;需要依赖各浏览器的驱动才能完成&#xff0c;因此需要单独安装chrome driver 查看本地 chrome 浏览器的版本 可以看到我这里已经是 arm 架构下最新的版本了 下载对应的 chrome driver 访问下面的地址&#xff1a; Chrome…

集合贴3——智能客服系统

基础课17——智能客服系统-CSDN博客文章浏览阅读56次。近年来&#xff0c;实体客服机器人开始出现在银行办公厅、电信商务厅等场合&#xff0c;形成了网络智能客服、电话智能客服、实体客服机器人综合智能客服系统&#xff0c;这初步形成了一种新的产业形式。https://blog.csdn…

Verilog刷题[hdlbits] :Always nolatches

题目&#xff1a;Always nolatches Suppose you’re building a circuit to process scancodes from a PS/2 keyboard for a game. Given the last two bytes of scancodes received, you need to indicate whether one of the arrow keys on the keyboard have been pressed.…

Matlab使用cftool进行曲线拟合

第一步&#xff0c;导入要拟合的输入和输出数据 导入excel时&#xff0c;如果作为列矢量导入&#xff0c;则会将excel的数据按列导入&#xff0c;并且&#xff0c;默认将第一行的变量名作为每一列的矢量名。 第二步&#xff0c;打开插件curve fitting 在应用程序里打开&#…