
极市导读
本文主要对diffusion model这一模型进行详细的介绍,包括其前向过程、逆向过程以及训练等特点,并添加了一些对细节的理解和对照代码的思考。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
前言
其实早在去年就看过大佬Lil关于diffusion model精彩的介绍What are Diffusion Models? [1]但是后面一直没深入研究,很快就忘细节了。最近Diffusion Model火到爆炸(GLIDE[2],DALLE2[3],Imagen[4],和一系列Image Editing方法等等),所以又重新建起来学习了下。恐怕diffusion拥有成为下一代图像生成模型的代表的潜力(或者已经是了?)本文主要是对Lil博客进行翻译整理,会添加一些细节的理解和对照代码的思考,主要是为了方便自己学习记录,如果有理解错误的地方还请指出。
什么是Diffusion Model(扩散模型)?
首先我们来看一下最近火爆各个公众号的text-to-image结果:
图1. DALLE2生成结果
图2. Imagen生成结果
上述图片的结果都非常惊人,无论从真实度还是还原度都几乎无可挑剔。这里我们从由浅入深来了解一下Diffusion Model。首先还是放一个各类生成模型对比图:
图3. 不同生成模型对比图(来源:Lil博客)
diffusion model和其他模型最大的区别是它的latent code(z)和原图是同尺寸大小的,当然最近也有基于压缩的latent diffusion model[5],不过是后话了。一句话概括diffusion model,即存在一系列高斯噪声( 轮),将输入图片 变为纯高斯噪声 。而我们的模型则负责将 复原回图片 。这样一来其实diffusion model和GAN很像,都是给定噪声 生成图片 ,但是要强调的是,这里噪声 与图片 是同维度的。
diffusion model有很多种理解,这里介绍是基于denoising diffusion probabilistic models (DDPM)[6]的。
Diffusion前向过程
所谓前向过程,即往图片上加噪声的过程。虽然这个步骤无法做到图片生成,但是这是理解diffusion model以及构建训练样本GT至关重要的一步。
给定真实图片 ,diffusion前向过程通过 次累计对其添加高斯噪声,得到 ,如下图的q过程。这里需要给定一系列的高斯分布方差的超参数 .前向过程由于每个时刻 只与 时刻有关,所以也可以看做马尔科夫过程:
这个过程中,随着
图4. diffusion的前向(q)和逆向(p)过程,来源:DDPM
前向过程介绍结束前,需要讲述一下diffusion在实现和推导过程中要用到的两个重要特性。
特性1:重参数(reparameterization trick)
重参数技巧在很多工作(gumbel softmax, VAE)中有所引用。如果我们要从某个分布中随机采样(高斯分布)一个样本,这个过程是无法反传梯度的。而这个通过高斯噪声采样得到
上式的z依旧是有随机性的, 且满足均值为
特性2:任意时刻的
可以由
和
表示
能够通过

由于独立高斯分布可加性,即

因此可以混合两个高斯分布得到标准差为
一开始笔者一直不清楚为什么Eq(1)中diffusion的均值每次要乘上
Diffusion逆向(推断)过程
如果说前向过程(forward)是加噪的过程,那么逆向过程(reverse)就是diffusion的去噪推断过程。如果我们能够逐步得到逆转后的分布
虽然我们无法得到逆转后的分布
过程如下:

