Skip to content

DiffEdit

DiffEdit: 基于扩散模型的语义图像编辑与掩码引导 由 Guillaume Couairon、Jakob Verbeek、Holger Schwenk 和 Matthieu Cord 共同撰写。

论文摘要如下:

图像生成最近取得了巨大进展,扩散模型能够为各种文本提示生成令人信服的图像。在本文中,我们提出了 DiffEdit,一种利用文本条件扩散模型进行语义图像编辑的方法,其目标是根据文本查询编辑图像。语义图像编辑是图像生成的扩展,额外的约束是生成的图像应尽可能接近给定的输入图像。基于扩散模型的当前编辑方法通常需要提供掩码,通过将其视为条件修复任务来简化任务。相比之下,我们的主要贡献是能够自动生成一个掩码,突出显示输入图像中需要编辑的区域,通过对比不同文本提示条件下的扩散模型预测。此外,我们依赖于潜在推理来保留这些感兴趣区域的内容,并展示了与基于掩码的扩散模型的出色协同作用。DiffEdit 在 ImageNet 上实现了最先进的编辑性能。此外,我们还在更具挑战性的设置中评估了语义图像编辑,使用了 COCO 数据集的图像以及基于文本生成的图像。

原始代码库可以在 Xiang-cd/DiffEdit-stable-diffusion 找到,你可以在 这个演示 中尝试使用它。

这个管道由 clarencechen 贡献。❤️

提示

  • 该管道可以生成可以输入到其他修复管道的掩码。
  • 为了使用此管道生成图像,必须提供一个图像掩码(源提示和目标提示可以手动指定或生成,并传递给 [~StableDiffusionDiffEditPipeline.generate_mask])和一组部分反转的潜在变量(使用 [~StableDiffusionDiffEditPipeline.invert] 生成),在调用管道生成最终编辑图像时,这些参数必须作为参数提供。
  • 函数 [~StableDiffusionDiffEditPipeline.generate_mask] 暴露了两个提示参数,source_prompttarget_prompt,让你可以控制最终生成图像中的语义编辑位置。例如,如果你想将“猫”翻译为“狗”。在这种情况下,编辑方向将是“猫 -> 狗”。为了在生成的掩码中反映这一点,你只需将与包含“猫”的短语相关的嵌入设置为 source_prompt,将“狗”设置为 target_prompt
  • 在使用 invert 生成部分反转的潜在变量时,将描述整个图像的标题或文本嵌入分配给 prompt 参数,以帮助引导逆潜在变量采样过程。在大多数情况下,源概念足够描述以产生良好的结果,但请随意探索其他选择。
  • 在调用管道生成最终编辑图像时,将源概念分配给 negative_prompt,将目标概念分配给 prompt。以上述示例为例,你只需将与包含“猫”的短语相关的嵌入设置为 negative_prompt,将“狗”设置为 prompt
  • 如果你想在上述示例中反向操作,即“狗 -> 猫”,则建议:
    • generate_mask 的参数中交换 source_prompttarget_prompt
    • 在 [~StableDiffusionDiffEditPipeline.invert] 中将输入提示更改为包含“狗”。
    • 在调用管道生成最终编辑图像时,交换 promptnegative_prompt 的参数。
  • 源提示和目标提示,或其相应的嵌入,也可以自动生成。请参阅 DiffEdit 指南以获取更多详细信息。

StableDiffusionDiffEditPipeline

[[autodoc]] StableDiffusionDiffEditPipeline - all - generate_mask - invert - call

StableDiffusionPipelineOutput

[[autodoc]] pipelines.stable_diffusion.StableDiffusionPipelineOutput