Diffusion Model——扩散模型

news2025/1/23 11:15:37

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.coloradmin.cn/o/1454590.html

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

相关文章

基于scrapy框架的单机爬虫与分布式爬虫

我们知道,对于scrapy框架来说,不仅可以单机构建复杂的爬虫项目,还可以通过简单的修改,将单机版爬虫改为分布式的,大大提高爬取效率。下面我就以一个简单的爬虫案例,介绍一下如何构建一个单机版的爬虫&#…

WGS-84坐标系、东北天坐标系、载体坐标系

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、WGS-84坐标系二、东北天坐标系(ENU)1、站心直角坐标系2、站心极坐标系 三、载体坐标系总结 前言 作为一名智驾HIL工程师&#xff0…

My desktop didn‘t come with the Bluetooth.

You didnt turn on the Bluetooth on PC and phone.Turn on it to control your phone. My desktop didnt come with the Bluetooth. 电脑控制手机的时候,电脑蓝牙没打开 电脑蓝牙打开步骤 电脑蓝牙的小图标打开了 手机上可以看到计算机了【Thinkpad-T440p-zwf】 无…

Studio One 6.5下载安装激活图文教程

Studio One 6.5是由PreSonus公司打造一款功能强大的数字音乐创作软件,不仅为用户们提供了制作、混合、掌握和执行所有操作,还提供了简洁直观的主界面,因此使用起来也是十分的简单,就算是初学者也可以快速的上手使用起来&#xff0…

[计算机网络]---Http协议

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习&#xf…

云手机在引流方面有什么优势?

对于电商商家而言,无论是在亚马逊还是其他平台,有效的流量来源主要集中在短视频引流和社交电商营销。要在新兴社交平台为企业电商带来更多流量,不可忽视云手机的关键作用和独特优势。 云手机的定义与作用 在经营TikTok、Facebook和INS账号时&…

linux中的文件操作

linux的理念 在linux中的一切皆为文件!!! 在上一篇博客中提到过,Linux中的桌面本质上也是一种文件,而现在,在本篇博客中要对这种理念进行进一步的提升,也就是在Linux系统中的一切皆为文件&#…

多线程---创建线程

1.概述 多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段,每个线程都有独立的执行流程,可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提…

Swift 5.9 新 @Observable 对象在 SwiftUI 使用中的陷阱与解决

概览 在 Swift 5.9 中,苹果为我们带来了全新的可观察框架 Observation,它是观察者开发模式在 Swift 中的一个全新实现。 除了自身本领过硬以外,Observation 框架和 SwiftUI 搭配起来也能相得益彰,事倍功半。不过 Observable 对象…

SPSSAU【文本分析】|我的词库

我的词库 文本分析时,可能涉及到一些新词,比如‘内卷’,这个词很可能在词典中并未出现过,词库也不认识它。但研究者自己认识它,此时可将该词纳入到新词词库中,让系统统计词频等信息时也对该词进行统计。当…

【牛客面试必刷TOP101】Day23.BM27 按之字形顺序打印二叉树和BM30 二叉搜索树与双向链表

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…

公众号答题活动怎么做_答题大闯关,赢取丰厚奖品

【智慧挑战】答题大闯关,赢取丰厚奖品,你准备好了吗? 在这个信息爆炸的时代,知识就是力量,智慧就是财富。你是否想展现自己的聪明才智,挑战自己的知识极限?今天,我们特别策划了一场…

git分布式版本控制工具基本操作

Windows操作 1.1 git基本操作 1.设置用户签名 git config user.name xx git config user.email xxb163.com2.初始化本地库 git init3.查看本地库状态 git status4.添加暂存区 git add 文件名称 git add *5.提交本地库 git commit -m "描述信息" 文件6.查看版本…

代码随想录算法训练营29期|day53 任务以及具体安排

第九章 动态规划part10 121. 买卖股票的最佳时机 // 解法1 class Solution {public int maxProfit(int[] prices) {if (prices null || prices.length 0) return 0;int length prices.length;// dp[i][0]代表第i天持有股票的最大收益// dp[i][1]代表第i天不持有股票的最大收…

【Linux网络】网络编程套接字(预备知识+UDP)

目录 预备知识 1. 理解源IP地址和目的IP地址 2. 理解源MAC地址和目的MAC地址 3. 认识端口号 4. 理解源端口号和目的端口号 5. 端口号(port) vs 进程pid 6. 认识TCP协议和认识UDP协议 7. 网络字节序 socket编程接口 1. socket 常见API 2. sock…

C++ STL详解:map

目录 一、map的使用 1.1map模板参数 1.2map的构造函数及迭代器 1.3map的容量与元素访问 1.4map中的增删查改 二、日常实操 一、map的使用 CSTL详解:set 通过对set的简单了解,我们可以知道,set就类似于二叉搜索树的key模型,…

黑马程序员-瑞吉外卖-day8

目录 菜品新增 菜品代码准备: 1.entity 2.mapper 3.service 4.sevice目录下的impl目录 5.controller 菜品口味代码准备: 1.entity 2.mapper 3.service 4.sevice目录下的impl目录 菜品新增 分析: 后台系统中可以管理菜品信息&…

医用软管用双轴测径仪 外径与椭圆度的双重检测!

摘要:软管的一大特点就是容易产生形变,接触式测量稍施压力可能导致测量不准,因此非接触式的高精高速测径仪被广泛的应用于生产中。 关键词:双轴测径仪,医用软管测径仪,软管测径仪,测径仪,软管外径测量仪 引言 非接触式的外径测量仪…

【监控】spring actuator源码速读

目录 1.前言 2.先搂一眼EndPoint 3.EndPoint如何被注入 4.EndPoint如何被暴露 4.1.如何通过http暴露 4.2.如何通过jmx暴露 5.EndPoint是怎么实现监控能力的 6.知道这些的意义是什么 1.前言 版本:spring-boot-starter-actuator 2.6.3 阅读源码一定要带着疑…

【Gitea】配置 Push To Create

引 在 Git 代码管理工具使用过程中,经常需要将一个文件夹作为仓库上传到一个未创建的代码仓库。如果 Git 服务端使用的是 Gitea,通常会推送失败。 PS D:\tmp\git-test> git remote add origin http://192.1.1.1:3000/root/git-test.git PS D:\tmp\g…