Diffusion模型系列文章

news2024/11/18 7:23:59

扩散模型与其它主流生成模型的对比

DDPM

论文

扩散模型包括两个过程:前向过程(forward process)和反向过程(reverse process),其中前向过程又称为扩散过程(diffusion process),如下图所示,从 x 0 x_0 x0 x T x_T xT的过程。无论是前向过程还是反向过程都是一个参数化的马尔可夫链(Markov chain),其中反向过程可以用来生成数据,这里我们将通过变分推断来进行建模和求解。
在这里插入图片描述

扩散过程

扩散过程是指的对数据逐渐增加高斯噪音直至数据变成随机噪音的过程。对于原始数据 x 0 ∼ q ( x 0 ) x_0 \sim q(x_0) x0q(x0),总共包含 T T T步的扩散过程的每一步都是对上一步得到的数据 x t − 1 x_{t-1} xt1按如下方式增加高斯噪音:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1} ) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1},\beta_t\mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)
其中, β t \beta_t βt是每一步所采用的方差/扩散率,介于0~1之间。随着step的叠加,采用更大的方差。按照超参数处理,β 的范围从0.0001逐步增大到0.02。
扩散过程的每一步都生成一个带噪音的数据 x t x_t xt,整个扩散过程也就是一个马尔卡夫链:
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q(x_{1:T}|x_0) = \prod_{t=1}^Tq(x_t|x_{t-1}) q(x1:Tx0)=t=1Tq(xtxt1)
扩散过程往往是固定的,即采用一个预先定义好的variance schedule,比如DDPM就采用一个线性的variance schedule。
扩散过程的一个重要特性是我们可以直接基于原始数据 x 0 x_0 x0来对任意 t t t
步的 x t x_t xt进行采样: x t ∼ q ( x t ∣ x 0 ) x_t \sim q(x_t|x_0) xtq(xtx0)。定义 α t = 1 − β t \alpha_t = 1-\beta_t αt=1βt α ˉ = ∏ i = 1 t α i \bar{\alpha} = \prod_{i=1}^t \alpha_i αˉ=i=1tαi。通过重参数技巧(和VAE类似),那么有:
在这里插入图片描述
返重参数化后,得到:
q ( x t ∣ x 0 ) = N ( x t ; α t ˉ x 0 , ( 1 − α t ˉ ) I ) q(x_t|x_0) = \mathcal{N}(x_t;\sqrt{\bar{\alpha_t}}x_0, (1-\bar{\alpha_t})\mathbf{I}) q(xtx0)=N(xt;αtˉ x0,(1αtˉ)I)
可以看到 x t x_t xt其实可以看成是原始数据 x 0 x_0 x0和随机噪音 ϵ \epsilon ϵ的线性组合,其中 α t ˉ \sqrt{\bar{\alpha_t}} αtˉ 1 − α t ˉ \sqrt{1-\bar{\alpha_t}} 1αtˉ 为组合系数,它们的平方和等于1,我们也可以称两者分别为signal_rate和noise_rate。我们直接将 α t ˉ \bar{\alpha_t} αtˉ设定为一个接近0的值,那么就可以保证最终得到的 x T x_T xT近似为一个随机噪音。其次,后面的建模和分析过程将使用这个特性。

a. 为什么扩散率是逐渐增大的呢,也即为什么噪音所占的比例越来越大呢?
在加噪声的过程中,扩散率逐渐增大,对应着在去噪声的过程中,扩散率逐渐减小,也就是说,去噪的过程是先把"明显"的噪声给去除,对应着较大的扩散率;当去到一定程度,逐渐逼近真实真实图像的时候,去噪速率逐渐减慢,开始微调,也就是对应着较小的扩散率
b. 重参数化技巧
如果要对高斯分布 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^2) N(μ,σ2)进行采样一个噪声 ϵ \epsilon ϵ,等价于先从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)中采样的到一个噪声 z \mathbf{z} z,然后对其乘上标准差 σ \sigma σ,加上均值 μ \mu μ,即 ϵ = μ + σ ⋅ z \epsilon=\mu+\sigma\cdot\mathbf{z} ϵ=μ+σz。举个例子,上面我们已经得到了 x t \mathbf{x}_t xt是从高斯分布 N ( 1 − β t x t − 1 , β t I ) \mathcal{N}(\sqrt{1-\beta_{t}}\mathbf{x}_{t-1},\beta_{t}\mathbf{I}) N(1βt xt1,βtI)采样出来的噪声,该高斯分布的均值为 1 − β t x t − 1 \sqrt{1-\beta_{t}}\mathbf{x}_{t-1} 1βt xt1标准差为 β t \sqrt{\beta_{t}} βt ,所以 x t = 1 − β t x t − 1 + β t z \mathbf{x}_t=\sqrt{1-\beta_{t}}\mathbf{x}_{t-1}+\sqrt{\beta_{t}}\mathbf{z} xt=1βt xt1+βt z

反向过程

扩散过程是将数据噪音化,那么反向过程就是一个去噪的过程,如果我们知道反向过程的每一步的真实分布 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t} ) q(xt1xt),那么从一个随机噪音 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0,\mathbf{I}) xTN(0,I)逐渐去噪就能生成一个真实的样本,所以反向过程也就是生成数据的过程。

根据贝叶斯公式:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(x_{t-1}|x_{t},x_0) = q(x_{t}|x_{t-1},x_0) \frac{q(x_{t-1}|x_{0})}{q(x_{t}|x_{0})} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)
根据前向过程,已知:在这里插入图片描述
把标准正态分布展开后,乘法相当于加,除法就相当于减。则可以得到分布正比于:
∝ e x p ( − 1 2 ( x t − a t x t − 1 ) 2 β t + ( x t − 1 − a ˉ t − 1 x t 0 ) 2 1 − a ˉ t − 1 − ( x t − a t x 0 ) 2 1 − a ˉ t ) ) \propto exp(-\frac{1}{2}\frac{(x_t-\sqrt{a_t}x_{t-1})^2}{\beta_t}+\frac{(x_{t-1}-\sqrt{\bar{a}_{t-1}}x_{t0})^2}{1-\bar{a}_{t-1}}-\frac{(x_t-\sqrt{a_t}x_{0})^2}{1-\bar{a}_{t}})) exp(21βt(xtat xt1)2+1aˉt1(xt1aˉt1 xt0)21aˉt(xtat x0)2))
进一步化简,得到 :
在这里插入图片描述
在这里插入图片描述

可以得到,后验分布 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_{t},x_0) q(xt1xt,x0)的均值和方差:
在这里插入图片描述

可以看到方差是一个定量(扩散过程参数固定),而均值是一个依赖 x 0 x_0 x0 x t x_t xt的函数。模型预测在 x t x_t xt在t时刻的噪音 z t z_t zt,求解近似 z t z_t zt

在这里插入图片描述

训练部分

  • 首先在真实图像分布 q ( x 0 ) q(\mathbf{x}_0) q(x0),也即我们的训练图像
  • 在区间1,…,T中随机生成一个t,代表扩散(加噪)次数
  • 在标准正态分布中采样一个随机噪声
  • 计算损失函数:让网络预测的噪声与真实的噪声一致。

这里的t做一个时间编码喂入网络中,因为在后向过程中,每一次迭代的网络都是相同的,即参数共享,那怎么让网络知道现在迭代到哪一步呢,那么我们就将t一同传进去参与训练,用t来告诉网络进行到第几次迭代了。时间编码和transformer中的位置编码类似。
训练
预测

Stable Diffusion

论文
Stable Diffusion基于Latent Diffusion Models,专门用于文图生成任务。
论文贡献

  • Diffusion model相比GAN可以取得更好的图片生成效果,然而该模型是一种自回归模型,需要反复迭代计算,因此训练和推理代价都很高。论文提出一种在潜在表示空间(latent space)上进行diffusion过程的方法,从而能够大大减少计算复杂度,同时也能达到十分不错的图片生成效果。
  • 相比于其它空间压缩方法,论文提出的方法可以生成更细致的图像,并且在高分辨率图片生成任务(如风景图生成,百万像素图像)上表现得也很好。
  • 论文将该模型在无条件图片生成(unconditional image synthesis), 图片修复(inpainting),图片超分(super-resolution)任务上进行了实验,都取得了不错的效果。
  • 论文还提出了cross-attention的方法来实现多模态训练,使得条件图片生成任务也可以实现。论文中提到的条件图片生成任务包括类别条件图片生成(class-condition), 文图生成(text-to-image), 布局条件图片生成(layout-to-image)。这也为日后Stable Diffusion的开发奠定了基础。

Latent Diffusion Models整体框架如图,首先需要训练好一个自编码模型(AutoEncoder,包括一个编码器 E \mathcal{E} E和一个解码器 D \mathcal{D} D )。这样就可以利用编码器 E \mathcal{E} E对图片进行压缩,然后在潜在表示空间上做diffusion操作,最后再用解码器 D \mathcal{D} D 恢复到原始像素空间。论文将这个方法称之为感知压缩(Perceptual Compression)。在这里插入图片描述
在潜在表示空间上做diffusion操作其主要过程和标准的扩散模型没有太大的区别,所用到的扩散模型的具体实现为 time-conditional UNet。有一个重要的地方是论文为diffusion操作引入了条件机制(Conditioning Mechanisms),通过cross-attention的方式来实现多模态训练,使得条件图片生成任务也可以实现。

图片感知压缩

感知压缩主要利用一个预训练的自编码模型,该模型能够学习到一个在感知上等同于图像空间的潜在表示空间。这种方法的一个优势是只需要训练一个通用的自编码模型,就可以用于不同的扩散模型的训练,在不同的任务上使用。这样一来,感知压缩的方法除了应用在标准的无条件图片生成外,也可以十分方便的拓展到各种图像到图像(inpainting,super-resolution)和文本到图像(text-to-image)任务上。

基于感知压缩的扩散模型的训练本质上是一个两阶段训练的过程,第一阶段需要训练一个自编码器,第二阶段才需要训练扩散模型本身。在第一阶段训练自编码器时,为了避免潜在表示空间出现高度的异化,作者使用了两种正则化方法,一种是KL-reg,另一种是VQ-reg,因此在官方发布的一阶段预训练模型中,会看到KL和VQ两种实现。在Stable Diffusion中主要采用AutoencoderKL这种实现。

具体来说,给定图像 x ∈ R H × W × 3 x\in \mathbb{R}^{H\times W\times 3} xRH×W×3,先利用一个编码器 E \mathcal{E} E来将图像编码到潜在表示空间 z = E ( x ) z = \mathcal{E}(x) z=E(x),其中 x ∈ R h × w × c x\in \mathbb{R}^{h\times w\times c} xRh×w×c,然后再用解码器从潜在表示空间重建图片 x ^ = D ( z ) = D ( E ( x ) ) \hat{x} = \mathcal{D}(z) = \mathcal{D}(\mathcal{E}(x)) x^=D(z)=D(E(x))

潜在扩散模型

扩散模型可以解释为一个时序去噪自编码器,其目标是根据输入去预测一个对应去噪后的变体,或者说预测噪音,相应的目标函数可以写成如下形式:
在这里插入图片描述
在潜在扩散模型中,引入了预训练的感知压缩模型,它包括一个编码器和一个解码器 。这样就可以利用在训练时就可以利用编码器得到。从而让模型在潜在表示空间中学习,相应的目标函数可以写成如下形式:
在这里插入图片描述

条件机制

除了无条件图片生成外,我们也可以进行条件图片生成,这主要是通过拓展得到一个条件时序去噪自编码器 ϵ θ ( z t , t , y ) \epsilon_{\theta} (z_t,t,y) ϵθ(zt,t,y)

通过 y y y来控制图片合成的过程。论文通过在UNet主干网络上增加cross-attention机制来实现。为了能够从多个不同的模态预处理y,论文引入了一个领域专用编码器,它用来将 y 映射为一个中间表示。这样我们就可以很方便的引入各种形态的条件(文本、类别、layout等等)。最终模型就可以通过一个cross-attention层映射将控制信息融入到UNet的中间层,cross-attention层的实现如下:
在这里插入图片描述

实验

感知压缩权衡

下采样因子f, f = H / h = W / w f=H/h=W/w f=H/h=W/w,如果 f = 1 f=1 f=1等于没有对输入的像素空间进行压缩,如果 f f f越大,则信息压缩越严重,可能会噪声图片失真,但是训练资源占用的也越少。论文对比了 f f f在分别 { 1 , 2 , 3 , 4 , 8 , 16 , 32 } \{1,2,3,4,8,16,32\} {1,2,3,4,8,16,32}下的效果,发现 f f f { 4 − 16 } \{4-16\} {416}之间可以比较好的平衡压缩效率与视觉感知效果。作者重点推荐了LDM-4和LDM-8。
下采样因子对比实验,横坐标train step,左纵坐标FID,右纵坐标Inception Score
其中:FID(Fréchet Inception Distance)是一种评价GAN的指标,是表示生成图像的多样性和质量,FID越小,则图像多样性越好,质量越好。IS(Inception Score)被用来描述随机性,指标衡量的是生成模型的两个能力:生成图片的质量和生成图片的多样性。

Versatile Diffusion : Text, Images and Variations All in One Diffusion Model

论文 代码
供一种统一模型去处理:文本到图像、图像到文本生成、图像编辑等多功能扩散模型。

多功能框架需要面向不同任务,这往往需要设计不同模型,因此Versatile Diffusion提出将现有的单流扩散管道扩展为多流网络,这样就能在一个统一的模型中处理文本到图像、图像到文本、图像编辑和文本变体。具体模型结构如下所示:
在这里插入图片描述
借鉴Stable Diffusion,文章在单流扩散时使用autoKL作为VAEs的编码和解码部分,使用UNet作为噪声预测网络,使用CLIP/Bert作为Context的条件输入。为了统一多流任务,VD包含以下三个部分,

  • Diffuser:采用带有cross-attention的UNet网络。即在文到图生成任务下,采用图片UNet和文本的cross-attention上下文;在图到图生成任务下,采用图片的UNet和图片的cross-attention上下文,如上图所示不同颜色的线。
  • VAE:图像使用Stable Diffusion相同的Autoencoder-KL,文本使用Bert编码、GPT2解码。
  • Context encoder:图像和文本都基于CLIP。

文章将扩散器分为三层:全局层(global layers),数据层(data layers),上下文层(context layers)。例如Stable Diffusion中time-embedding是全局层,残差网络(UNet)是数据层,cross-attention是上下文层。在文到图生成任务下,扩散器采用图片的数据层和文本的上下文;在图到图生成任务下,扩散器采用图片的数据层和图片的上下文。
基于此框架训练时选择一系列的支撑任务来计算所有的loss,并且使用可定制的梯度计算器同时优化每个层。

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

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

相关文章

【音视频第8天】mediasoup拥塞控制【未完待续】

WebRTC的拥塞控制方式主要有以下几个:Transport-cc、BBR-congestion、remb(BBR已被google从webrtc移除了)。mediasoup支持Transport-cc和remb。 一、前言 实时通信的延时指标 视频服务质量指标 音视频服务质量与带宽之间的矛盾、实时性与服…

【微信小程序】初识微信小程序组件

作者简介:一名C站萌新,前来进行小程序的前进之路博主主页:大熊李子🐻 一、组件的创建与引用 1.1 创建组件 在项目的根目录中,鼠标右键,创建 components -> test 文件夹在新建的 components -> test…

NLP / LLMs中的Temperature 是什么?

ChatGPT, GPT-3, GPT-3.5, GPT-4, LLaMA, Bard等大型语言模型的一个重要的超参数 大型语言模型能够根据给定的上下文或提示生成新文本,由于神经网络等深度学习技术的进步,这些模型越来越受欢迎。可用于控制生成语言模型行为的关键参数之一是Temperature …

[译]自下而上认识Elasticsearch

注意:原文发表时间是13年,所以实现有可能与新版不一致. 原文地址:https://www.elastic.co/cn/blog/found-elasticsearch-from-the-bottom-up Introduction 在本系列文章中,我们从一个新的视角来看ElasticSearch.我们将从下往上,从抽象的底层实现到用户可见层,我们在向上移动的…

【JaveEE】网络编程之TCP套接字、UDP套接字

目录 1.网络编程的基本概念 1.1为什么需要网络编程 1.2服务端与用户端 1.3网络编程五元组 1.4套接字的概念 2.UDP套接字编程 2.1UDP套接字的特点 2.2UDP套接字API 2.2.1DatagramSocket类 2.2.2DatagramPacket类 2.2.3基于UDP的回显程序 2.2.4基于UDP的单词查询 …

免疫力低会怎么样 什么情况会导致免疫降低

都说免疫力是很重要的,它会我们健康的第一道防线,但是当免疫力降低的时候,会出现哪些情况?为什么免疫力会降低? 免疫力是人体的防御系统,就像是维持人体正常运转的军队。免疫力的高低,一定程度上…

再探pytorch的Dataset和DataLoader

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052本文从分类、检测、分割三大任务的角度来剖析pytorch得dataset和dataloader源码,可以让初学者深刻理解每个参数的由来和使用,并轻松自定义dataset。思考&#x…

SQL LIMIT

SQL LIMIT SQL LIMIT子句简介 要检索查询返回的行的一部分,请使用LIMIT和OFFSET子句。 以下说明了这些子句的语法: SELECT column_list FROMtable1 ORDER BY column_list LIMIT row_count OFFSET offset;在这个语法中, row_count确定将返…

Html5版贪吃蛇游戏制作(经典玩法)

回味经典小游戏,用Html5做了个贪吃蛇的小游戏,完成了核心经典玩法的功能。 游戏可以通过电脑的键盘“方向键”控制,也可以点击屏幕中的按钮进行控制。(支持移动端哈) 点击这里试玩 蛇的移动是在18 x 18的格子中进行移…

sqoop数据导入

创建数据库 mysql全表数据导入hdfs mysql查询数据导入hdfs mysql指定列导入hdfs 使用查询条件关键字将mysql数据导入hdfs mysql数据导入hive 创建数据库 hive中创建user表 create table users( id bigint, name string ) row format delimited fields terminated by &…

数据结构 - 归并排序 | C

思路分析 什么是归并&#xff1f; 示例&#xff1a;&#xff08;归并后的结果copy到原数组&#xff09; 逻辑&#xff1a; if (a[begin1] < a[begin2]) {tmp[i] a[begin1];} else {tmp[i] a[begin2];} 归并排序 分解到“有序”再归并 递归 int middle (left righ…

哈希——unordered系列关联式容器

目录 unordered系列关联式容器 概念 unordered_map 无序去重 operator[] unordered_set 无序去重 OJ练习题 重复n次的元素 两个数组的交集 两个数的交集二 底层结构 概念 哈希冲突 闭散列 结点的定义 扩容 字符串取模 插入 查找 删除 闭散列完整代码 开…

安卓远程控制软件哪个好用

如果您曾希望将个人电脑放在口袋里&#xff0c;那么您可能只需要安卓远程访问软件。 没有远程访问应用程序&#xff1a;使用和控制计算机的唯一方法是坐在计算机前并手动输入命令。 使用远程访问应用程序&#xff1a;您可以在世界任何地方通过 Internet 连接从您的安卓平板电…

【30天python从零到一】---第七天:列表和元组

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; Python专栏 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样…

计算机组成原理---第五章中央处理器

&#xff08;一&#xff09;CPU 的功能和组成 CPU 的功能 Ⅰ 概述&#xff1a;当程序指令装入内存储器后&#xff0c;CPU 用来自动完成取指令和执行指令的任务。 Ⅱ CPU 的功能&#xff1a;①指令控制 ②操作控制 ③时间控制 ④数据加工 2.CPU 的基本组成 CPU 的基本部分为运…

【论文阅读】[JBHI] VLTENet、[ISBI]

[JBHI] VLTENet 论文连接&#xff1a;VLTENet: A Deep-Learning-Based Vertebra Localization and Tilt Estimation Network for Automatic Cobb Angle Estimation | IEEE Journals & Magazine | IEEE Xplore Published in: IEEE Journal of Biomedical and Health Infor…

9.1 相关分析

学习目标&#xff1a; 如果我要学习相关分析&#xff0c;我可能会按照以下步骤进行&#xff1a; 确定学习相关分析的目的和应用场景&#xff0c;例如研究两个变量之间的相关性、了解变量之间的关系、预测未来趋势等。学习相关分析的基本概念和原理&#xff0c;包括相关系数、…

VS——Visual Studio 2022 社区版——快捷键

VS——Visual Studio 2022 社区版——快捷键官网简介PDF完整PDF编辑编辑&#xff1a;常用快捷方式菜单栏 会显示 快捷键功能搜索大纲 折叠 展开Ctrl M M 切换官网 https://learn.microsoft.com/zh-cn/visualstudio/ide/default-keyboard-shortcuts-in-visual-studio?viewvs-2…

数据结构 — 【排序算法】

目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 直接插入排序 希尔排序 2.2 选择排序 直接选择排序 堆排序 2.3 交换排序 冒泡排序 快速排序 2.4 归并排序 2.5 非比较排序 计数排序 基数排序 3.排序算法…

【Unity入门】12.MonoBehaviour事件函数

【Unity入门】MonoBehaviour事件函数 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;常用的事件函数 &#xff08;1&#xff09;start和update方法 之前我们写的脚本&#xff0c;会默认帮助…