Attend-and-Excite 项目介绍
项目背景
随着技术的进步,现代的文本到图像生成模型已经取得了不小的成果。这些模型能根据给定的文本提示生成丰富多样且具有创意的图像。不过,目前最先进的扩散模型在生成时,依然可能无法完全呈现出输入文本提示中的所有语义细节。这种情况被研究人员称为“灾难性忽视”,即模型可能无法生成某些文本提示中的对象,或者不能正确地将属性(例如颜色)与相应的对象绑定。
Attend-and-Excite 方法的提出
为了解决上述问题,Attend-and-Excite 引入了生成语义指导(Generative Semantic Nursing, 简称 GSN)的概念。这是一种在推理过程中实时介入生成过程的方法,旨在提高生成图像对文本提示的忠实度。Attend-and-Excite 方法通过调整模型的交叉注意力机制,确保模型能关注到文本提示中的所有主体词汇,并增强它们的激活,使生成图像更加贴近文本描述。
方法概述
使用 Attend-and-Excite 方法,可以在图像生成过程中引导模型修改交叉注意力值,使生成结果更忠于输入文本提示。以 Stable Diffusion 模型为例,单纯依靠其自身(如上部图示),可能难以生成包含多个对象(如马和狗)的图像。而通过加入 Attend-and-Excite 方法(如下部图示),可以强化主体词汇,从而生成更符合文本提示语义的图像。
使用说明
要生成图像,可以运行 run.py
脚本。例如:
python run.py --prompt "a cat and a dog" --seeds [0] --token_indices [2,5]
- 若要在 Stable Diffusion 2.1 上应用 Attend-and-Excite,可使用参数
--sd_2_1 True
。 - 可以通过传递种子的列表运行多个种子,例如
--seeds [0,1,2,3]
。 - 如果没有提供要更改的词汇索引列表,会根据 Stable Diffusion 的分词器分词,并展示每个词汇的索引,用户可自行指定要更改的索引。
- 若希望不使用 Attend-and-Excite,仅运行标准的 Stable Diffusion 模型,可以使用
--run_standard_sd True
参数。
生成的图像会自动保存到指定路径。
资源和评价
- 提供 Jupyter 笔记本用于重现论文中的图像生成和交叉注意力图解释。
- 提供了计算图像基于 CLIP 相似度的代码,用于图像与指导文本提示的相似性评估。
- 提供用于生成图像的评价提示。
项目贡献与引用
该项目基于 diffusers 库和 Prompt-to-Prompt 代码库的资源构建。如果使用此代码进行研究,请按给定格式引用相关工作。