正态分布和高斯噪声
如,对于标准正态分布X~N(0,1),对于x∉(-1,1),我们称这些随机变量为高斯噪声。
扩散模型概要
扩散现象:物质粒子从高浓度区域向低浓度区域移动的过程。
如果向一张图片逐渐添加高斯噪声,图片会变得越来越模糊;也可以通过逆向过程从噪声中生成图片。
前向过程
对于一张RGB图片,每个像素由R、G、B三个通道表示,每个通道的取值范围为[0,255]。
归一化:对于每个通道的取值,将其取值范围映射到[-1,1]。那么后续添加的高斯噪声的取值就在该区间之外。
随机采样:通过随机采样生成一张同样大小的噪声图片,通过随机采样后,每个通道的取值遵从标准正态分布。
加噪:目前,我们有两张图片,分别是原图片和噪声图片。我们将两张图片相同像素的通道取值混合,就可以得到一张加噪的图片。
使用上面的公式就可以计算出混合之后的图片像素通道值。
其中:ε为噪声图片的某个像素的某通道值,x为原图片相同位置的通道值,β∈[0,1]。
我们注意到,ε和x前的系数,sqrt(β)和sqrt(1-β),它们的平方和恒等于1。
当β的值增加时,x前的系数1-β的值就会减少,也就是说,β的值越大,原图的像素通道值所占的比例就越小,混合后生成的图片就越模糊。
对于原图G0,逐渐加噪后,可以得到以下公式:
为了方便后续的推导,我们做以下定义:
先考虑两个状态,x(t)和x(t-2),若由状态x(t-2)直接得到x(t)的值,由以下公式:
其中ε(t-1)和ε(t)为两个独立的随机变量,且都服从正态分布N(0,1)。而这两个随机变量的系数都为常数,所以:
服从
服从
又根据
可知
服从
原式变换为:
所以我们可以直接得到由图G0加噪成为Gt的结果:
反向过程
贝叶斯公式:
对于两个事件A和B,若A事件先于B事件发生,则对于B事件发生的情况下A事件发生的概率的计算公式如上。其中P(A)称为先验概率,P(A|B)是在B事件发生后对P(A)的修正,称为后验概率。P(B)称为证据,P(B|A)称为似然。
在反向过程中,x(t)到x(t-1)是一个随机过程,我们需要求出由x(t)到x(t-1)的概率。
所以,,若要求出该概率,只需求出等式右边的三个概率。
首先,对于和
,我们并不清楚其概率,但通过前向加噪的过程,我们知道
和
的概率,所以上式等价于:
,即
对于、
和
,通过前向加噪过程,我们知道:
那么服从
;同理可得:
服从
服从
此时,我们就知道了这三个概率的概率密度函数
通过贝叶斯公式,我们就可以求出
对于上式,我们只需求得ε,它代表从x0到xt加入的噪声。
为了得出ε的值,我们可以构建一个神经网络模型:
输入xt时刻的图像,通过预测该图像与某个x0原图加入的噪声,输出ε。
扩散模型原理
Denoise原理
给定一张图片和一个状态,在Denoise过程中,首先会由Noise Predicter根据输入的图片和状态生成一张噪声图片,将输入图片与噪声图片相减,就可以得到输出图片。
算法
DDPM使用了两个算法,分别是Training和Sampling。
对于Training算法:
给定一张图片x0和一张噪声图片ε,将这两张图片按照某种比例(t)混合,得到一张新的含有噪声的图片,训练的目的是:对于这张新的图片,预测出之前加入的噪声图片ε。
对于Sampling算法:
生成一张噪声图片,该噪声图片完全符合标准正态分布。接下来,逐步对该图片进行Denoise操作。
在进行每一次Denoise操作前,先生成一张噪声图片z,该图片也完全符合标准正态分布。
接着进行Denoise操作,将本次Denoise的输入图片(需要Denoise的图片)减去由Noise Predicter产生的噪声图片。在此之外,还需要加上之前生成的z噪声图片。?
经过多次Denoise操作后,就可以得到一张清晰的图片。