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

2024-06-04 05:52

本文主要是介绍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、结束

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

在这里插入图片描述

这篇关于Stable diffusion文生图大模型——隐扩散模型原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029238

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费