Improved Diffusion代码

DDPM的代码分两个部分:diffusion、神经网络

一、diffusion分两个过程:forward process前向过程(无参)和reverse process反向过程(含参,即有需要模型更新的参数)

(1)forward process前向过程:主要是将原始的数据分布一步一步加噪声,最后变成标准的正态分布

                ①beta schedule:加噪的方案,即每一步是如何加噪的。整个加噪过程是由beta决定的

                ②基于x0和t采样出t时刻加噪后的样本xt

                ③后验分布:基于x0、xt、t计算出前一时刻的分布,即xt-1的均值与方差,根据重参数 的技巧采样出xt-1去噪后的样本

                ④xT服从标准分布

生成模型是反过来的,一开始是噪声,经过一步步的迭代生成我们想要的图片

(2)reverse process过程:推理的过程,生成全新的样本,且生成同样含义不同风格的照片

神经网络的作用:预测xt-1.即我们将xt与t输入到神经网络去得到xt-1的分布,得到的分布与在forward过程中的后验分布距离越接近越好

reverse process过程分两部分:train、infer

infer部分:训练好模型后,就可以把xT(标准的噪声)代入到模型中,使用重参数技巧就可以采样出xT-1......x0

train阶段:总体思路:希望模型根据xt和t作为输入,预测出xt-1的分布,再将此分布与后验过程中得到的分布进行对比,与后验分布(真实分布)计算距离,如果非常接近就代入infer阶段,去一步步预测x0.

        ①将xt和t代入模型,来预测出xt-1的分布

        ②MSE loss:前向过程中得到的噪声与我们预测的噪声计算一个差值;在IDDPM中利用KL散度,如下图

Improved Diffusion代码_第1张图片

L0是x1和x0的条件分布,‘在图像中可以认为是自然函数;在0~T之间时刻的Lt-1就是后验分布与我们预测的分布之间的KL散度;一开始T时刻的LT不参与网络的优化,但是可以当作评估指标;

③计算预测分布与真实的后验分布之间的KL Loss

④基于训练集和采样训练:首先像普通模型一样把训练集打散,然后再分成一个一个的batch;

                                      均匀采样t:在每个batch训练的过程中,会随机生成0~T时刻的图像,然后代入到模型中(所有时刻T中被选中的概率一样)

                                     非均匀采样:基于每个时刻,每个step的loss值,来计算其重要性,进行一个重要性采样。

二、神经网络部分:

attention-based UNet :input blocks(编码器)、mid blocks(中间部分,不改变通道数,不改变空间结构)、output blocks(解码器)

你可能感兴趣的:(人工智能)