Classifier guidance与Classifier free diffusion的简单理解

发布于:2024-05-08 ⋅ 阅读:(34) ⋅ 点赞:(0)

参考:Classifier Guidance 和 Classifier Free Guidance,一堆公式不如两行代码 - 蓟梗的文章 - 知乎
https://zhuanlan.zhihu.com/p/660518657
Classifier Guidance和Classifier-free Guidance 总结 - 走遍山水路的文章 - 知乎
https://zhuanlan.zhihu.com/p/675387002


场景:首先,有一个训好的diffusion模型,可以从高斯分布的噪声生成图片。
现在,你希望对生成的图片加以控制,让它生成你想要的图片。

方法一:使用一个训练好的分类器来监督,辅助diffusion生成

eg. 在diffusion的每个时间步,将生成好的图像放进分类器分类,然后将分类损失对于噪声图片的梯度与生成的图片相加,使得生成的图片向正确图片迈进

方法二:使用condition前后的差值作为辅助

eg. condition是指文本prompt。将输入空文本时的去噪输出+scale*(输入prompt后的输出-空文本去噪输出),即可得到输出
注意,因为原本diffusion是不接收文本输入的,现在要加上文本condition,自然需要重新训练
另外,文本输入的编码器是clip encoder


简单理解就是上面这样,接下来看看推导:

方法一

在这里插入图片描述
如图所示,y是类别,比如猫、狗之类, x t x_t xt是生成的图像。现在我们要在已知y的情况下得到图像,也就是左上角最原始的式子

  1. 第一行,通过贝叶斯公式将概率公式转化
  2. 第二行,通过log函数的公式将乘除拆分为加减
  3. 第三行,第一部分是 p ( x ) p(x) p(x),也就是图像的概率(全概率),也就是直接用diffussion推导得到的下个时间步的图像;第二部分是已知图像,y的概率,可以看作一个分类器,将生成的图像分类,然后求对应类别y的梯度;第三部分,本来还应该一个东西,但由于y固定,所以 p ( y ) p(y) p(y)也是确定的,不会有梯度,因此省略。

综上来说,最终的结果就是当前生成的图像+分类器的梯度

方法二

我们已经得到了condition下的图像概率:
在这里插入图片描述
上面把分类器的公式进行了进一步推导,到最后变成了套娃,“要求我自己时,还需要我自己参与”
有条件的输出 = 无条件时的输出+ γ \gamma γ(有条件的输出-无条件的输出)
无条件的输出相当于diffusion的一张正常图片,右边这部分相当于加上condition的特征


网站公告

今日签到

点亮在社区的每一天
去签到