赞
踩
(本博客用于记录学习笔记,部分图片来源于b站唐宇迪大佬的课程,希望大家多多支持)
diffusion model就是扩散模型,是一类生成模型。它的目的是学习从纯噪声生成图片的方法。主要通过训练一个U-Net,接受一系列加了噪声的图片,学习预测所加的噪声。
diffusion model主要包括前向加噪扩散和反向去噪扩散两个步骤
我们的目的是给图像实现去噪效果,那么首先就要了解图像噪音的产生过程。
向前扩散过程其实就是不断往数据中加入高斯噪声(加入的噪声必须满足标准的高斯分布)。每一时刻都会添加噪声到图像中,后一时刻都是由前一时刻添加噪声得到的,最终得到纯噪声。
该过程可以看作不断构建标签(噪声)的过程。后续还原过程中会用到。
对于训练集中的每张图片,通过向前扩散过程都能生成一系列的噪声程度不同的加噪图片。而在在训练时,这些 不同程度的噪声图片 以及 生成它们所用的噪声 是实际的训练样本。
逐渐加噪声,找到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-1的分布得到Xt的分布,即 q(Xt|Xt-1) 已知,那么通过贝叶斯公式就能得到它的逆过程 q(Xt-1|Xt) ,即由Xt得到Xt-1的分布。
其中,依旧可以通过正向扩散中的结论得到:
由此,通过Xt的分布,可以得到Xt-1的分布 (μ, σ^2)
但是,在替换X0时引入的Zt怎么得到呢? Zt是我们要估计的每个时刻的噪声,显然是未知的,于是考虑利用神经网络模型得到Zt的预测值来近似,XT~X0的每一时刻都会预测一次噪声,其中损失计算中需要的真实标签由前向过程提供。
从数据集中采样初始图片X0,建立一个时间序列t(从1~T),随机采样符合标准正态分布的数据ɛ(尺寸与采样的初始图象X0相同)作为当前图像的噪声。
通过当前图像噪声ɛ与模型预测出的噪声ɛɵ进行损失梯度计算来训练模型(UNet),其中模型的输入包括时刻t与(将X0代入公式得到的)t时刻的图像分布Xt。
从数据集中采样噪声图片XT,从t=T开始以此计算前一时刻的图像分布Xt-1,直到计算出初始图象的分布X0。其中前一时刻的噪声用的是已经训练好的模型预测出的ɛɵ。
前向过程提供原始标签提供给神经网络进行训练,神经网络的输出值作为一个信号加入到逆向过程中,由噪声图像XT一步一步去噪得到初始清晰图像,就是diffusion model的图像生成过程。
以上,就是diffusion model的基本原理和计算过程,感谢支持
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。