DreamBooth Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

发布时间 2023-06-28 17:07:17作者: 馒头and花卷

Ruiz N., Li Y., Jampani V., Pritch Y., Rubinstein M. and Aberman K. DreamBooth: Fine tuning text-to-image diffusion models for subject-driven generation. arXiv preprint arXiv:2208.12242, 2022.

可控文生图.

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].

  • 回到上图中, 可以发现它包含两个损失:

    1. Reconstruction Loss: 它要求经过 "A [V] dog" prompt 生成的图片和左上角的图片接近;
    2. Class-Specific Prior Preservation Loss: 它首先通过原本的模型得到图片 \(\mathbf{x}_{\mathbf{pr}}\), 该图片和噪声 \(\bm{\epsilon}\) 进行融合, 以此和 "A dog" 为条件生成图 \(\mathbf{x}'\), 我们要求它和 \(\mathbf{x}_{\mathbf{pr}}\) 接近.
  • 总的损失可以表示为:

代码

[official]