跨图像注意力机制实现零样本外观迁移 (SIGGRAPH 2024)
Yuval Alaluf*, Daniel Garibi*, Or Patashnik, Hadar Averbuch-Elor, Daniel Cohen-Or
特拉维夫大学
- 表示贡献相同
近期文本到图像生成模型的进展展示了捕捉图像深层语义理解的卓越能力。在这项工作中,我们利用这种语义知识来转移具有相似语义但形状可能有显著差异的物体间的视觉外观。为实现这一目标,我们基于这些生成模型的自注意力层,引入了一种跨图像注意力机制,隐式地建立了跨图像的语义对应关系。具体来说,给定一对图像——一个描绘目标结构,另一个指定所需外观——我们的跨图像注意力将结构图像对应的查询与外观图像的键和值相结合。这种操作在去噪过程中应用时,利用建立的语义对应关系生成一个结合了所需结构和外观的图像。此外,为提高输出图像质量,我们利用三种机制,这些机制在去噪过程中操纵噪声潜码或模型的内部表示。重要的是,我们的方法是零样本的,不需要优化或训练。实验表明,我们的方法在广泛的物体类别中都有效,并且对两个输入图像之间的形状、大小和视角变化具有鲁棒性。
给定两张描绘源结构和目标外观的图像,我们的方法以零样本方式生成一张融合了一个图像结构和另一个图像外观的图像。
描述
我们的跨图像注意力和外观迁移论文的官方实现。
环境
我们的代码基于diffusers
库的要求构建。要设置环境,请运行:
conda env create -f environment/environment.yaml
conda activate cross_image
使用方法
使用我们的跨图像注意力技术获得的示例外观迁移结果。
要生成图像,您可以简单地运行run.py
脚本。例如,
python run.py \
--app_image_path /path/to/appearance/image.png \
--struct_image_path /path/to/structure/image.png \
--output_path /path/to/output/images.png \
--domain_name [物体所属的领域(例如,动物、建筑)] \
--use_masked_adain True \
--contrast_strength 1.67 \
--swap_guidance_scale 3.5 \
注意:
- 进行反演时,如果没有明确指定提示,我们将使用提示
"A photo of a [domain_name]"
- 如果
--use_masked_adain
设置为True
(默认值),则必须给出--domain_name
以使用自分割技术计算掩码。- 在领域不明确的情况下,您也可以将
--use_masked_adain
设置为False
,这样就不需要domain_name
。
- 在领域不明确的情况下,您也可以将
- 您可以将
--load_latents
设置为True
,从文件加载潜在变量,而不是每次都反演输入图像。- 如果您想生成具有相同结构但不同外观的多个图像,这很有用。
演示笔记本
使用我们的跨图像注意力技术获得的其他外观迁移结果。
我们还提供了一个可在Google Colab上运行的笔记本,请参见notebooks/demo.ipynb
。
HuggingFace演示 :hugs:
我们还提供了一个简单的HuggingFace演示,可以在您自己的图像上运行我们的方法。 在这里查看!
致谢
这份代码建立在diffusers库的代码基础上。此外,我们借鉴了以下仓库的代码:
- Edit-Friendly DDPM Inversion用于反演输入图像。
- Prompt Mixing用于计算我们的AdaIN操作中使用的掩码。
- FreeU用于提高Stable Diffusion的整体生成质量。
引用
如果您在研究中使用此代码,请引用以下工作:
@misc{alaluf2023crossimage,
title={Cross-Image Attention for Zero-Shot Appearance Transfer},
author={Yuval Alaluf and Daniel Garibi and Or Patashnik and Hadar Averbuch-Elor and Daniel Cohen-Or},
year={2023},
eprint={2311.03335},
archivePrefix={arXiv},
primaryClass={cs.CV}
}