GLIGEN:开放集合的基于约束的文本到图像生成(CVPR 2023)
Yuheng Li、Haotian Liu、Qingyang Wu、Fangzhou Mu、Jianwei Yang、Jianfeng Gao、Chunyuan Li*、Yong Jae Lee*(*共同资深作者)
- GLIGEN超越了文本提示:在冻结的文本到图像生成模型上实现新功能,可以基于各种提示进行约束,包括边界框、关键点和图像。
- GLIGEN在COCO和LVIS数据集上的零样本性能大幅超越了现有的有监督布局到图像基线。
:fire: 新闻
- [2023.11.2] GLIGEN已集成到LLaVA-Interactive中:这是一个集图像聊天、分割、生成和编辑于一体的演示。通过视觉聊天体验交互式图像编辑的未来。 [项目主页] [演示] [代码] [论文]
-
[2023.04.18] 我们更新了arXiv论文。我们在这里解释了GLIGEN和ControlNet之间的区别,以帮助研究人员更好地深入理解。
-
[2023.04.08] GLIGEN与Grounding DINO结合,无需人工标注边界框及其概念。给定语言提示,Grounding DINO用边界框定位概念:图像 $\rightarrow$ (边界框, 概念),然后GLIGEN对图像进行修复:(边界框, 概念) $\rightarrow$ 图像:
- [2023.03.22] 我们在diffusers上的分支已发布,支持基于文本框的生成和修复。现在更快、更灵活,并可从Huggingface Hub自动下载和加载模型!快来试试吧!
- [2023.03.20] 通过查看
计算机视觉在野外(CVinW)阅读列表
,了解GLIGEN等基于约束的图像生成研究最新进展。 - [2023.03.19] Yannic Kilcher在他最新的YouTube视频
人工智能最重要的一周
中介绍了GLIGEN。 - [2023.03.05] Gradio演示代码已在
GLIGEN/demo
发布。 - [2023.03.03] 代码库和检查点已发布。
- [2023.02.28] 论文被CVPR 2023接收。
- [2023.01.17] GLIGEN论文和演示发布。
环境要求
我们提供dockerfile来设置环境。
下载GLIGEN模型
我们提供了十个用于不同场景的检查点。这里的所有模型都基于SD-V-1.4。
模式 | 模态 | 下载链接 |
---|---|---|
生成 | 边界框+文本 | HF Hub |
生成 | 边界框+文本+图像 | HF Hub |
生成 | 关键点 | HF Hub |
修复 | 边界框+文本 | HF Hub |
修复 | 边界框+文本+图像 | HF Hub |
生成 | Hed图 | HF Hub |
生成 | Canny图 | HF Hub |
生成 | 深度图 | HF Hub |
生成 | 语义分割图 | HF Hub |
生成 | 法线图 | HF Hub |
注意:提供的语义分割图检查点仅在ADE20K数据集上训练;法线图检查点仅在DIODE数据集上训练。
推理:使用GLIGEN生成图像
我们提供了一个脚本来使用提供的检查点生成图像。首先下载模型并将它们放在gligen_checkpoints
中。然后运行
python gligen_inference.py
每个检查点的示例样本将保存在 generation_samples
中。可以查看 gligen_inference.py
了解更多关于接口的详细信息。
训练
基于约束条件的生成训练
首先需要为不同的约束模态条件准备数据。参考数据了解我们用于不同GLIGEN模型的数据。数据准备就绪后,使用以下命令来训练GLIGEN。(我们支持多GPU训练)
python main.py --name=你的实验名称 --yaml_file=你的yaml配置文件路径
--yaml_file
是最重要的参数,下面我们将通过一个例子来解释关键组件,以便您熟悉我们的代码并了解如何自定义训练自己的约束模态。其他参数的名称已经很明确。实验将保存在OUTPUT_ROOT/name
中。
可以参考configs/flicker_text.yaml
作为示例。可以看到该yaml文件定义了5个组件:diffusion、model、autoencoder、text_encoder、train_dataset_names和grounding_tokenizer_input。通常,diffusion、autoencoder和text_encoder不应更改,因为它们是由Stable Diffusion定义的。应该注意以下几点:
- 在model中,我们添加了新参数grounding_tokenizer,它定义了一个产生约束标记的网络。这个网络将在模型中实例化。可以参考
ldm/modules/diffusionmodules/grounding_net_example.py
了解更多关于定义这个网络的详细信息。 - grounding_tokenizer_input将定义一个网络,接收数据加载器的批次数据,并为grounding_tokenizer生成输入。换句话说,它是数据加载器和grounding_tokenizer之间的中间类。可以参考
grounding_input/__init__.py
了解有关定义这个类的详细信息。 - train_dataset_names应列出一系列数据集的名称(所有数据集将在内部连接,因此对于训练来说组合数据集很有用)。每个数据集名称应首先在
dataset/catalog.py
中注册。我们已列出了所有使用的数据集;如果需要在自己的模态数据集上训练GLIGEN,请不要忘记先在那里列出其名称。
基于约束条件的修复训练
GLIGEN还支持修复训练。可以使用以下命令:
python main.py --name=你的实验名称 --yaml_file=你的yaml配置文件路径 --inpaint_mode=True --ckpt=已适配模型的路径
通常,我们首先在生成任务(例如,基于文本约束的生成)上训练GLIGEN,这个模型的输入卷积有4个通道(Stable Diffusion的潜在空间),然后我们修改保存的检查点为9个通道,额外的5个通道初始化为0。这种继续训练可以导致更快的收敛和更好的结果。path_to_an_adapted_model指的是这个修改过的检查点,可以使用convert_ckpt.py
来修改检查点。**注意:**生成和修复训练的yaml文件是相同的,只需要更改--inpaint_mode
引用
@article{li2023gligen,
title={GLIGEN: Open-Set Grounded Text-to-Image Generation},
author={Li, Yuheng and Liu, Haotian and Wu, Qingyang and Mu, Fangzhou and Yang, Jianwei and Gao, Jianfeng and Li, Chunyuan and Lee, Yong Jae},
journal={CVPR},
year={2023}
}
免责声明
原始GLIGEN部分是在第一作者在威斯康星大学麦迪逊分校工作期间,在微软的兼职实习中实现的。这个仓库使用大学的GPU在PyTorch中重新实现了GLIGEN。尽管存在微小的实现差异,但本仓库旨在为研究目的重现论文中的结果和观察。
条款和条件
我们对使用模型检查点和演示有严格的条款和条件;它仅限于遵循Latent Diffusion Model和Stable Diffusion许可协议的用途。
更广泛的影响
重要的是要注意,我们的GLIGEN模型是为开放世界的基于约束条件的文本到图像生成而设计的,可以输入说明文本和各种条件(如边界框)。然而,我们也认识到负责任的AI考虑的重要性,以及需要明确传达我们研究的能力和局限性。虽然约束能力能很好地泛化到新的空间配置和概念,但我们的模型可能在超出范围或超出预期用例的情况下表现不佳。我们强烈反对在可能产生误导性或恶意图像的场景中滥用我们的模型。我们也承认用于训练我们模型的数据中可能存在潜在的偏见,需要持续评估和改进来解决这些问题。为确保透明度和问责制,我们包含了一个模型卡,描述了我们模型的预期用例、局限性和潜在偏见。我们鼓励用户参考这个模型卡,并在将我们的技术应用到新的环境中时谨慎行事。我们希望我们的工作能激发对AI伦理影响的进一步研究和讨论,以及在开发新技术时透明度和问责制的重要性。