Stable Diffusion-生式AI的新范式

!

扩散模型(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的人都可以微调稳定扩散模型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32平衡小车 TB6612电机驱动学习

TB6612FNG简介 单片机引脚的电流一般只有几十个毫安,无法驱动电机,因此一般是通过单片机控制电机驱动芯片进而控制电机。TB6612是比较常用的电机驱动芯片之一。 TB6612FNG可以同时控制两个电机,工作电流1.2A,最大电流3.2A。 VM电…

力劲塑机:用CRM“塑造”数字化能力

你知道吗?从手机到电脑,从暖气到扶梯,从家用电器到汽车、摩托车,从眼镜、手表到拉链、纽扣,这些物品的生产过程都离不开压铸和注塑工艺。如果说压铸和注塑这个几百亿的产业带动了几万亿的市场,一点也不夸张…

fc坦克大战游戏完美复刻

文章目录 一、 介绍二、 制作基本物体三、 控制玩家坦克移动、转向四、 子弹脚本、爆炸脚本五、 敌人AI寻路算法六、 坦克生成点脚本七、 用链表实例化地图八、 玩家游戏控制器脚本九、 添加音效十、 资源包 一、 介绍 儿时经典游戏《坦克大战》完整复刻 发射子弹、生成敌人、…

巧用千寻位置GNSS软件|一文教会横断面测量

测横断面主要用于线路工程和水利工程的前期设计中,在线路平曲线设计好之后,千寻位置GNSS软件可用于在中桩处测定垂直于线路中线方向原地貌的地面起伏的数据,本期就为大家介绍具体的操作技巧。 点击【测量】->【测横断面】,选择…

java——最小的K个数

题目链接 牛客在线oj题——最小的K个数 题目描述 给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。 数据范围:0≤k,n≤10000&…

Flink之TaskManager内存解析

一、CK失败 Flink任务的checkpoint操作失败大致分为两种情况,ck decline和ck expire: (1)ck decline 发生ck decline情况时,我们可以通过查看JobManager.log或TaskManager.log查明具体原因。其中有一种特殊情况为ck cancel&…

idea使用 ( 二 ) 创建java项目

3.创建java项目 3.1.创建普通java项目 3.1.1.打开创建向导 接 2.3.1.创建新的项目 也可以 从菜单选择建立项目 会打开下面的选择界面 3.1.2.不使用模板 3.1.3.设置项目名 Project name : 项目名 Project location : 项目存放的位置 确认创建 3.1.4.关闭tips 将 Dont s…

增强型PID-自适应-前馈-神经网络控制研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

解决docker启动mysql无法输入中文以及中文不显示或乱码问题

前言 我在使用MySQL时,遇到了两个问题。一是在插入中文数据时,无法输入中文。二是在select的时候,查出来的中文数据是空的(因为插入时为空),然后我就使用Navicat连接数据库添加了中文数据,再到…

搭建家庭影音媒体中心 --公网远程连接Jellyfin流媒体服务器

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 转载自远程穿透的文章&…

人工智能时代来临,殊不知低代码早已出手

科普一下人工智能的等级划分,按照实力,人工智能可以分为弱人工智能(Artificial Narrow Intelligence,简称ANI)、强人工智能(Artificial General Intelligence简称AGI)、超人工智能(Artificial Superintelligence简称ASI)三个等级。 弱人工智能…

JavaWeb学习------Servlet

目录 JavaWeb学习------Servlet Servlet 生命周期 Servlet 生命周期 Servlet 方法介绍 •Servlet 体系结构 Servlet 体系结构 •Servlet urlPattern配置 Servlet urlPattern配置 •XML 配置方式编写 Servlet XML 配置方式编写 Servlet JavaWeb学习------Servlet •快速…

【汽车品牌案例02-设置右侧索引 Objective-C语言】

一、刚才我们说了一下,如何把那个汽车品牌加载起来,我们使用了一个模型的嵌套,以及我们在创建单元格的时候,是不是指定了一个,单元格的可重用ID吧, 1.根据重用ID来创建单元格,那么我们运行的时候,已经能把这个大致的效果做出来了, 大致就是这么一个效果, 接下来,还…

【剧前爆米花--爪哇岛寻宝】网络互连,网络通信和网络分层

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是一篇关于网络初识的文章,在这篇文章中讲解了局域网广域网,IP地址,端口以及网络分层等相关内容,希望对你有所帮助! 目录 网络互连…

PyTorch中的交叉熵函数 CrossEntropyLoss的计算过程

CrossEntropyLoss() 函数联合调用了 nn.LogSoftmax() 和 nn.NLLLoss()。 关于交叉熵函数的公式详见: 交叉熵损失函数原理详解 CrossEntropyLoss() 函数的计算过程可以拆解为如下四个步骤: 1、对输出的结果进行softmax操作,因为softmax操作可以将所有输入…

基于虚拟同步发电机的光伏混合储能并网系统MATLAB仿真

资源地址: 主要模块: 光伏电池模型(按照数学模型搭建)、蓄电池储能模块、超级电容储能模块、双向DC/DC模块、LC滤波器、逆变器VSG控制模块电压电流双环控制模块、光伏MPPT控制模块、储能系统充放电控制模块。 使用MATLAB2021b及…

09-Node.js—express框架

目录 1、express 介绍2、express 使用2.1 express 下载2.2 express 初体验 3、express 路由3.1 什么是路由3.2 路由的使用3.2.1使用Ajax发送一次post请求 3.3 获取请求参数 3.4 获取路由参数3.5 路由参数练习 4、express 响应设置5、express 中间件5.1 什么是中间件5.2 中间件的…

Linux 利用网络同步时间

yum -y install ntp ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate ntp1.aliyun.com 创建加入crontab echo "*/20 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null &" >> /var/spool/cron/rootntp常用服务器 中国国家授…

活动目录(Active Directory)安全审计

延迟响应变化的影响可能会使原本应该微不足道的颠簸滚雪球变成无法弥补的损害。这在 Windows Active Directory 环境中更为重要,因为这种延迟造成的损害可能会使组织损失数百万美元!在这种情况下,需要一个警惕的警报系统,该系统可…

(下)苹果有开源,但又怎样呢?

一开始,因为 MacOS X ,苹果与 FreeBSD 过往从密,不仅挖来 FreeBSD 创始人 Jordan Hubbard,更是在此基础上开源了 Darwin。但是,苹果并没有给予 Darwin 太多关注,作为苹果的首个开源项目,它算不上…