【浅谈图像生成模型Diffusion Model原理】李宏毅2023春机器学习课程笔记
考虑到个人在一些问题上需要李宏毅教授在2023年课程中讲到的内容补充,所以我会把部分李宏毅教授在2023年的课程内容提上来挑着学习,因为是挑着看的,我也不知道会不会全部看完,所以这里就不分EP了。课程的地址:【授权】李宏毅2023春机器学习课程_哔哩哔哩_bilibili。
本次博客内容通过著名的DDPM(Denoising Diffusion Probabilistic Models)来浅谈图像生成模型Diffusion Model的原理。Diffusion Model是近几年比较热门的图像生成模型。
我们先来讨论一下Diffusion Model是如何运作的。
我们会把distribution中simple出来的向量,因为这个向量最后要变化到我们输出图像的样子,所以这里simple出来的向量大小需要和最后我们期望输出的图像一致。首先这个simple出来的向量一开始肯定是我们看不懂的杂讯,所以我们需要用一个Denoise的神经网络,让一开始的这个vector通过Denoise得到去除杂讯的图像。那这个去除杂讯的Denoise我们会反复通过很多次,而且这个Denoise的次数是我们事先固定的。所以Diffusion Model简单地说就是让distribution中simple出来的向量不断经过Denoise去除杂讯,最终得到清晰的图片。
“在我开始工作之前,雕塑已经在大理石块内完成了。它是已经有了,我只需要凿掉多余的材料。”——米开朗基罗。
其实Diffusion Model产生图像的原理也和米开朗基罗口中的雕塑一样:本来图片就已经在杂讯里面denoise只是把杂讯部分过滤掉罢了。
负责把图像里杂讯过滤掉的network就是Denoise。上面说会把图像一遍一遍地过这个Denoise,但其实这个Denoise本身是同一个。所以这里的Denoise的module有两个输入,除了图像以外,还有一个额外的数字作为输入,这个数字就是上面说的目前step的步数,告诉Denoise现在在哪个step,代表目前输入图像的杂讯大小。
那前面说了那么多Denoise,是时候对Denoise做一个说明了。
Denoise内部在做的事情是:用Noise Predicter产生一个输入图片的杂讯,再把扣掉输入的图片来达到去噪的效果。
你可能会想问:为什么要先产生图像的杂讯,而不是直接产生去噪之后的图像呢?
因为让机器学习获取杂讯是相对容易的,后面会说明如何让机器学习获取图像的杂讯。而且你可以想想,如果机器已经直到了如何直接产生去噪之后的图像,那其实它也完全知道这个图像长什么样子了,也就是它也可以直接生成出来推图像了。但是这样子的方法就不如让机器学习如何获取杂讯这件事容易。
然后我们就来说说如何训练这里的Noise Predicter。
训练Noise Predicter的问题也就是如何让noise predicter知道一张图片的杂讯长什么样子。
这里我们的做法就是自己给distribution中simple出来的图片加杂讯,制造出noise predicter的杂讯的数据集。这样子的一个过程就称之为Forward Process(Diffusion Process)。然后我们就可以和训练普通的神经网络一样训练noise predicter,让它输出图片的杂讯就可以了。
最后我们来考虑一下文字条件输入的情况。
这里文字到影像为pair成对的资料需要的资料集是非常大的。LAION用了5.85Billion的数据才得到这样子一个比较好的效果。
把文字加到model里面的做法就是给每一个step的denoise模组都加上一个额外的文字输入。
所以这里Noise Predicter就有带有杂讯的图像、当前的step数和限定的文字条件的三个输入参数。
训练的时候也是一样,多给一个文字的输入即可。
最后在这里贴一个DDPM原文里面完整的演算。
以上就浅谈了图像生成模型Diffusion Model原理。
评论