Stable diffusion文生图大模型——隐扩散模型原理解析

1、前言

本篇文章,我们将讲这些年非常流行的文生图大模型——Stable Diffusion。该模型也不难,甚至说很简单。创新点也相对较少,如果你学会了我以前的文章讲过的模型,学习这个也自然水到渠成!

参考论文:High-Resolution Image Synthesis with Latent Diffusion Models (arxiv.org)

官方代码:GitHub - CompVis/latent-diffusion: High-Resolution Image Synthesis with Latent Diffusion Models

视频:[Stable diffusion生成大模型——隐扩散模型原理解析-哔哩哔哩]

演示:

在这里插入图片描述

2、Stable Diffusion

2.1、隐空间扩散

在传统的扩散模型中,都是一上来就对图像就行加噪去噪。这种做法有一些难以避免的问题——效率。一方面,图像的像素如果非常大,那么计算量将是难以想象地;另一方面,我们在VAE那里说到过,图像之中,总是存在一些冗余地部分。我们直接拿图像去扩散,相当于也把那些冗余的部分也一起计算了。

所以,作者选择先把图像编码成一个维度相对较小的编码向量(或特征图)。然后再训练扩散模型

那么,该如何进行编码呢?答案就是使用VAE(详细请看VAE变分自编码器原理)。总所周知,使用VAE可以把图像编码成维度相对较小的向量(或特征图)

除此之外,就是使用离散化的编码器——VQGAN(详细请看VQGAN原理解析)

这两种方法,都可以进行图像的压缩。压缩完成之后,在进行扩散过程

在这里插入图片描述

其中编码器对应图中的 E \mathcal{E} E,解码器对应 D \mathcal{D} D。也就是说,先把图像x通过 E \mathcal{E} E进行编码,再进行Diffusion Process

2.2、条件生成

如果你用过Stable Diffusion。就必然知道它可以进行条件生成。那么该如何把条件引入Diffusion里面呢?在Diffusion系列里面,我其实从没有讲过如何进行条件生成。

其实进行条件生成有一个很简单的理解方式。那就是直接采用下面的损失函数
L = ∣ ∣ ϵ − ϵ θ ( x t , t , y ) ∣ ∣ 2 (1) L=||\epsilon-\epsilon_\theta(x_t,t,y)||^2\tag{1} L=∣∣ϵϵθ(xt,t,y)2(1)
为什么可以这样?我们回忆一下DDPM里面的损失函数
L = ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 (2) L=||\epsilon-\epsilon_\theta(x_t,t)||^2\tag{2} L=∣∣ϵϵθ(xt,t)2(2)
区别在哪里,那就是Eq.(1)里面神经网络的输入多加了一个条件y。这个条件y可以是标签,文本等等信息。

为什么多加了一个y就可以进行条件生成?

我们从一个比较简单的方面的来理解。在DDPM里面,我们层提到三种预测方式——均值、原始图像,噪声

我们最终只使用噪声而已。那假如我们预测的是原始图像呢?
L = ∣ ∣ x 0 − x θ ( x t , t ) ∣ ∣ 2 L=||x_0-x_\theta(x_t,t)||^2 L=∣∣x0xθ(xt,t)2
如果我们加入一个条件y
L = ∣ ∣ x 0 − x θ ( x t , t , y ) ∣ ∣ 2 L=||x_0-x_\theta(x_t,t,y)||^2 L=∣∣x0xθ(xt,ty)2
加入的一个条件y(比如假设它是图像的类别标签),这就意味着什么呢?意味着我们告诉了神经网络图像 x 0 x_0 x0的类别是什么。那么让神经网络去预测 x 0 x_0 x0,肯定会相对容易,因为神经网络已经知道了图像的类别,排除了其他类别图像的可能。

所以,对于预测噪声也是同理。那么Eq.(1)也是同理,加入一个条件y。更加有利于去噪。

2.3、损失函数和网络结构

对于DIffusion的网络结构,其实我从来没说过。我只讲了用神经网络去预测噪声。对网络结构这些东西,我以后打算出一个单独的系列来讲。

现在主要讲模型原理。但为了完整性。我还是简单讲一下吧。万一有些读者已经有这些方面的基础呢

那么网络的结构该如何呢?在DDPM中,其实用的是U-Net结构的神经网络去预测噪声。在Stable Diffusion里面的,也沿用了这个结构。

我们前面说过,要给预测噪声的神经网络加入条件。但我们不是纯粹的把条件直接送进去。而是对条件进行编码表征之后再送进去。我们用 T θ ( y ) \mathcal{T}_\theta(y) Tθ(y)表示把条件编码成对应的中间表征。所以损失函数变成了这样
L L D M = E E ( x ) , ϵ ∼ N ( 0 , 1 ) , t [ ∣ ∣ ϵ − ϵ θ ( z t , t , T θ ( y ) ∣ ∣ 2 ] L_{LDM}=\mathbb{E}_{{\mathcal{E}(x)},\epsilon\sim \mathcal{N}(0,1),t}\left[||\epsilon-\epsilon_\theta(z_t,t,\mathcal{T}_\theta(y)||^2\right] LLDM=EE(x),ϵN(0,1),t[∣∣ϵϵθ(zt,t,Tθ(y)2]
其中, z t z_t zt E \mathcal{E} E编码得到图像加噪之后的结果。t代表时刻。

除此之外,如果你看了上面那张图,就能看到有一个Q,K,V的东西。那其实自注意力机制。这玩意儿是Transformer里面的。原本属于自然语言处理那边的。我打算以后分出一个系列讲自然语言处理。

在这里我简单讲一下,如果你会Transformer,应该不会陌生。如果不会,你听了估计也不会明白,我在这里不深入讲。讲到自然语言处理再讲

下面我们来简单过一下。对于里面的Q,K,V。计算如下
Q = W Q ( i ) ⋅ ϕ i ( z t ) , K = W k ( i ) ⋅ T θ ( y ) , V = W V ( i ) ⋅ T θ ( y ) Q=W^{(i)}_Q\cdot\phi_i(z_t),K=W_k^{(i)}\cdot \mathcal{T}_\theta(y),V=W_V^{(i)}\cdot\mathcal{T_{\theta}}(y) Q=WQ(i)ϕi(zt),K=Wk(i)Tθ(y),V=WV(i)Tθ(y)
其中, ϕ i ( z t ) \phi_i(z_t) ϕi(zt)是预测 ϵ θ \epsilon_\theta ϵθ的U-Net的中间表征。

那么,里面的 T θ \mathcal{T}_\theta Tθ究竟是什么呢?这要看具体情况,要根据具体特定领域而选择。比如当y是文本时,我们可以使用Transformer,或者使用CLIP等等。要根据具体情况而定。

2.4、训练

对于Stable Diffusion的训练。DIffusion和编码解码部分,并不是并行训练。

而是先训练好一个编码器和解码器。然后在训练Diffusion。对于条件的编码,一般情况下也是要一个训练好的,而不是跟着Diffusion一起训练。

2.5、采样

很简单,从高斯分布中采样一个 z T z_T zT,然后设置条件。慢慢去噪。到了 z 0 z_0 z0之后,使用解码器,就可以得到图像

3、结束

本篇文章到此结束,如有问题,还望指出。阿里嘎多!

在这里插入图片描述

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

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

相关文章

腾讯云 TDMQ for Apache Pulsar 多地区高可用容灾实践

作者介绍 林宇强 腾讯云高级工程师 专注于消息队列、API网关、微服务、数据同步等 PaaS 领域。有多年的开发和维护经验,目前在腾讯云从事 TDMQ Pulsar 商业化产品方向的研发工作。 导语 本文将从四个维度,深入剖析 Pulsar 在多可用区高可用领域的容…

大数据—元数据管理

在大数据环境中,元数据管理是确保数据资产有效利用和治理的关键组成部分。元数据是描述数据的数据,它提供了关于数据集的上下文信息,包括数据的来源、格式、结构、关系、质量、处理历史和使用方式等。有效的元数据管理有助于提高数据的可发现…

Amazon云计算AWS(四)

目录 八、其他Amazon云计算服务(一)快速应用部署Elastic Beanstalk和服务模板CloudFormation(二)DNS服务Router 53(三)虚拟私有云VPC(四)简单通知服务和简单邮件服务(五&…

LeetCode刷题之HOT100之全排列

九点半了&#xff0c;做题吧。聊天聊到十一点多哈哈。 1、题目描述 2、逻辑分析 给定一个不重复数组&#xff0c;要求返回所有可能的全排列。这道题跟我上一道题思想一致&#xff0c;都是使用到回溯的算法思想来解决。直接用代码来解释吧 3、代码演示 public List<List&…

MongoDB环境搭建

一.下载安装包 Download MongoDB Community Server | MongoDB 二、双击下载完成后的安装包开始安装&#xff0c;除了以下两个部分需要注意操作&#xff0c;其他直接next就行 三.可视化界面安装 下载MongoDB-compass&#xff0c;地址如下 MongoDB Compass Download (GUI) | M…

Golang | Leetcode Golang题解之第129题求根节点到叶节点数字之和

题目&#xff1a; 题解&#xff1a; type pair struct {node *TreeNodenum int }func sumNumbers(root *TreeNode) (sum int) {if root nil {return}queue : []pair{{root, root.Val}}for len(queue) > 0 {p : queue[0]queue queue[1:]left, right, num : p.node.Left, …

Spire.PDF for .NET【文档操作】演示:在 C# 中向 PDF 文件添加图层

Spire.PDF 完美支持将多页 PDF 拆分为单页。但是&#xff0c;更常见的情况是&#xff0c;您可能希望提取选定的页面范围并保存为新的 PDF 文档。在本文中&#xff0c;您将学习如何通过 Spire.PDF 在 C#、VB.NET 中根据页面范围拆分 PDF 文件。 Spire.PDF for .NET 是一款独立 …

群体优化算法---蝙蝠优化算法分类Iris数据集

介绍 蝙蝠算法&#xff08;Bat Algorithm, BA&#xff09;是一种基于蝙蝠回声定位行为的优化算法。要将蝙蝠算法应用于分类问题&#xff0c;可以通过将蝙蝠算法用于优化分类器的参数&#xff0c;图像分割等 本文示例 我们使用一个经典的分类数据集&#xff0c;如Iris数据集&…

Python开发运维:VSCode与Pycharm 部署 Anaconda虚拟环境

目录 一、实验 1.环境 2.Windows 部署 Anaconda 3.Anaconda 使用 4.VSCode 部署 Anaconda虚拟环境 5.Pycharm 部署 Anaconda虚拟环境 6.Windows使用命令窗口版 Jupyter Notebook 7.Anaconda 图形化界面 二、问题 1.VSCode 运行.ipynb代码时报错 2.pip 如何使用国内…

构造,CF862C. Mahmoud and Ehab and the xor

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 862C - Codeforces 二、解题报告 1、思路分析 非常松的一道构造题目 我们只需让最终的异或和为x即可 下面给出个人一种构造方式&#xff1a; 先选1~N-3&#xff0c;然后令o (1 << 17) …

Redis5学习笔记之三:事务、锁和集成

3. 事务&#xff0c;锁和集成 3.1 事务 3.1.1 基本应用 redis事务的本质&#xff1a;一组命令的集合&#xff0c;一个事务中的所有命令都会被序列化&#xff0c;在执行事务的过程中&#xff0c;会按照顺序执行 redis事务的特点&#xff1a; redis单条命令能够保证原子性&…

第五讲:独立键盘、矩阵键盘的检测原理及实现

IO口电平检测 检测IO口的电平时&#xff0c;需要先给高电平 之后便进入输出状态 #include <reg52.h>void main() {// 配置P1.0为输出模式&#xff0c;并输出高电平P1 0x01; // 将P1.0置为高电平// 读取P1.0的电平状态if (P1 & 0x01) {// 如果P1.0为高电平&#x…

YOLOv9改进策略 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv9有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

【iOS】Runtime

文章目录 前言一、Runtime简介二、NSObject库起源isaisa_t结构体cache_t的具体实现class_data_bits_t的具体实现 三、[self class] 与 [super class]四、消息发送与转发五、Runtime应用场景 前言 之前分part学习了Runtime的内容&#xff0c;但是没有系统的总结&#xff0c;这篇…

网络工程师----第四十七天

1、请简述super vlan和sub vlan的区别&#xff1f; 2、请简述mux vlan 中不同vlan的特点&#xff1f; 3、请基于工作原理简述GVRP协议中三种接口模式的特点&#xff1f; 4、请简述STP的选举过程&#xff1f; 5、两台交换机在不增加成本的情况下为提高链路带宽和可靠性采用链路聚…

网络原理——HTTP/HTTPS ---- HTTPS

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 HTTPS加密与解密HTTPS的工作流程使用对称密钥来加密使用非对称密钥 来对 对称密钥进行加密第三方公证总结 HTTPS https本质上就是在http的基础之上 增加了加密层,抛开加密层之后,剩下的部…

号称超级增程电动,领克07EM-P带来技术变革?

近年来&#xff0c;自主品牌在新能源汽车领域百花齐放&#xff0c;尤其是在混合动力市场上&#xff0c;比亚迪的DM-i技术引领了风潮&#xff0c;秦L的一经亮相&#xff0c;整个车圈都沸腾了&#xff0c;“超级混动”的概念深入人心。 各大自主品牌都有了自己的混动平台和技术。…

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后&#xff0c;就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码&#xff0c;这可以使用import语句实现。im…

步进电机双闭环细分控制(matlab仿真)内含课设等参考文件

1.1 步进电机工作原理 步进电机是一种用电脉冲进行控制&#xff0c;将电脉冲信号转换成相位移的电机&#xff0c;其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度。脉冲的数量决定了旋转的总角度&#xff0c;脉…

(ICLR,2024)HarMA:高效的协同迁移学习与模态对齐遥感技术

文章目录 相关资料摘要引言方法多模态门控适配器目标函数 实验 相关资料 论文&#xff1a;Efficient Remote Sensing with Harmonized Transfer Learning and Modality Alignment 代码&#xff1a;https://github.com/seekerhuang/HarMA 摘要 随着视觉和语言预训练&#xf…