Stable Diffusion-生式AI的新范式

news2024/11/24 14:22:15

!

扩散模型(Stable Diffusion)现在是生成图像的首选模型。由于扩散模型允许我们以提示( prompts)为条件生成图像,我们可以生成我们所选择的图像。在这些文本条件的扩散模型中,稳定扩散模型由于其开源性而最为著名。

在这篇文章中,我们将把Stable Diffusion模型分解为构成它的各个组成部分。此外,我们还将了解稳定扩散的工作原理。

在这里插入图片描述

图1 使用Stable Diffusion从噪声中生成图像

熟悉Stable Diffusion的工作,将使我们也能理解其训练和推理的过程。在了解了Stable Diffusion的概念部分之后,我们将介绍它的不同版本和变化。

1. Stable Diffusion介绍

Latent Diffusion Model (LDM)是最初的文本-图像模型,稳定扩散模型(Stable Diffusion)是一种扩展。这意味着 "Stable Diffusion "也是一个文本-图像模型。

CompVis和RunwayML的原始开放源代码是基于Rombach等人的论文–“High-Resolution Image Synthesis with Latent Diffusion Models”。
在这里插入图片描述

图2.使用Stable Diffusion生成的戴帽子的狗的图像。

对扩散模型及其机制感到困惑吗?不要着急,本文将会使用PyTorch从头开始建立一个基本的扩散模型。

正如你现在可能已经猜到的,稳定扩散并不是唯一能生成图像的扩散模型。

在Stable Diffusion之前,有OpenAI的DALL-E 2。在这之后,谷歌发布了Imagen。这两个都是文本到图像的扩散模型。

这就提出了一个相关的问题–“稳定扩散与其他从提示语生成图像的扩散模型有何不同?”

1.1 Stable Diffusion与其他基于扩散的图像生成模型有何不同?

Stable Diffusion是在图像的潜在空间而不是在图像的像素空间工作的。
在这里插入图片描述
其他生成性扩散模型,如DALL-E 2和Imagen,在图像的像素空间上工作。这使得它们的速度变慢,而且在这个过程中,消耗了更多的内存。

自动编码器模型有助于创建这个潜在空间,它也作为模型中的噪声预测器。如果你看过之前的DDPM文章,那么你已经知道噪声预测器模型是LDM(潜伏扩散模型)中不可缺少的一部分。

在这一点上,我想到了另外几个问题。

  • UNet是稳定扩散模型中的一个组成部分/模型吗?
  • 该模型中还有其他组成部分吗?如果是的话,它们是什么?

2. Stable Diffusion模型的组成部分

我们可以将Stable Diffusion模型分解为三个主要部分:

  • 一个预先训练好的文本编码器
  • 一个UNet噪声预测器
  • 一个可变的自动编码器-解码器模型。解码器还包含一个用于生成最终高分辨率图像的Upsampler网络。
    但在训练和推理过程中,所有的组件都参与其中。在训练期间,使用编码器、UNet和预训练的文本编码器。而在推理过程中,预训练过的文本编码器、UNet和解码器都参与其中。

广义上讲,一个预训练的文本编码器将文本提示转换为embeddings。

UNet模型作为噪声预测器作用于潜在的空间信息。

自动编码器-解码器有两个任务。编码器从原始图像像素生成潜空间信息,解码器从文本条件的潜空间预测图像。

在这里插入图片描述

Stable Diffusion 的pipeline

3. 训练 Stable Diffusion

训练Stable Diffusion模型包括三个阶段(抛开反向传播和所有数学上的东西):

  • 根据prompt创建 token embeddings。从训练的角度来看,我们将文本prompt称为标题。
  • 用embeddings对UNet进行调节。潜在空间是使用自动编码器模型的编码器部分生成的。这被称为文本条件的潜空间。
  • UNet会在潜在空间上工作。
  • 从上述步骤中,UNet预测了添加到潜空间的噪声,并试图对其进行去噪处理。

3.1 Text Encoder

一般来说,在所有的扩散模型中,Text Encoder是一个大型的预训练的transformer语言模型。
Stable Diffusion使用CLIP的预训练Text Encoder部分进行文本编码。它把提示词作为输入,并输出77×768维的 token embedding

在77个tokens,75个是来自prompt的text tokens ,1个为start token,另外1个为end token。

在这里插入图片描述
其他预训练的语言transformers模型,如T5BERT也可以使用。但 "Stable Diffusion "使用CLIP

3.2 UNet噪声预测器

在UNet之前,autoencoder-decoder模型的编码器部分将输入图像转换为其潜在的表示。

现在,重要的是要记住,UNET只作用于编码后的latent 空间,根本不处理原始图像像素。当然,它是以文字提示为条件的。将文本提示添加到潜空间的过程被称为文本调节(text conditioning)。

在这里插入图片描述

图5.带有 text embedding 的噪声调节

不仅仅是文本调节(text conditioning), latent information也要经过一个噪音添加步骤,如上文所述。

从所有上述信息中,UNet试图预测添加到图像中的噪声。

在这里插入图片描述
但这还不是全部。UNet的架构比这更复杂。它包含了用于残差连接Residual layers和用于将文本信息合并到图像的潜在空间的Attention layers。
在这里插入图片描述

Figure 7. Noise prediction with text conditioning in Stable Diffusion.

在合并merging步骤之后,残余块可以利用embedded信息去噪。

UNet输出一个64×64(空间)维度的张量。

3.3 Autoencoder-Decoder 模型

如前所述,Autoencoder的编码器encoder部分从原始图像中创建潜伏空间。

最后,该模型的解码器Decoder 部分负责生成最终图像。

在这里插入图片描述

图8.解码器对64×64矢量进行上采样,生成最终的512×512维图像

解码器作用于4x64x64维的向量,生成3x512x512的图像。原始的Stable Diffusion(直到2.0版)默认生成512×512维的图像。

3.4 训练Stable Diffusion的完整过程

正如最初的LDM论文中所示,整个过程可以总结为以下图片。

在这里插入图片描述
我们可以看到,首先编码器是如何将图像编码到一个潜伏空间中的(上半部分右侧红色块)。并注意到我们如何用文本、语义图或甚至图像来调节潜空间。

QKV块代表了来自Transformer模型的交叉注意力。大的绿色块显示了UNet在潜空间上的工作,以预测噪音。

4 Stable Diffusion推理–从噪声和提示中生成图像

一旦我们有了训练好的Stable Diffusion模型,生成图像就会经历一个与训练稍有不同的过程。

在推理过程中,我们最初并没有图像。相反,我们必须使用text prompt来生成一个。此外,我们不需要自动autoencoder-decoder 网络的编码器部分。这就把推理部分归结为以下内容:

  • 预训练的文本编码器text encoder。
  • UNet噪声预测器。
  • 以及autoencoder-decoder网络的解码器部分。

4.1 从prompt中生成图像的过程

我们不向图像添加噪声,而是直接从纯高斯噪声开始。然后Stable Diffusion对其进行迭代去噪,生成最终的图像。我们可以控制去噪步骤的数量,这被称为采样步骤。

如果是一个纯扩散模型(不以文本提示为条件),那么这个过程将类似于以下情况:
在这里插入图片描述
但在这里,我们有一个文本提示text prompt,而噪音需要以文本提示为条件。因此,这个过程看起来像这样:

图11.Stable Diffusion推理过程

除了输入图像和编码器(我们不再需要了),其他每个组件都保持不变。

但是,我们在上面谈到了采样步骤。这在整个过程中是如何体现的呢?

这可以通过扩展UNet和展示去噪过程来更好地解释。

在这里插入图片描述
我们可以把上述过程称为反向扩散过程,因为该模型从噪声中生成了图像。

4.2 一些实际考虑的问题

下面是一些要点,以澄清关于推理阶段的几个概念:

  • 输入的提示不需要完全是75个字的长度。我们也可以提供更短和更长的提示。
  • 在推理过程中,UNet仍然会生成一个空间尺寸为64×64的图像。
  • autoencoder的解码器部分既是一个上采样器,也是一个超分辨率模型的组合。这就产生了最终的512×512的图像。
  • 从完全实用的角度来看,只要我们能负担得起GPU的内存,我们就可以生成任何分辨率的图像。

5. Stable Diffusion的不同版本

在这里,我们将讨论在众多的Stable Diffusion中一些比较显著的变化。

所有这些模型都是通过对基本的Stable Diffusion版本之一进行微调而得到的。

5.1 Arcane Diffusion

这种Stable Diffusion的变体在电视节目《Arcane》的图像上进行了微调。

在这里插入图片描述
在给模型提示的风格信息,就能生成对应风格的图像。

5.2 Robo Diffusion

Stable Diffusion的机器人扩散版本可以生成非常酷的机器人图像。

在这里插入图片描述

5.3 Open Journey

在这里插入图片描述
与基本的Stable Diffusion相比,这些图像更具艺术性和动态性。Openjourney模型已经在Midjourney的图像输出上进行了训练。

5.4 动漫效果

在这里插入图片描述

总结

在这篇文章中,我们介绍了稳定扩散的整个架构。除了训练和推理之外,我们还介绍了稳定扩散的实际应用效果。

正如你从这篇文章中所理解的那样,开源模型(如Stable Diffusion)让AI社区扩大了使用范围。从非常简单的角色开始,到不同艺术风格的复杂角色,这些模型让我们探索我们的创造力。此外,微调这些模型所需的计算量正在减少。几乎任何拥有非常普通的消费级GPU的人都可以微调稳定扩散模型。

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

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

相关文章

通用智能的瓶颈及可能的解决途径

通用智能是指能够在各种不同的任务和环境中灵活地适应和执行任务的智能。通用智能与特定任务的智能相反,后者只能在特定领域或任务中表现出色。通用智能的理论基础是人工智能领域的通用人工智能(AGI)研究,旨在设计出能够像人类一样…

【Java笔试强训 5】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥统计回文…

Zynq-7000、FMQL45T900的GPIO控制(三)---linux管脚编号计算

本文主要对在Linux下使用zynq-7000或者FMQL45T900控制MIO/EMIO 首先内核配置项 如下,这个不用太多关注,一般都是默认打开的 CONFIG_GPIO_SYSFSy CONFIG_SYSVIPCy CONFIG_GPIO_ZYNQy两者的控制都是流程都是一样的,在细节上又区别 首先都在…

Go | 一分钟掌握Go | 9 - 通道

作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 前言 在Java中,多线程之间的通信方式有哪些?记得吗&…

浪潮之巅 OpenAI有可能是历史上第一个10万亿美元的公司

淘金时代很像 如果你那个时候去加州淘金,一大堆人会死掉,但是卖勺子的人、卖铲子的人永远可以赚钱。所谓的shove and pick business。 大模型是平台型机会。按照我们几天的判断,以模型为先的平台,将比以信息为先的平台体量更大。…

带你深入学习k8s--(四) 控制器(k8s核心)

目录 一、概念 1、什么是控制器 2、控制器执行流程 3、控制器类型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滚 3、修改滚动更新策略 4、暂停与恢复 3、daemonset 4、job 5、cronjob 前言: 上一章我们说到,pod有…

C++——入门基础知识

0.关注博主有更多知识 C知识合集 目录 1.命名空间 1.1命名空间的定义 1.2命名空间的使用 1.3命名空间定义的补充 2.输入与输出 3.缺省参数 3.1全缺省参数 3.2半缺省参数 3.3缺省参数的补充 4.函数重载 4.1C为什么支持函数重载? 5.引用 5.…

Wine运行器3.2.1——Windows虚拟机模块支持非X86架构

不写太多啥了,详细介绍看这里就行:https://bbs.deepin.org/post/248098 更新内容 ※1、Windows 虚拟机安装工具支持非 X86 架构; ※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包; ※3、Windows 虚拟机安装…

【MATLAB图像处理实用案例详解(12)】——基于纹理特征的指纹识别方法

目录 一、指纹图像预处理1.1 图像对比度增强1.2 图像二值化1.3 图像滤波 二、指纹图像特征提取 指纹识别系统主要涉及4个步骤:指纹图像采集、图像预处理、特征提取、特征匹配。一开始,通过指纹读取设备取得图像,并对原始图像进行初步处理&…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 2 MapReduce and the New Software Stack

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 2 MapReduce and the New Software Stack Computing cluster means large collections of commodity hardware, including conventional processors (“compute nodes”) connected by Ethernet …

学习HCIP的day.03

目录 OSPF:开放式最短路径优先协议 OSPF的数据包 -- 5种 OSPF的状态机 OSPF的工作过程 OSPF的基础配置 关于OSPF协议从邻居建立成为邻接的条件 OSPF的接口网络类型 OSPF:开放式最短路径优先协议 无类别链路状态型IGP协议;由于其基于拓…

golang Gin实现websocket

golang使用 Gin实现 websocket,这里笔者重新搭建一个项目 1、创建项目安装依赖 项目名为 go-gin-websocket 在指定文件夹下,新建项目文件夹 go-gin-websocket 进入项目文件夹,打开cmd窗口,在项目(go-gin-websocket&a…

【Git 入门教程】第九节、Git的最佳实践

Git是一个强大的版本控制系统,可以帮助开发者管理和协调代码库。然而,正确使用Git并不总是容易。本文将介绍一些Git的最佳实践,以帮助开发者更好地利用Git来管理和协调代码库。 一、编写有意义的提交信息 在使用Git时,编写有意义…

Python编程IDE的选择

Python环境安装之后,接下来就是选择编写Python程序的编辑器了,这里就给大家推荐几种Python编辑器,我们简称这些编辑器为IDE。好的编程IDE可以提高编写代码效率,那咱话不多说,直接开始推荐! IDLE 首先&…

有人USR-M100边缘主动上报电流数据到TCP服务器

前两天跟强哥配置了有人的USR-M100模块,实现了采集的电流信号主动上报服务器的功能,昨天去第一污水厂配置了1台、第二污水厂配置了5台、第三污水厂配置了1台,能够将数据上报到甲方的云平台,这里记录一下配置过程,方便以…

推荐4款免费好用的chatGPT平台

1 ShellGPT 这是一款出色的客户端,无需APIkey和科学上网即可访问chatGPT3.5以及绘画AI。项目的github地址如下:https://github.com/akl7777777/free-chatgpt-client-pub/,可在主页下载windows、linux和macOS的安装包,安装后即可使…

力扣刷题2023-04-30-1——题目:剑指 Offer II 007. 数组中和为 0 的三个数

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

React之动态路由创建以及解决刷新白屏问题

动态路由的创建和动态菜单的创建几乎类似,只不过的是,动态路由需要导入组件。这样才能完成跳转。 动态路由与动态菜单一样都需要封装一个转化函数,将后端传来的数据进行转换,转换成我们需要的格式。 需要导入的依赖 导入路由use…

kali: kali工具-Ettercap

kali工具-Ettercap ettercap工具: 用来进行arp欺骗,可以进行ARP poisoning(arp投毒),除此之外还可以其他功能: ettercap工具的arp投毒可以截取web服务器、FTP服务器账号密码等信息,简略后打印出…

C++篇--类大小计算、this指针

文章目录 一、类大小计算二、this指针 一、类大小计算 类的大小是只计算它的成员变量或者自定义成员&#xff0c;不会计算它的成员函数大小。 #include<iostream> using namespace std;class A1 { public:void fun(){_a 1;_b 2;}int _a;int _b; };int main() {cout <…