Diffusion Model——扩散模型

Diffusion Model

文章目录

  • `Diffusion Model`
    • `Denoising Diffusion Probabilistic Model(DDPM)`
      • 去噪过程:
      • `Denoise`结构
      • 训练过程
      • `Text-to-image Generation Model`
    • `High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)`
      • 基本结构与推理过程
      • `Text Encoder`
      • `Decoder`
      • `Generation Model`
    • `DDPM`算法简析

所学内容来源于李宏毅2023扩散模型,DDPM链接:【生成式AI】Diffusion Model 概念讲解 (1/2)_哔哩哔哩_bilibili

Stable Diffusion链接:https://www.bilibili.com/video/BV14c411J7f2?p=2

Denoising Diffusion Probabilistic Model(DDPM)

去噪过程:

在这里插入图片描述

​ 去噪过程又称为推理过程测试过程后向扩散过程。一个训练好的Denoise模型,它的去噪过程,是一张正态分布噪声图逐渐经过去噪还原为清晰图片的过程。在最初,输入一张从正态分布中simple出来的噪声图,以及该图片对应的时间步time embedding,经过去噪,会得到一张较为清晰的图。然后以此类推,将较为清晰的图输入到同一个Denoise Model中,继续输入一个新的time embedding,就可以得到更加清晰的图……最后就可以生成出所需要的图片。

在这里插入图片描述

​ 很显然,Denoise模型在这里需要两个输入,一个是需要去噪的图片,一个是时间步time embedding或者称为time step。时间步的作用,无疑是说明当前去噪的力度,也说明当前噪声的强度。在最初的时间步,Denoise进行较大的去噪,逐步地,后面的时间步使得Denoise进行较小的去噪。

Denoise结构

在这里插入图片描述

DDPM的里面是一个噪声预测器(noise predictor)。Noise Predictor接收一个图片和时间步作为输入,然后生成一张noise,然后Denoise利用这张noise进行去噪。具体而言,是将输入图片减去这个预测出来的noise以达到去噪效果。

训练过程

​ 从Denoise结构可以很明显地看出,noise predictor预测出来的噪声应该需要一个ground-truth作为监督。这个ground-truth是去噪效果最好的一个噪声,对应的,预测出来用于去噪的噪声并不一定使得去噪效果最好,这时候就需要这个ground-truth监督。

noise predictor能否预测出一个好的noise,体现出noise predictor的优劣,具体在于其内部的参数 θ \theta θ是否达到了最优。所以我们需要训练noise predictor

​ 训练过程有一个重要的过程,称为加噪过程,又称为前向扩散过程。如下图,具体而言,在正态高斯分布中simple出一张随机噪声,然后将这个随机噪声加到清晰图片上,得到较为模糊的图片,同时记录此时的时间步time step

在这里插入图片描述

​ 很明显,加噪后的图片和此时的时间步time step就是Denoisenoise predictor的输入input,而所加的噪声就是ground-truth。将这三个数据交给Denoise去噪,noise predictor会输出一个噪声,然后与ground-truth计算损失即可。

在这里插入图片描述

​ 所以,训练过程离不开去噪过程加噪过程。显然,去噪过程和加噪过程操作是相反的。

Text-to-image Generation Model

在这里插入图片描述

​ 如果我们想要通过文字引导生成我们想要的图片呢?Text-to-image Generation Model包含Text-to-image Generator,通过给其输入cat,chicken,rabit等文字,使得其生成特定的图片。

​ 实际上,这个Text-to-image GeneratorNoise Predictor相差不大,只是Text-to-image Generator需要额外一个输入,即文本作为第三个输入,以引导其生成过程。

在这里插入图片描述

​ 使用Text-to-image Generator进行去噪,去噪过程每一步还需要额外给Denoise添加文本作为引导。

在这里插入图片描述

​ 加噪过程也如此,每一步都将文本作为输入。

在这里插入图片描述

High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)

基本结构与推理过程

在这里插入图片描述

​ 基本结构包含三个组件,Text EncoderGeneration ModelDecoderstable diffusion的生成图片的大致流程是:首先输入一段文本,经过Text Encoder处理为一个词向量,然后交给Generation Model,同时输入一个从正态高斯分布simple出来的随机噪声,生成一个latent representation,就是所谓的“中间产物”。然后这个latent representation交给Decoder,生成图片。

​ 这个生成图片的流程,又称为推理过程测试过程

​ 论文中的stable diffusion结构与上面提到的基本结构大差不差:

在这里插入图片描述

​ 训练stable diffusion时,三个组件是分别训练的。

Text Encoder

text encoder的作用是接收一段文本,然后将其转换为一组词向量text encoder通常是一个预训练encoder。有实验证明显示,text encoderstable diffusion中的作用相当大,如下图,随着更大的text encoder,其曲线更加趋向右下方。愈趋向右下方,Diffusion Model性能越好。

在这里插入图片描述

​ 首先解释一下FIDFID描述了两张图特征的接近程度。将两张图片分别送入CNN进行降维,得到两个表征向量。这两个表征描述了两张图片的分布。一般认为是两个不同的高斯分布。FID就是两个高斯分布的距离,距离越小,FID越小,则两个分布越接近;两个向量越接近,则两张图片特征越接近。

在这里插入图片描述

​ 由此看来,FID越小,生成图片与原始图片越相似。也就是说,FID越小越好

​ 然后来解释一下CLIP ScoreCLIP Score则是描述了文本与生成图片之间的符合度。首先将一段文本送入Text Encoder,输出为文本的embedding向量。然后将生成图片送入Image Encoder,输出一个图片的embedding向量。CLIP Score就是两个向量的高斯分布的距离CLIP Score足够大,则说明这段文本能够很好地描述这个图片,或者说这个生成图片符合文本需要,也说明这段文本与图片足够匹配。也就是说,CLIP Score越大越好

在这里插入图片描述

​ 所以,上面那张曲线图,曲线愈趋向右下方,则代表着更大的Text Encoder有着更小的FID,更大的CLIP Score,则对应Diffusion Model有着更好的性能。

Decoder

Decoder的作用通常是将一个laten representation还原为图片

​ 如何描述我们训练出来的Decoder的还原是好是坏?为了便于我们描述Decoder的好坏,我们需要Auto-Encoder辅助Decoder训练。训练Decoder的时候,将图片送入Auto-Encoder进行降维,生成latent representation,然后交给Decoder还原为生成图片,对两张图片的损失梯度下降,最优情况的Decoder就随着Auto-Encoder一起训练好了,就可以直接拿来使用。

在这里插入图片描述

​ 很明显,对Decoder的训练需要的图片,并不依赖于Diffusion Model训练时候的数据。也就是说,可以随便找图片数据来训练Auto-EncoderDecoder而无必要从Diffusion Model训练时所用的数据中找图片,这样做可以最大化Decoder的还原能力。

Generation Model

Generation ModelText Encoder接收文本词向量,然后将上一个时间步latent representation去噪处理为当前时间步latent representation,交给Decoder作最后的处理。

​ 训练Generation Model本质上与训练DDPM没有太大区别。训练是一个加噪的过程。首先将清晰图片经过一个训练好的Auto-Encoder转换为latent representation,然后加入从正态高斯分布simplenoise,得到当前时间步Step 1latent representation。以此类推,不断加噪至指定步数1000。

在这里插入图片描述

​ 训练的过程实际上是在训练Generation Model中的Noise Predictor,除了像“A cat in the snow”这样的文本作为Noise Predictor的输入Input之外,还有当前时间步以及加噪的结果作为输入。如下图:

在这里插入图片描述

在这里插入图片描述

Noise Predictor在训练的过程中,接收latent representationText embeddingTime step作为输入,预测出噪声,与当前时间步所加噪声ground-truth对比,计算损失,梯度下降。

​ 我们训练好了Generation Model后,就可以用它来进行去噪(推理过程):给定一个为pure noiselatent representation以及文本,依次迭代去噪,每次计算去噪完的latent representationCLIP Score,足够高了就可以将此latent representation交给Decoder生成为图片。
在这里插入图片描述

DDPM算法简析

​ 这个是DDPM的算法图,分别是训练的算法图与推理的算法图,也就是分别对应着加噪(前向扩散过程)的算法图和去噪(反向扩散过程)的算法图。该部分省略了公式推导。

在这里插入图片描述

Training部分。x0是待加噪的图片,t是当前时间步, α ‾ \overline{\alpha} α是超参数,一般设置为尽可能接近1, ϵ \large{\epsilon} ϵ是从正态高斯分布中simple出来的噪声, ϵ θ \large{\epsilon_{\theta}} ϵθ代表Noise Predictor α ‾ x 0 + 1 − α ‾ ϵ \large{\sqrt{\overline{\alpha}}x_0 + \sqrt{1 - \overline{\alpha}}\epsilon} α x0+1α ϵ部分代表加噪后的图片, ϵ θ ( α ‾ x 0 + 1 − α ‾ ϵ , t ) \large{\epsilon_{\theta}(\sqrt{\overline{\alpha}}x_0 + \sqrt{1 - \overline{\alpha}}\epsilon, t)} ϵθ(α x0+1α ϵ,t)则代表了Noise Predictor利用时间步和加噪后的图片预测出拿来去噪的Noise ϵ − ϵ θ ( α ‾ x 0 + 1 − α ‾ ϵ , t ) \large{\epsilon-\epsilon_{\theta}(\sqrt{\overline{\alpha}}x_0 + \sqrt{1 - \overline{\alpha}}\epsilon, t)} ϵϵθ(α x0+1α ϵ,t)则代表了预测的噪声和加噪所利用的噪声的差别。然后对损失梯度下降即可。

Sampling部分。 x t x_t xt是待去噪的图片,t是时间步, x t − 1 x_{t-1} xt1是去噪后的图片, α \alpha α依然是超参数,与前面一样。z是从正态高斯分布中simple出来的噪声, σ \sigma σ是超参数。 1 − α 1 − α ϵ θ ( x t , t ) \large{\frac{1 - \alpha}{\sqrt{1 - \alpha}}\epsilon_{\theta}(x_t, t)} 1α 1αϵθ(xt,t)代表Noise Predictor预测出来的噪声, x t − 1 − α 1 − α ϵ θ ( x t , t ) \large{x_t - \frac{1 - \alpha}{\sqrt{1 - \alpha}}\epsilon_{\theta}(x_t, t)} xt1α 1αϵθ(xt,t)则代表去噪。最末尾加上一个 σ t z \sigma_tz σtz是为了提高扩散的泛化能力。

本文毕。

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

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

相关文章

【OpenAI Sora】 最强文生视频怎么用-新手小白必看教程

1. Sora 是什么AI 2024年2月16日,OpenAI在其官网上面正式宣布推出文本生成视频的大模型 Sora。 Sora能够根据简单的文本描述,生成高达60秒的高质量视频,使得视频创作变得前所未有的简单和高效。本文将为您提供关于如何使用Sora的最新详细教程…

Days 34 ElfBoard 音频接口

音频接口介绍 音频模块采用了 NAU88C22 芯片,芯片数据信号使用 I2S 接口进行通讯,主要信号功能: SAI_MCLK:音频信号主时钟; SAI_BCLK:音频信号位时钟; SAI_SYNC:左右声道控制信号&am…

OpenAI重磅发布Sora——首个视频生成模型:利用文本-视频人工智能将想象变为现实

想象一下,现在你有一段文本话描述的故事,通过输入这段文本,就可以立刻展开一个生动详细的视频。这就是 OpenAI 神奇的 Sora,一个革命性的文本到视频的 AI 模型。Sora于2024年2月推出,凭借其仅凭文字提示就能生成现实和…

天锐绿盾 | 办公终端文件数据\资料防泄密软件

天锐绿盾是一款电脑文件防泄密软件,旨在帮助企业保护其敏感数据免受未经授权的访问和泄露。该软件采用先进的加密技术和文件监控机制,确保企业数据在存储、传输和使用过程中的安全性。 PC地址:https://isite.baidu.com/site/wjz012xr/2eae091…

【计算机网络】P2P应用

将会在两个例子中得出结果 1,对等文件分发 ;2,大型对等方社区中的服务器 P2P文件分发 自拓展性 直接成因是:对等方除了是比特的消费者外还是它们的重新分发者BitTorrent 一个用于文件分发的P2P协议洪流 torrent 参与一个特定文件…

吴恩达机器学习全课程笔记第二篇

目录 前言 P31-P33 logistics (逻辑)回归 决策边界 P34-P36 逻辑回归的代价函数 梯度下降的实现 P37-P41 过拟合问题 正则化代价函数 正则化线性回归 正则化logistics回归 前言 这是吴恩达机器学习笔记的第二篇,第一篇笔记请见&…

HQChart实战教程69-分时图主图如何设置指标

HQChart实战教程69-分时图主图如何设置指标 效果图插件地址uniapp插件地址HQChart插件源码地址实现步骤1. 分时图主图指标2. 主图指标标题3. 切换指标示例源码效果图 在主图窗口,显示指标,并显示指标标题。效果入下图 H5,小程序, uniapp 都支持。插件最新版本才支持此功能。…

线程安全性的原理分析学习

初步认识Volatile 一段代码引发的思考 下面这段代码,演示了一个使用volatile以及没使用volatile这个关键字,对于变量更新的影响 package com.sp.demo;/*** author : lssffy* Description :* date : 2024/2/16 18:42*/ public class VolatileDemo {publi…

Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试

1、采用程序配置关闭“内核模块验证” 默认配置文件“stm32mp1_atk_defconfig”路径为“arch/arm/configs”; 使用VSCode打开默认配置文件“stm32mp1_atk_defconfg”,然后将下面的4条语句屏蔽掉,如下: CONFIG_MODULE_SIGy CONFIG_MODULE_…

2024/2/18:IO进程线程

作业1&#xff1a;使用fgets统计给定文件的行数 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {//定义FILE *类型的句柄FILE *fpNULL;//判断是否进行了外部传参if(argc ! 2){pri…

Javaweb之SpringBootWeb案例之AOP通知顺序的详细解析

3.2 通知顺序 讲解完了Spring中AOP所支持的5种通知类型之后&#xff0c;接下来我们再来研究通知的执行顺序。 当在项目开发当中&#xff0c;我们定义了多个切面类&#xff0c;而多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候&#xff0c;这多…

防御第五次作业

拓扑图及要求 1 创建安全区域 创建nat策略 测试 2 创建目标nat 测试 3 配置双向nat 配置IP 测试 查看会话表 4 FW1 FW3 结果 5 办公区限流 销售部限流 6 7

【每天学习一点点 day04】工程化 npm create 脚手架 create-vue, vue-cli 执行原理① - npm cli

希望我们每个人都能找到属于自己的花期&#xff0c;不急不躁&#xff0c;静等风来。 今天打算用 Docusaurus 开始搭建自己的知识库&#xff0c;之前早已有此想法&#xff0c;遗憾的是没有坚持下来。 这次借助这个机会&#xff0c;也计划将自己【每天学习一点点】系列整理在自己…

Windows编程环境配置!

喜欢的话麻烦大家多点点关注&#xff0c;谢谢&#xff01; 原文地址&#xff1a;Windows编程环境配置&#xff01; - Pleasure的博客 下面是正文内容&#xff1a; 前言 近期闲来无事&#xff0c;就想着把Windows系统中的环境给完善整理一下。方便后续码字时的不时之需。 正文…

keep-alive 的简单使用

vue-router 的嵌套与模块化 router 实例中增加 children 属性&#xff0c;形成层级效果。App.vue 中的 router-view 承载的是 router 实例最外层的路由对象&#xff0c;如 /login、/404 等PageHome.vue 中的 router-view 承载的是 children 中的路由对象&#xff0c;如 /home、…

GIS分析和摄影测量进行屋顶太阳能潜力评估

目前,不可再生的能源资源有限,而减少全球变暖的想法使可再生能源的利用成为当务之急。其中,太阳能作为最清洁、最丰富的可再生能源备受关注。此外,成本的日益降低也使太阳能成为一种极具吸引力的能源。然而,为了从太阳能中获得最大利益,必须考虑各种标准,并选择合适的区…

单片机学习笔记---AD/DA工作原理(含运算放大器的工作原理)

目录 AD/DA介绍 硬件电路模型 硬件电路 运算放大器 DA原理 T型电阻网络DA转换器 PWM型DA转换器 AD原理 逐次逼近型AD转换器 AD/DA性能指标 XPT2046 XPT2046时序 AD/DA介绍 AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟…

【maya 入门笔记】基本视图和拓扑

1. 界面布局 先看基本窗口布局&#xff0c;基本窗口情况如下&#xff1a; 就基本窗口布局的情况来看&#xff0c;某种意义上跟blender更像一点&#xff08;与3ds max相比&#xff09;。 那么有朋友就说了&#xff0c;玛格基&#xff0c;那blender最下面的时间轴哪里去了&…

使用 cgroup 时踩过的坑

1 cgroup 介绍 1.1 cgroup 介绍 cgroup 全称 control group&#xff0c;控制组。通过 cgroup 可以限制应用使用的资源&#xff0c;资源包括 cpu、内存、磁盘 io、网络等。 工作中经常使用的 docker 容器就使用了 cgroup 进行资源限制和隔离&#xff0c;cgroup 是 docker 的基…

最长子串和回文子串相关的算法题解

这里写目录标题 一、3. 无重复字符的最长子串二、5. 最长回文子串三、647. 回文子串四、516. 最长回文子序列 一、3. 无重复字符的最长子串 中等 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释:…