diffusion model基本原理和计算过程详解

(本博客用于记录学习笔记,部分图片来源于b站唐宇迪大佬的课程,希望大家多多支持)

什么是diffusion model

        diffusion model就是扩散模型,是一类生成模型。它的目的是学习从纯噪声生成图片的方法。主要通过训练一个U-Net,接受一系列加了噪声的图片,学习预测所加的噪声。

        

diffusion model的基本步骤

        diffusion model主要包括前向加噪扩散反向去噪扩散两个步骤

一、(预设的)前向diffusion

        我们的目的是给图像实现去噪效果,那么首先就要了解图像噪音的产生过程。

        向前扩散过程其实就是不断往数据中加入高斯噪声(加入的噪声必须满足标准的高斯分布)。每一时刻都会添加噪声到图像中,后一时刻都是由前一时刻添加噪声得到的,最终得到纯噪声。

        

         该过程可以看作不断构建标签(噪声)的过程。后续还原过程中会用到。

        对于训练集中的每张图片,通过向前扩散过程都能生成一系列的噪声程度不同的加噪图片。而在在训练时,这些 不同程度的噪声图片 以及 生成它们所用的噪声 是实际的训练样本。

第一个重要公式,如何由初始状态X0得到Xt时刻的分布呢(前向过程)

        逐渐加噪声,找到X0与Xt-1、Xt-2.....Xt的关系

        

        首先,定义给每一时刻定义一个权重项βt,我们给图片加噪是要越来越多,因此β会越来越大(原论文中0.0001到0.002),从而α越来越小。

        

        每一时刻的分布Xt都与前一时刻的分布Xt-1及其所加噪音Z1有关,随着t的增加,Xt-1权重值减小,Z1权重值增大,即噪音对图像的影响将越来越大。

        倘若要由我们的输入图像数据X0一步步递归计算到Xt,利用到RNN递归神经网络(串联结构),将很难训练,且速度很慢。由此,我们考虑能否直接由输入图像数据X0计算出Xt。

        

        带入Xt计算公式中可得:

        

        

        由此,任意时刻的分布Xt都可以直接由初始状态X0计算得到,而不再需要考虑中间过程。

       

二、(可训练的)反向去噪扩散过程

        反向去噪过程就是一个逆向过程:训练好模型后,采样、生成图片。即训练一个神经网络(U-Net),从纯噪音开始逐渐去噪,直到得到一个真实图像。

        

       想要一步从Xt直接还原到X0几乎是不可能的,因此,要逐渐去噪声,找到Xt与Xt-1、Xt-2.....X0的关系。

第二个重要公式,怎样由Xt计算出前一时刻的图像分布Xt-1

        通过前向过程我们能够由Xt-1的分布得到Xt的分布,即 q(Xt|Xt-1) 已知,那么通过贝叶斯公式就能得到它的逆过程 q(Xt-1|Xt) ,即由Xt得到Xt-1的分布。

        其中,依旧可以通过正向扩散中的结论得到:

        由此,通过Xt的分布,可以得到Xt-1的分布 (μ, σ^2)

        但是,在替换X0时引入的Zt怎么得到呢? Zt是我们要估计的每个时刻的噪声,显然是未知的,于是考虑利用神经网络模型得到Zt的预测值来近似,XT~X0的每一时刻都会预测一次噪声,其中损失计算中需要的真实标签由前向过程提供。

三、Diffusion Model 生成图像过程

        

        训练过程:

                从数据集中采样初始图片X0,建立一个时间序列t(从1~T),随机采样符合标准正态分布的数据ɛ(尺寸与采样的初始图象X0相同)作为当前图像的噪声。

                通过当前图像噪声ɛ与模型预测出的噪声ɛɵ进行损失梯度计算来训练模型(UNet),其中模型的输入包括时刻t与(将X0代入公式得到的)t时刻的图像分布Xt

        采样过程(反向扩散):

                从数据集中采样噪声图片XT,从t=T开始以此计算前一时刻的图像分布Xt-1,直到计算出初始图象的分布X0。其中前一时刻的噪声用的是已经训练好的模型预测出的ɛɵ。

        前向过程提供原始标签提供给神经网络进行训练,神经网络的输出值作为一个信号加入到逆向过程中,由噪声图像XT一步一步去噪得到初始清晰图像,就是diffusion model的图像生成过程。

        

以上,就是diffusion model的基本原理和计算过程,感谢支持

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值