stable diffusion为什么能用于文本到图像的生成

news2024/12/25 9:41:09

 

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

稳定扩散获得如此多关注的原因

如果你还没有看过它:稳定扩散是一个文本到图像的生成模型,你可以输入一个文本提示,比如“一个人一半尤达一半甘道夫”,然后接收一个图像(512x512像素)作为输出,如下所示:

Prompt: A person half Yoda half Gandalf, fantasy drawing trending on artstation

提示:一个人一半尤达一半甘道夫,幻想绘画在artstation上流行

结果看起来像 DALL-E 2 甚至更好,这本身已经很棒了,但它变得更好:它的计算效率非常高,可以在只需要大约 8-10GB 内存的消费级 GPU 卡上运行。它的训练效率也比过去的模型更高(唉,如果你不能使用很多GPU,它仍然太贵了)。

除了计算效率之外,结果看起来也很棒。事实上,正如上面引用的论文所解释的那样,它们在图像基准测试中达到了几个新的高分,例如图像修复和类条件图像合成。

最好的部分是:这是完全开源的。这包括代码、模型权重以及将其用于任何人的权利,目的是使任何人的创造力民主化。

关于它的名字 stable diffusion 的稳定部分是,名为 Stability 的赞助商提供了大量的 GPU 计算来将该模型训练到当前状态(在 512x512px 图像上进行了微调),然后将其开源。

深入了解:稳定扩散是如何工作的?

我非常喜欢分层学习,所以我们将从高级视图开始,然后深入研究各个部分。

高级视图

该系统分为三个部分:

  • 一种语言模型,它将您输入的文本提示转换为一种表示形式,该表示形式可以馈送到扩散模型并通过交叉注意力机制使用。他们使用带有转换器的“现成”BERT 分词器来处理这部分,所以我不会更深入地介绍它。
  • 扩散模型基本上是一个时间条件 U-Net(有关 U-Net 的详细信息,请查看此处),它采用一些高斯噪声和文本提示的表示作为输入,并对高斯噪声进行去噪以更接近您的文本表示。这重复了好几次,这就是为什么它被称为时间条件。
  • 一种解码器,用于获取扩散模型的输出并将其放大为完整图像。扩散模型在 64x64px 上运行,解码器将其带到 512x512px。

Illustration of the text to image generation. The language model creates an embedding of the text prompt. It's fed into the diffusion model together with some random noise. The diffusion model denoises it towards the embedding. This is repeated several times. Then in the end the decoder scales the image up to a larger size.

文本到图像生成的插图(由作者制作)。语言模型创建文本提示的嵌入。它与一些随机噪声一起输入扩散模型。扩散模型将其向嵌入方向去噪。这重复了几次。最后,解码器将图像放大到更大的尺寸。

扩散模型的高级视图

扩散模型的想法是拍摄图像并添加一点高斯噪声,从而获得略带噪点的图像。 然后重复该过程,因此在略微嘈杂的图像中,您再次添加一点高斯噪声以获得更嘈杂的图像。 重复此操作数次(最多 ~1000 次)以获得完全嘈杂的图像。

在这样做时,您知道每个步骤的原始图像(或略带噪点的图像)及其嘈杂的版本。

然后,你训练一个神经网络,该神经网络获取噪声较大的示例作为输入,并具有预测图像的降噪版本的任务。

Illustration of the diffusion process (made by author): going from left to right you keep adding gaussian noise to your image. Then the model learns from right to left to denoise it.

扩散过程的图示(由作者制作):从左到右,您不断向图像添加高斯噪声。然后,模型从右到左学习以对其进行降噪。

在许多不同的步骤中,神经网络学习以重复的方式对非常嘈杂的图像进行降噪以获得原始图像。

高水平培训

在训练过程中,还存在一个编码器,它是上述解码器的对应部分。

编码器和解码器共同构成一个自动编码器。

编码器的目标是将输入图像转换为具有高度语义的下采样表示,但去除了与手头图像不太相关的高频视觉噪声。

Illustration of the autoencoder (made by author): the encoder finds a much smaller representation of the image, but keeps the semantic meaning. The decoder regains the original version of the image from the efficient representation with as little loss as possible.

自动编码器的插图(由作者制作):编码器找到图像的更小的表示形式,但保留了语义含义。解码器以尽可能少的损失从有效表示中重新获得图像的原始版本。

这里的诀窍是,他们将编码与训练扩散模型解耦。这样,可以训练自动编码器以获得最佳图像表示,然后可以在下游的几个扩散模型上进行所谓的潜在表示(这只是以语义上有意义的方式表示的图像,但像素少 64 倍)。

这样一来,在像素空间上训练扩散模型时,在原始图像空间上的计算量需要比以前少 64 倍。这是完全相关的,因为正如我们稍后将看到的,扩散模型的训练和推理是最昂贵的部分。

因此,培训分两个阶段进行:

  • 训练自动编码器,用于处理图像表示的压缩和解压缩
  • 在自动编码器的编码器生成的潜在因素上训练扩散模型(这与文本表示/注意力部分相结合)

组件的详细视图

训练自动编码器

自动编码器的训练有两个损失:

  • 像素空间上的感知损失
  • 基于补丁的对抗性损失,可强制执行局部真实感并避免模糊

它通过一个因子对图像进行下采样,该因子已在论文中使用许多不同的值进行了测试,并且权衡了 OR 是好的。ff=4f=8

除了损耗之外,正则化还应用于自动编码器。这里可以使用两种不同的形式:

  • Kullback-Leibler 惩罚,用于将学习到的潜伏子与过去潜伏子的标准正态对齐,以确保潜伏子的方差不会太高
  • 解码器中的矢量量化层;这就像定义原型一样N

有时他们使用KL惩罚,有时在训练不同的扩散模型时使用向量量化。对我来说,尚不完全清楚何时一个或另一个更好。 似乎对于文本到图像合成模型,使用了KL惩罚。

扩散模型的训练

考虑到使图像产生噪声或在逆过程中对其进行降噪的连续步骤数,这可以描述为马尔可夫链,因为每个时间步骤仅取决于直接后继者,而没有其他任何内容。

Illustration of the training process. An image with existing caption is used for training. Noise gets added to the image in successive timesteps. The text caption gets embedded by the language model. The diffusion model receives a noisy version and the text embedding and needs to predict the previous time step of the image. Gradient descent is used on the pixel difference between the expected image and the prediction of the diffusion model.

扩散模型的训练过程图示(由作者制作)。具有现有标题的图像用于训练。噪声在连续的时间步长中添加到编码图像中。文本标题由语言模型嵌入。扩散模型接收图像的噪声版本和文本嵌入,并需要预测图像的上一个时间步长。梯度下降用于预期图像与扩散模型预测之间的像素差。

为了训练它,幸运的是,你有可以有效地生成的前向步骤,所以你可以确切地知道给定图像在时间步长和时间步长上看起来如何。NN+1

然后,将时间步长的图像传递到网络,并期望它返回时间步长的图像。对于损失,您考虑了网络预测与时间步长图像之间的像素差异。N+1NN

图像上的噪声越多,网络在不太相关的视觉特征上花费的就越多,因此通常在较早的时间步长比在较晚的时间步长采样的示例更多。

等等,但为什么这会产生所有这些创造性的艺术?!

所以,你们问自己的真正问题当然是:魔法从何而来?

正如我所描述的,它是一个复杂的系统,由三部分组成——自动编码器、文本嵌入的语言模型和潜在扩散模型。

所有这些部分都是在大量图像或图像/文本对上训练的,因此自动编码器和语言模型的嵌入非常复杂,涵盖了我们人类的大部分语义空间。然后,当通过新的文本提示将概念组合在一起时,这些概念会组合成一个涵盖这一点的嵌入。潜在扩散模型本身经过训练,可以从噪声中发现图像,但受这种嵌入的引导,因此它将创造性的嵌入概念推向图像表示。最后,解码器有助于将潜在表示带入更放大和人类可见的版本(并且它还在数百万张图像上进行了训练!

我认为魔力在于在培训期间学到的概念的重叠/可组合性。例如,有些图像是半男半女或类似的东西,所以学习了一半/一半的概念。许多其他图像都包含《星球大战》/尤达的部分内容,因此学习了尤达的概念。然后其他图像了解了甘道夫。当最终将所有这些组合到一个提示中时,系统会尝试将所有这些知识集成到最有可能看起来像这样的图像中。因此,创建了本文中的图像。

总结

意识到要加速扩散模型,您应该减少像素空间,因为它被反复使用(在马尔可夫链方法中),因此变得昂贵,这是向前迈出的一大步。事实上,它不仅减少了像素空间,而且通过预先的自动编码器学习了良好的表示/嵌入,它仍然具有所有语义和语义的视觉表示。

以单独的方式进行,以便单独训练自动编码器,从而可以灵活地训练多个不同的扩散模型,这些模型针对特殊任务进行了调整。

将其与交叉注意力步骤中的其他输入相结合,对于实现快速且具有视觉吸引力的文本到图像生成模型的惊人效果至关重要。

但是,除了使用文本提示之外,还可以使用其他输入/嵌入。例如,作者展示了如何使用粗略的分割草图,然后通过模型将其转换为美丽的图像,以及更多诸如从图像中删除人物之类的东西(想想Photoshop魔杖超级高级工具):

Taken from Figure 22 of the paper: latent diffusion model to remove objects from images.

摘自论文的图 22:从图像中去除物体的潜在扩散模型。

希望这篇关于稳定扩散的博客文章能让你对所使用的概念有一个很好的概述。

转载:stable diffusion为什么能用于文本到图像的生成 (mvrlink.com)

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

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

相关文章

jQuery中显示与隐藏

在我们jQuery当中,有多个显示隐藏的方法,本篇介绍一下hide()、show()、toggle() 在我们JS当中,或是CSS当中,我们常用到display:none或block; 在我们jQuery当中,我们该如何实现显示隐藏 在我们jQuery当中,我…

RK3568+Codesys+Xenomai实时软PLC运动控制解决方案

CODESYS软件架构 CODESYS软件分三层架构,可用下图来表示: 1、开发层 CODESYS Development System(具有完善的在线编程和离线编程功能)、编译器及其配件组件、可视化界面编程组件等,同时供用户可选的运动控制模块可使其…

stm32f407栈溢出导致跑程序异常

栈溢出,固件下载后,会运行异常。如下代码: 代码运行异常,进入debug,发现有hard fault的错: 因为栈已经溢出,一般MCU的栈地址都是向下增长的,stm32也是一样,stm32在启动文…

工业废水处理设备公司如何挑选

在选择工业废水处理设备公司时,需要从以下几个方面进行考虑: 公司实力和资质:选择具有相关资质和经验的废水处理设备公司,能够提供高质量的设备和服务。可以通过查询公司的官方网站、客户评价等信息来了解公司的实力和资质。设备…

关于Android Studio中开发Flutter配置

配置系统环境变量:path下 ,flutter的bin目录下 File->Settings->Languages&Frameworks->FlutterFile->Settings->Languages&Frameworks->DartFile->Settings->Languages&Frameworks->Android SDK 确认是…

amazon产品采集数据

导入需要的库:requests,BeautifulSoup,re,chardet requests用于发送HTTP请求;BeautifulSoup用于解析HTML;re用于正则表达式;chardet用于识别网页编码。 定义函数,接受URL参数&#…

华为防火墙ipsec vpn nat穿越2种场景配置案例

第一种方法,分部出口有nat设备,且总部用模版,总部外线为固定地址,分部出口可以无固定地址。 主要配置: 所有默认策略全部放行,具体怎么开策略可以等通后用命令dis firewall session table ver看 security-…

事务(本地事务与分布式事务)

事务 1 本地事务1.1 事务的特性1.2 事务的隔离级别1.3 事务的传播属性 2 分布式事务2.1 分布式事务基础2.1.1 CAP定理2.1.2 BASE定理 2.2 分布式事务的解决方案2.2.1 两阶段提交(2PC)2.2.2 TCC补偿式事务2.2.3 消息事务最终一致性 1 本地事务 1.1 事务的…

观测云产品更新 | 数据转发、监控器告警策略等优化

数据转发 数据查询时间组件优化,支持选择多个日期,并可以自定义开始时间和结束时间,时间精确到小时。 监控器 > 告警策略优化 1、「通知配置」逻辑调整为:针对单个异常等级配置通知单个或多个对象告警通知。 2、「恢复通知」…

Qt5多线程<12>

1.多线程的简单实现 <1> 在头文件threaddlg.h声明用于界面显示所需的控件,其代码如下: #ifndef THREADDLG_H #define THREADDLG_H#include <QDialog> #include <QPushButton> #include "workthread.h" #define MAXSIZE 5class ThreadDlg : publ…

redis数据倾斜如何解决

Redis数据倾斜主要是由于数据访问热点导致的&#xff0c;通常在执行事务操作或范围查询时发生。这会导致大量数据集中在某个实例上&#xff0c;使得集群负载不均衡。以下是一些解决Redis数据倾斜的方法&#xff1a; 避免在同一个键值对上保存过多的数据。可以将大的键值对拆分…

辐射骚扰整改思路及方法:对共模电流的影响?|深圳比创达电子EMC

某产品首次EMC测试时&#xff0c;辐射、静电、浪涌均失败。本篇文章就“原理探究&#xff1a;对共模电流的影响”问题进行详细讨论。 现在来研究左侧的磁场分布情况。分别对两根导线使用右手螺旋定则可以发现&#xff0c;两根导线的磁场均为顺时针方向&#xff0c;即磁场是互相…

合成数据在金融服务中的应用

人工智能在金融服务中有着广泛的应用&#xff0c;从流程自动化到聊天机器人和欺诈检测。据估计&#xff0c;到 447 年&#xff0c;银行从人工智能应用中节省的潜在成本总额将达到 2023 亿美元。 但是&#xff0c;其中一些应用程序有其局限性&#xff0c;因为财务数据是最敏感和…

Altium Designer学习笔记1

一、新建项目和文件&#xff1a; 1、新建Project项目&#xff1b; 2、新建原理图文件&#xff1b; 3、新建PCB项目&#xff1b; 在工程文件上点击右键&#xff0c;保存为&#xff0c;可以依次保存三个文件。选择需要保存的路径&#xff0c;新建文件夹。 依次是原理图文件、…

滑动变阻器的调节方法有哪些?

滑动变阻器是一种可以改变电阻值的电子元件&#xff0c;广泛应用于各种电子设备和电路中。其调节方法主要有以下几种&#xff1a; 1. 手动调节&#xff1a;这是最常见的调节方式&#xff0c;通过直接旋转滑动变阻器的旋钮&#xff0c;改变电阻丝在电路中的有效长度&#xff0c;…

Java带可视化数据大屏AI智慧工地源码

智慧工地管理系统是面向建筑工程施工企业提供的工地智能交互平台&#xff0c;基于云计算、物联网、人工智能等技术的应用&#xff0c;对现场人员、材料、机械、质量、安全等进行高效管控&#xff0c;以实现项目管理人员对现场的实时把控、及时预警、精准决策&#xff0c;从而为…

2023网络钓鱼状况报告:ChatGPT等工具致网络钓鱼电子邮件数量激增1265%

近日&#xff0c;SlashNext发布了《2023年网络钓鱼状况报告》&#xff0c;报告显示&#xff1a;自ChatGPT于2022年11月推出以来&#xff0c;网络钓鱼电子邮件数量激增1265%&#xff0c;这标志着网络犯罪依托于人工智能进入了一个新的时代。 该报告深入分析了2022年第四季度至2…

干货 | 移动端使用OpenGL转场特效的音视频合成应用

作者简介 jzg&#xff0c;携程资深前端开发工程师&#xff0c;专注Android开发&#xff1b; zx&#xff0c;携程高级前端开发工程师&#xff0c;专注iOS开发&#xff1b; zcc&#xff0c;携程资深前端开发工程师&#xff0c;专注iOS开发。 前言 近年来短视频的火爆&#xff0c;…

无线测温系统在电厂的必要性,保障电力系统稳定运行

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;采集关键电力设备接电的实时温度&#xff0c;克服有线温度监测系统存在的诸如线路多&#xff0c;布线复杂&#xff0c;维护困难等不足&#xff0c;将无线无源传感器与Zigbee无线通信技术相结合&#xff0c;将物联网技…

Python中的Socket编程

目录 一、概述 二、Socket的基本概念 三、Python中的Socket编程 四、Socket的高级功能 1、多路复用&#xff08;multiplexing&#xff09;&#xff1a; 2、非阻塞式IO&#xff1a; 3、SSL加密&#xff1a; 4、服务端编程&#xff1a; 五、Socket编程的常见问题及解决方…