网站建设 网页设计需要技能,私人做网站有什么用,制作网页需要哪些技术,河北seo推广公司数据派THU 本文通过图解的方式让大家快速了解 Diffusion 原理。 [ 导读 ]想必大家都听说过——图像领域大火的深度生成模型Diffusion Model#xff0c;为了让大家快速了解 Diffusion 原理#xff0c;这篇文章我们通过图解的方式。希望对你有所帮助#xff0c;让你在学习和应…
数据派THU 本文通过图解的方式让大家快速了解 Diffusion 原理。 [ 导读 ]想必大家都听说过——图像领域大火的深度生成模型Diffusion Model为了让大家快速了解 Diffusion 原理这篇文章我们通过图解的方式。希望对你有所帮助让你在学习和应用AIGC技术的道路上更进一步 1 Diffusion文字生成图片——整体结构 1.1 整个生成过程 我们知道在使用 Diffusion 的时候是通过文字生成图片但是上一篇文章中讲的 Diffusion 模型输入只有随机高斯噪声和 time step。那么文字是怎么转换成 Diffusion 的输入的呢加入文字后 Diffusion 又有哪些改变下图可以找到答案。 ▲ 文字生成图片全过程 实际上 Diffusion 是使用 Text Encoder 生成文字对应的 embeddingText Encoder 使用 CLIP 模型然后和随机噪声 embeddingtime step embedding 一起作为 Diffusion 的输入最后生成理想的图片。我们看一下完整的图 ▲ token embedding、随机噪声embedding、time embedding一起输入diffusion 上图我们看到了 Diffusion 的输入为 token embedding 和随机 embeddingtime embedding 没有画出来。中间的 Image Information Creator 是由多个 UNet 模型组成更详细的图如下 ▲ 更详细的结构 可以看到中间的 Image Information Creator 是由多个 UNet 组合而成的关于 UNet 的结构我们放在后面来讲。现在我们了解了加入文字 embedding 后 Diffusion 的结构那么文字的 embedding 是如何生成的接下来我们介绍下如何使用 CLIP 模型生成文字 embedding。 1.2 使用CLIP模型生成输入文字embedding CLIP 在图像及其描述的数据集上进行训练。想象一个看起来像这样的数据集包含 4 亿张图片及其说明 ▲ 图像及其文字说明 实际上 CLIP 是根据从网络上抓取的图像及其文字说明进行训练的。CLIP 是图像编码器和文本编码器的组合它的训练过程可以简化为给图片加上文字说明。首先分别使用图像和文本编码器对它们进行编码。 然后使用余弦相似度刻画是否匹配。最开始训练时相似度会很低。 然后计算 loss更新模型参数得到新的图片 embedding 和文字 embedding。 通过在训练集上训练模型最终得到文字的 embedding 和图片的 embedding。有关 CLIP 模型的细节可以参考对应的论文 https://arxiv.org/pdf/2103.00020.pdf 1.3 UNet网络中如何使用文字embedding 前面已经介绍了如何生成输入文字 embedding那么 UNet 网络又是如何使用的实际上是在 UNet 的每个 ResNet 之间添加一个 Attention而 Attention 一端的输入便是文字 embedding。如下图所示 更详细的图如下 2 扩散模型Diffusion 前面介绍了 Diffusion 是如何根据输入文字生成图片的让大家有个大概的了解接下来会详细介绍扩散模型 Diffusion 是如何训练的又是如何生成图片的。 2.1 扩散模型Duffison的训练过程 ▲ 扩散模型Diffusion Diffusion 模型的训练可以分为两个部分 1. 前向扩散过程Forward Diffusion Process→图片中添加噪声
2. 反向扩散过程Reverse Diffusion Process→去除图片中的噪声。 2.2 前向扩散过程 前向扩散过程是不断往输入图片中添加高斯噪声。 2.3 反向扩散过程 反向扩散过程是将噪声不断还原为原始图片。 2.4 训练过程 在每一轮的训练过程中包含以下内容 1. 每一个训练样本选择一个随机时间步长 t。
2. 将 time step t 对应的高斯噪声应用到图片中。
3. 将 time step 转化为对应 embedding。 下面是每一轮详细的训练过程 2.5 从高斯噪声中生成原始图片反向扩散过程 上图的 Sample a Gaussian 表示生成随机高斯噪声Iteratively denoise the image 表示反向扩散过程如何一步步从高斯噪声变成输出图片。可以看到最终生成的 Denoised image 非常清晰。 补充1UNet模型结构 前面已经介绍了 Diffusion 的整个过程这里补充以下 UNet 的模型结构如下图所示。 这里面 Downsampe、Middle block、Upsample 中都包含了 ResNet 残差网络。 补充2Diffusion模型的缺点及改进版——Stable Diffusion 前面我们在介绍整个文字生成图片的架构中图里面用的都是 Stable Diffusion后面介绍又主要介绍的是 Diffusion。其实 Stable Diffusion 是 Diffusion 的改进版。 Diffusion 的缺点是在反向扩散过程中需要把完整尺寸的图片输入到 U-Net这使得当图片尺寸以及 time step t 足够大时Diffusion 会非常的慢。Stable Diffusion 就是为了解决这一问题而提出的。后面有时间再介绍下 Stable Diffusion 是如何改进的。 补充3UNet网络同时输入文字embedding 在第 2 节介绍 Diffusion 原理的时候为了方便都是没有把输入文字 embedding 加进来只用了 time embedding 和随机高斯噪声怎么把文字 embedding 也加进来可以参考前面的 1.3 节。 补充4DDPM为什么要引入时间步长t 引入时间步长 t 是为了模拟一个随时间逐渐增强的扰动过程。每个时间步长 t 代表一个扰动过程从初始状态开始通过多次应用噪声来逐渐改变图像的分布。因此较小的 t 代表较弱的噪声扰动而较大的 t 代表更强的噪声扰动。 这里还有一个原因DDPM 中的 UNet 都是共享参数的那如何根据不同的输入生成不同的输出最后从一个完全的一个随机噪声变成一个有意义的图片这还是一个非常难的问题。我们希望这个 UNet 模型在刚开始的反向过程之中它可以先生成一些物体的大体轮廓随着扩散模型一点一点往前走然后到最后快生成逼真图像的时候这时候希望它学习到高频的一些特征信息。由于 UNet 都是共享参数这时候就需要 time embedding 去提醒这个模型我们现在走到哪一步了现在输出是想要粗糙一点的还是细致一点的。 所以加入时间步长 t 对生成和采样过程都有帮助。 补充5为什么训练过程中每一次引入的是随机时间步长 t 我们知道模型在训练过程中 loss 会逐渐降低越到后面 loss 的变化幅度越小。如果时间步长 是递增的那么必然会使得模型过多的关注较早的时间步长因为早期 loss 大而忽略了较晚的时间步长信息。 ©作者 | 绝密伏击
单位 | 奇虎360高级算法专家 参考文献
https://medium.com/steinsfu/stable-diffusion-clearly-explained-ed008044e07e
http://jalammar.github.io/illustrated-stable-diffusion/
https://pub.towardsai.net/getting-started-with-stable-diffusion-f343639e4931
https://zhuanlan.zhihu.com/p/597924053
https://zhuanlan.zhihu.com/p/590840909?
https://arxiv.org/abs/2103.00020