DreamBooth Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation
概
可控文生图.
Motivation
- 之前的文生图模型缺乏可控性. 虽然我们可以通过特别的模型生成大差不差的图片.
-
如上图所示, 我们可以通过 "retro style yellow alarm clock with a white clock face and a yellow number three on the right part of the clock face in the jungle" 来生成一个在丛林中和左上角相似的闹钟. 但是可以发现, 这个闹钟或多或少和左上角的闹钟有区别.
-
有些时候, 我们希望将目标物体抠出来, 然后通过文字描述来改变它的姿态, 它的场景等等, 可以设想, 想想自己一拳就能打爆太阳的场景. 但是普通的文生图只能保证有一个人打爆了太阳系, 但是很难精准的让这个人是你.
DreamBooth
-
DreamBooth 的思想很简单, 它通过微调模型让模型记忆特定的物体, 然后你可以通过特定的 prompt 来激活这个物体.
-
如上图所示, 对于普通的 diffusion 模型, 我们可以通过 "A dog" 来生成一只随意的狗. DreamBooth 则是希望通过 "A [V] dog" 来生成包含左上角的狗的图片. 这里 [V] 是一个符号, 你可以认为它是这只狗的独一无二的名字.
-
当然, 为了微调, 我们需要将 V, token 化并得到它的向量表示:
\[f(\mathbf{V}). \] -
其实, 一个比较简单的做法是随机选择一些符号构成 V, 比如 "xxy5sty00", 但是这种做法有可能会导致
\[f(\mathbf{V}) \]和一些已有的概念有比较大的联系.
-
所以作者特意找一些不常见的 tokens 并映射回来得到 \(\hat{\mathbf{V}}\), 最后 'inverting the vocabulary' 得到最后的符号 [V].
-
回到上图中, 可以发现它包含两个损失:
- Reconstruction Loss: 它要求经过 "A [V] dog" prompt 生成的图片和左上角的图片接近;
- Class-Specific Prior Preservation Loss: 它首先通过原本的模型得到图片 \(\mathbf{x}_{\mathbf{pr}}\), 该图片和噪声 \(\bm{\epsilon}\) 进行融合, 以此和 "A dog" 为条件生成图 \(\mathbf{x}'\), 我们要求它和 \(\mathbf{x}_{\mathbf{pr}}\) 接近.
-
总的损失可以表示为:
代码
[official]