Stable Diffusion系列(六):原理剖析——从文字到图片的神奇魔法(潜空间篇)

文章目录

    • LDM
      • 概述
      • 原理
      • 模型架构
        • 自编码器模型
        • 扩散模型
        • 条件引导模型
        • 图像生成过程
      • 实验结果
        • 指标定义
          • IS(越大越好)
          • FID(越小越好)
        • 训练成本与采样质量分析
        • 不带条件的图片生成
        • 基于文本的图片生成
        • 基于语义框的图片生成
        • 基于语义图的图片生成
        • 超分辨率图像生成
        • 图像重绘
    • 其他文生图模型
      • DALL-E
      • Imagen

在上一章,我们了解了扩散模型的基本原理,但它离实现Stable Diffusion的文生图或图生图功能显然还有一段距离,那就是如何将文字或图片信息融入到生成图片的过程中,比如,像下图这样?
在这里插入图片描述
除此之外,扩散模型的一个重要特点就是维度的不变性,这就限制了生成图片大小的上限,原始论文中最大的图片生成大小也就是256×256,这意味着所有的中间表示也是这个尺度,如果再大一点,显卡和耐心可能就不够用了。

LDM

为了解决上述两个难题,我们需要在隐空间中重新审视扩散过程,并基于此重新设计生成模型,这也是Stable Diffusion的直接原理。这里我们要读一篇发表于CVPR2022的论文:《High-Resolution Image Synthesis with Latent Diffusion Models》

概述

论文提出了一个名为Latent Diffusion Models (LDM)的新模型,旨在减少直接在像素空间中训练扩散模型所带来的计算复杂度。论文的主要内容和贡献如下:

  • 提出了两阶段训练方法:首先训练一个自动编码器,学习一个低维的潜在空间表示,然后在自动编码器的潜在空间中训练扩散模型。这显著降低了训练和推理的计算复杂度。
  • 引入交叉注意力机制:通过将交叉注意力层添加到UNet中,LDM可以处理各种条件输入,如文本或语义布局,并实现高质量的图像生成。
  • 在多个任务上取得了最先进或竞争性的性能,包括无条件图像生成、文本到图像生成、语义合成、超分辨率和图像修复等。相比像素级扩散模型,LDM的训练和推理成本大大降低。

原理

作者认为任何生成性学习方法都有两个主要阶段:感知压缩语义压缩

感知压缩指的是在训练过程中,自动编码器通过学习去除图像中不太重要的细节信息,保留基本的结构和语义信息。在这个过程中,图像的高频细节信息被过滤掉,留下低频语义信息。这种压缩方式对减少计算复杂度和模型参数是有帮助的。

语义压缩则是指生成模型学习语义和概念层面的信息,通过生成过程来弥补感知压缩过程中丢失的细节。这种压缩方式能够有效提升模型的生成能力,同时减少对不重要的细节的建模。

两种压缩相结合,也就是自编码器和扩散过程相结合,也就有了LDM模型。

模型架构

模型的总体架构如下图所示,包括了左侧用来实现感知压缩的变分自编码器模型(VAE)、中间在潜空间完成扩散过程的Unet模型,以及右侧的条件引导模型。
在这里插入图片描述

自编码器模型

给定原始图像 x ∈ R H × W × 3 x \in R^{H \times W \times 3} xRH×W×3,编码器 E \mathcal{E} E将其编码为隐空间中的表示,即 z = E ( x ) z=\mathcal{E}(x) z=E(x),其中 z ∈ R h × w × c z \in R^{h \times w \times c} zRh×w×c。这里我们定义降采样率 f = H / h = W / w f=H/h=W/w f=H/h=W/w

解码器 D \mathcal{D} D用来实现从隐空间到像素空间的转换,即 x ~ = D ( z ) = D ( E ( x ) ) \tilde{x}=\mathcal{D}(z)=\mathcal{D}(\mathcal{E}(x)) x~=D(z)=D(E(x))

自编码器单独训练,单独的图片数据集即可训练完成。
在这里插入图片描述

扩散模型

这一段非常简单,先看看原始的扩散公式
在这里插入图片描述
再看看潜空间版,区别一目了然
在这里插入图片描述
下面是一个训练过程中的示意图
在这里插入图片描述

条件引导模型

所谓的条件引导,就是输入文字或者图片后,引导模型生成与之相关的图片,也就是文生图或图生图的过程。

如果将上述这些条件统一表述为 y y y,那么去噪自编码器需要重写为条件去噪自编码器,即 ϵ θ ( z t , t , y ) \epsilon_\theta\left(z_t, t, y\right) ϵθ(zt,t,y)

那这个条件如何作用呢?对于输入的条件 y y y,使用域自适应的编码器 τ θ \tau_\theta τθ得到其中间表示 τ θ ( y ) ∈ R M × d τ \tau_\theta(y) \in \mathbb{R}^{M \times d_\tau} τθ(y)RM×dτ,再利用自注意力机制将其与UNet融合,其中 φ i ( z t ) ∈ R N × d ϵ i \varphi_i\left(z_t\right) \in \mathbb{R}^{N \times d_\epsilon^i} φi(zt)RN×dϵi是UNet的中间层参数。

在这里插入图片描述
在这里插入图片描述

以Stable Diffusion为例,它使用下图所示的基于图文相似度配对而成的CLIP ViT-L/14 (PMLR2021论文:Learning Transferable Visual Models From Natural Language Supervision)作为文本编码器 τ θ \tau_\theta τθ。这个编码器会将句子的长度限制为最大77个字符,如果长度超出,模型会对其进行截断。编码后输出的矩阵维度是77x768,其中768是隐藏层的大小。
如果输入条件包含图片,那么可以用自编码器中的编码器部分作为图片编码器 τ θ \tau_\theta τθ

在这里插入图片描述

最终优化的目标函数如下,其中 τ θ \tau_\theta τθ ϵ θ \epsilon_\theta ϵθ被联合优化
在这里插入图片描述

图像生成过程

在训练完成后,模型在隐空间随机产生一个噪音,与输入条件相结合,经过扩散过程去噪之后输入解码器,得到一张图像。
在这里插入图片描述
你可能会疑惑,为什么使用Stable Diffusion的时候,可以看到一个图片由模糊变清晰的过程呢?隐空间的表示难道不是肉眼不可见的吗?其实这很简单,让每一步去噪后的隐空间表示都由解码器处理一遍即可,但要注意并不是把它直接输入解码器,而是要通过上一章的扩散公式转换成隐空间的 z 0 z_0 z0表示,再输入解码器。

实验结果

指标定义
IS(越大越好)

nception Score(IS)是一个用于评估生成模型(如生成对抗网络GANs)性能的指标。它是由Tim Salimans等人于2016年在论文《Improved Techniques for Training GANs》中提出的。Inception Score的主要思想是使用一个预训练的Inception模型(通常是一个在ImageNet数据集上训练的深度卷积网络)来评估生成图像的质量和多样性。
Inception Score的计算步骤如下:

  1. 分类概率:首先,将生成的图像输入到预训练的Inception模型中,得到每个图像属于ImageNet数据集中1000个类别的概率分布。

  2. 图像质量:对于每个生成的图像,选择概率最高的类别,计算该类别的概率(即图像被正确分类的置信度)。这个过程反映了图像的质量,因为清晰的图像应该有一个高的最大概率。

  3. 图像多样性:计算所有生成图像的平均分类概率的熵。熵越高,说明生成的图像属于不同类别的分布越均匀,即图像的多样性越好。

  4. 综合评分:最后,将图像质量的指标和图像多样性的指标相乘,得到最终的Inception Score。公式可以表示为:

    I S = e x p ( E x [ D K L ( p ( y ∣ x ) ∣ ∣ p ( y ) ) ] ) IS = exp(\mathbb{E}_x[D_{KL}(p(y|x) || p(y))]) IS=exp(Ex[DKL(p(yx)∣∣p(y))])
    其中, p ( y ∣ x ) p(y|x) p(yx) 是模型对图像 x x x的分类概率分布, p ( y ) p(y) p(y)是所有图像的平均分类概率分布, D K L D_{KL} DKL是KL散度,用于衡量两个概率分布的差异。

Inception Score的一个缺点是它主要关注图像的多样性,而不是图像的真实性。因此,即使生成的图像非常多样,但如果不真实,Inception Score也可能很高。为了解决这个问题,研究人员提出了其他指标,如Fréchet Inception Distance (FID),它同时考虑了图像的质量和真实性。

FID(越小越好)

IFréchet Inception Distance (FID) 是一种用于评估生成模型(如生成对抗网络 GANs)生成图像质量的指标。FID 通过比较生成图像的特征分布与真实图像的特征分布之间的差异来衡量图像的真实性。FID 值越低,表明生成图像的质量越高,因为它们在特征空间中与真实图像更接近。
FID 的计算步骤如下:

  1. 特征提取:首先,使用一个预训练的 Inception-v3 模型(通常在 ImageNet 数据集上训练)来提取图像的特征。这个模型在最后一个池化层之前有一个瓶颈层,可以输出一个 2048 维的特征向量。
  2. 计算特征向量:对于一组真实图像和一组生成图像,分别计算它们通过 Inception-v3 模型得到的特征向量的平均值 μ \mu μ和协方差矩阵 Σ \Sigma Σ
  3. Fréchet 距离:然后,计算两个特征分布之间的 Fréchet 距离。这个距离是一个统计距离,用于衡量两个多元高斯分布之间的差异。Fréchet 距离定义为两个分布的均值之间的欧氏距离和它们协方差矩阵之间的加权几何距离的平方根。
    F I D = ∥ μ 1 − μ 2 ∥ 2 + T r ( Σ 1 + Σ 2 − 2 ( Σ 1 Σ 2 ) 1 / 2 ) FID = \|\mu_1 - \mu_2\|^2 + Tr(\Sigma_1 + \Sigma_2 - 2(\Sigma_1\Sigma_2)^{1/2}) FID=μ1μ22+Tr(Σ1+Σ22(Σ1Σ2)1/2)
    其中, μ 1 \mu_1 μ1 μ 2 \mu_2 μ2分别是真实图像和生成图像的特征向量的平均值, Σ 1 \Sigma_1 Σ1 Σ 2 \Sigma_2 Σ2是它们的协方差矩阵, T r Tr Tr表示矩阵的迹。

FID 的优势在于它同时考虑了生成图像的多样性和真实性,因为它比较了整个特征分布而不是单个图像。FID 值低意味着生成图像不仅在视觉上接近真实图像,而且在统计上也非常相似。因此,FID 是评估 GANs 和其他生成模型性能的一个非常有用的工具,其示意图如下。
在这里插入图片描述

训练成本与采样质量分析

分析了不同降采样率 f f f对模型训练成本和采样质量的影响。结果表明,LDM-4和LDM-8在下采样率与采样质量之间达到了平衡,训练成本低,采样质量高。
在这里插入图片描述
在这里插入图片描述

不带条件的图片生成

下面是降采样率为4的LCM模型在不同数据集上的生成指标和实际效果
在这里插入图片描述
在这里插入图片描述

基于文本的图片生成

论文中使用BERT-tokenizer和transformer作为文本域的 τ θ \tau_\theta τθ,其指标和效果如下。
在这里插入图片描述
在这里插入图片描述

基于语义框的图片生成

使用来自OpenImages的带语义框标注的图像作为数据集训练,并在coco上微调。
在这里插入图片描述
在这里插入图片描述

基于语义图的图片生成

这一块的亮点主要在于它在生成图片时在分辨率上有泛化性,可以生成比训练分辨率更大的图片。
在这里插入图片描述

超分辨率图像生成

输入的是一个低分辨率图片,并且 τ θ \tau_\theta τθ仅做了保持原状的操作,除了用指标,还使用了人为打分来评估效果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图像重绘

重绘任务(Inpainting task)通常指的是图像修复或图像补全的任务。这个任务的目标是填充或修复图像中的缺失部分,使得修复后的图像在视觉上尽可能自然和连贯。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

其他文生图模型

根据上面所解释的Stable Diffusion模型架构,其实可以抽象出文生图模型的通用结构,它包含三部分,一个是文本编码器,一个是从噪音开始的中间产物生成模型,一个是将中间产物映射回像素空间的解码器。下面就简单介绍一下其他文生图模型的结构。
在这里插入图片描述

DALL-E

DALL-E的名称是“DAL”和“E”的组合,其中“DAL”代表“扩散变换自回归解码器”(Diffusion Autoregressive Decoder),而“E”代表“变换器”(Encoder),这是DALL-E模型中使用的两种主要神经网络架构。
在这里插入图片描述

Imagen

Imagen是基于扩散模型(diffusion models)构建的,包括小图生成和大图上采样两步。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未激活的Windows 11/10虽能用,但有不少的缺点和局限性

由于微软在内部更改了一些关于Windows激活的内容,现在用户可以永远使用Windows 11和10,而无需使用购买的许可证密钥进行激活。如果你打算这样做,在最终确定主意之前,你必须知道未激活的Windows 11和Windows 10的缺点和局限性。 什么是未激活的Windows 11/10 流行的计算机操…

FPGA 高速接口(LVDS)

差分信号环路测试 1 概述 LVDS(Low Voltage Differential Signalin)是一种低振幅差分信号技术。它使用幅度非常低的信号(约350mV)通过一对差分PCB走线或平衡电缆传输数据。大部分高速数据传输中,都会用到LVDS传输。 …

UE5 C++ UENUM 和 USTRUCT

一.首先在APawn里声明 UENUM 和 USTRUCT。UENUM 有两种定义方式 一种是使用命名空间: 还有是继承uint8: 通过申明class类 别名来替代 USTRUCT的定义 上面的第二种有类似但仍然有很多的差异: 首先要有GENERATED_USTRUCT_BODY()这个函数 并且…

【ansible】认识ansible,了解常用的模块

目录 一、ansible是什么? 二、ansible的特点? 三、ansible与其他运维工具的对比 四、ansible的环境部署 第一步:配置主机清单 第二步:完成密钥对免密登录 五、ansible基于命令行完成常用的模块学习 模块1:comma…

SSM项目启动错误[main] ERROR org.springframework.boot.SpringApplication

[main] ERROR org.springframework.boot.SpringApplication - Application run failed org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 这个错误是由于Spring Boot应用程序在解析YAML文件时遇到了字符编码问题。java.ni…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_4

《剑指Offer》笔记&题解&思路&技巧&优化_Part_4 😍😍😍 相知🙌🙌🙌 相识😢😢😢 开始刷题1. LCR 148. 验证图书取出顺序——栈的压入、弹出序列2. LCR 14…

05.QT坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角,X向右增长,Y向下增长。 2.设置控件位置 设置控件位置,就相当于是需要指定控件的坐标,对于该控件来说,其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

ASUS华硕枪神8笔记本电脑G614JIR,G814JVR,G634JYR,G834JZR工厂模式出厂Windows11系统 带重置还原功能

适用ROG枪神8系列笔记本型号: G614JIR、G614JVR、G634JYR、G634JZR G814JIR、G814JVR、G834JYR、G834JZR 链接:https://pan.baidu.com/s/1tYZt6XFNC2d6YmwTbtFN7A?pwd3kp8 提取码:3kp8 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主…

OpenAI的Sora即将开放使用,普通人能抓住哪些赚钱机会?

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

引入成熟的Pytest自动化测试框架

虽然我们能使用脚本编写自动化测试框架,但没有必要重复找车轮子,引入成熟的自动化测试框架即可, Pytest是目前最成熟、功能最全面的Python测试框架之一,简单灵活、易于上手,可完全兼容其他测试框架如unitest&#xff…

elementui 中el-date-picker 选择年后输出的是Wed Jan 01 2025 00:00:00 GMT+0800 (中国标准时间)

文章目录 问题分析 问题 在使用 el-date-picker 做只选择年份的控制器时,出现如下问题:el-date-picker选择年后输出的是Wed Jan 01 2025 00:00:00 GMT0800 (中国标准时间),输出了两次如下 分析 在 el-date-picker 中,我们使用…

CSS之Flex布局

Flex布局 01-标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 02-浮动(了解即可) 基本使用 作用:让块元素水平排列。 属性名:float 属性…

Java基于微信小程序的乐室预约小程序,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【电路笔记】-感抗

感抗 文章目录 感抗1、概述2、感抗示例13、通过 LR 串联电路的交流电源4、感抗示例25、交流电感器的功率三角形线圈的感抗取决于所施加电压的频率,因为电抗与频率成正比。 1、概述 感抗是电感线圈的一种特性,它抵抗通过它的交流电 (AC) 的变化,类似于电阻中对抗直流电 (DC)…

UE5 C++ UObject实例化

一.创建UObject C类 在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面,先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类,允许设计者指定伤害类型…

vulvhub-----Hacker-KID靶机

打靶详细教程 1.网段探测2.端口服务扫描3.目录扫描4.收集信息burp suite抓包 5.dig命令6.XXE漏洞读取.bashrc文件 7.SSTI漏洞8.提权1.查看python是否具备这个能力2.使用python执行exp.py脚本,如果提权成功,靶机则会开放5600端口 1.网段探测 ┌──(root…

java设计模式之访问者模式

访问者模式(Visitor Pattern) 1.基本介绍 访问者模式,封装一些用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。主要讲数据结构与数据操作分离,解决数据结构和操作耦合…

二叉树相关OJ题

创作不易,感谢三连!! 一、选择题 1、某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( ) A.不存在这样的二叉树 B.200 C.198 D.199解析:选B&…

C++ 调用js 脚本

需求: 使用Qt/C 调用js 脚本。Qt 调用lua 脚本性能应该是最快的,但是需要引入第三方库,虽然也不是特别麻烦,但是调用js脚本,确实内置的功能(C 调用lua 脚本-CSDN博客) 步骤: 1&…

【人工智能】千帆平台创建和使用我的数据集,为什么需要数据集,有什么作用

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和…