InstanceDiffusion

InstanceDiffusion

实现精确实例级图像生成控制的突破性方法

InstanceDiffusion为文本到图像的扩散模型引入精确的实例级控制。该技术支持每个实例的自由语言条件,可灵活指定实例位置,包括单点、涂鸦、边界框和实例分割掩码。相比现有技术,InstanceDiffusion在框输入的AP50上提升2.0倍,掩码输入的IoU提高1.7倍,为图像生成和编辑领域带来新的可能性。

InstanceDiffusion图像生成实例级控制文本到图像条件生成Github开源项目

InstanceDiffusion:图像生成的实例级控制

我们推出了InstanceDiffusion,为文本到图像的扩散模型增加了精确的实例级控制。InstanceDiffusion支持每个实例的自由语言条件,并允许灵活的方式来指定实例位置,如简单的单点涂鸦边界框或复杂的实例分割掩码,以及它们的组合。 与之前的最先进技术相比,InstanceDiffusion在框输入上实现了2.0倍更高的AP50,在掩码输入上实现了1.7倍更高的IoU。

<p align="center"> <img src='https://yellow-cdn.veclightyear.com/835a84d5/0b845b66-95ff-47b1-97bb-7661fa56d6e6.jpg' align="center" > </p>

InstanceDiffusion: 图像生成的实例级控制
Xudong WangTrevor DarrellSaketh RambhatlaRohit GirdharIshan Misra
Meta GenAI;加州大学伯克利分校BAIR
CVPR 2024

[项目页面] [arxiv] [PDF] [引用]

免责声明

本代码库代表了第一作者在加州大学伯克利分校期间对InstanceDiffusion的重新实现。与原论文报告的结果可能存在轻微的性能差异。本代码库的目标是复现原论文的发现和见解,主要用于学术和研究目的。

更新

  • 2024年2月25日 - InstanceDiffusion已移植到ComfyUI。查看一些很酷的视频演示!(感谢Tucker Darby)
  • 2024年2月21日 - 支持快速注意力,内存使用可以减少一半以上。
  • 2024年2月19日 - 增加基于涂鸦/点的图像生成的PiM评估
  • 2024年2月10日 - 增加属性绑定的模型评估
  • 2024年2月9日 - 使用MSCOCO数据集增加模型评估
  • 2024年2月5日 - 初始提交。敬请期待

安装

要求

  • Linux或macOS,Python ≥ 3.8
  • PyTorch ≥ 2.0和匹配的torchvision。 请在pytorch.org一起安装它们以确保兼容性。
  • OpenCV ≥ 4.6,用于演示和可视化。

Conda环境设置

conda create --name instdiff python=3.8 -y conda activate instdiff pip install -r requirements.txt

训练数据生成

参见为InstanceDiffusion准备数据集

方法概述

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/4af2af72-bbfd-4e8e-9cc6-3b6efbfeb653.gif" width=70%> </p> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/a5997530-2e8f-4908-bbfe-b2917a1ffe87.png" width=100%> </p>

InstanceDiffusion通过提供额外的实例级控制来增强文本到图像模型。除了全局文本提示外,InstanceDiffusion还允许在生成图像时指定成对的实例级提示及其位置(如点、框、涂鸦或实例掩码)。 我们添加了我们提出的可学习的UniFusion模块来处理额外的每个实例的条件。UniFusion将实例条件与骨干网络融合,并调制其特征以实现实例条件下的图像生成。此外,我们提出了ScaleU模块,通过重新缩放UNet中产生的跳跃连接和骨干特征图来提高UNet尊重实例条件的能力。在推理时,我们提出了多实例采样器,可以减少多个实例之间的信息泄漏。

请查看我们的论文项目页面以获取更多详细信息。

InstanceDiffusion推理演示

如果你想在本地运行InstanceDiffusion演示,我们提供了inference.py。请从Hugging FaceGoogle Drive下载预训练的InstanceDiffusion模型和SD1.5,将它们放在pretrained文件夹下,然后运行:

python inference.py \
  --num_images 8 \
  --output OUTPUT/ \
  --input_json demos/demo_cat_dog_robin.json \
  --ckpt pretrained/instancediffusion_sd15.pth \
  --test_config configs/test_box.yaml \
  --guidance_scale 7.5 \
  --alpha 0.8 \
  --seed 0 \
  --mis 0.36 \
  --cascade_strength 0.4 \

JSON文件input_json指定了生成图像的文本提示和位置条件,demos目录下有几个演示JSON文件可用。 num_images参数表示要生成多少张图像。 mis设置调整了使用多实例采样器的时间步比例,建议低于0.4。较高的mis值可以减少实例之间的信息泄漏并提高图像质量,但可能会减慢生成过程。 调整alpha会修改使用实例级条件的时间步分数,较高的alpha确保更好地遵守位置条件,但可能以图像质量为代价,这是一个权衡。 如果cascade_strength大于0,则会激活SDXL细化器。注意:论文中的定量评估没有使用SDXL细化器,但我们最近发现它可以提高图像生成质量。

我们的实现支持Flash/Math/MemEfficient注意力,利用PyTorch的torch.backends.cuda.sdp_kernel。要禁用它,只需在配置.yaml文件中设置efficient_attention: False

边界框应遵循[xmin, ymin, width, height]格式。掩码应为RLE(游程编码)格式。涂鸦应指定为[x1, y1,..., x20, y20],可以有重复点,点用[x, y]表示。

让每个人都转头吧!

InstanceDiffusion支持从整个实例到部件和子部件的图像组合。部件/子部件的定位可以隐式改变物体的整体姿态。

https://github.com/frank-xwang/InstanceDiffusion/assets/58996472/1c4205a5-c3c4-4605-9fbd-c7023d4a4768

python inference.py \
  --num_images 8 \
  --output OUTPUT/ \
  --input_json demos/eagle_left.json \
  --ckpt pretrained/instancediffusion_sd15.pth \
  --test_config configs/test_box.yaml \
  --guidance_scale 7.5 \
  --alpha 0.8 \
  --seed 0 \
  --mis 0.2 \
  --cascade_strength 0.4 \

使用单点生成图像

InstanceDiffusion支持使用点(每个实例一个点)和相应的实例标题生成图像。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/8a636850-00b6-47da-a715-8b0168c46af2.png" width=95%> </p>
python inference.py \
  --num_images 8 \
  --output OUTPUT/ \
  --input_json demos/demo_corgi_kitchen.json \
  --ckpt pretrained/instancediffusion_sd15.pth \
  --test_config configs/test_point.yaml \
  --guidance_scale 7.5 \
  --alpha 0.8 \
  --seed 0 \
  --mis 0.2 \
  --cascade_strength 0.4 \

迭代图像生成

https://github.com/frank-xwang/InstanceDiffusion/assets/58996472/b161455a-6b21-4607-a59d-3a6dd19edab1

InstanceDiffusion还可以支持迭代图像生成,对预生成的实例和整体场景进行最小化更改。使用相同的初始噪声和图像标题,InstanceDiffusion可以通过修改边界框来选择性地引入新实例、用一个实例替换另一个、重新定位实例或调整实例的大小。

python inference.py \
  --num_images 8 \
  --output OUTPUT/ \
  --input_json demos/demo_iterative_r1.json \
  --ckpt pretrained/instancediffusion_sd15.pth \
  --test_config configs/test_box.yaml \
  --guidance_scale 7.5 \
  --alpha 0.8 \
  --seed 0 \
  --mis 0.2 \
  --cascade_strength 0.4 \

--input_json可以设置为demo_iterative_r{k+1}.json以生成后续轮次的图像。

MSCOCO上的模型定量评估(零样本)

我们的模型从未在MSCOCO的图像上训练过,我们在MSCOCO上进行零样本评估以展示InstanceDiffusion的泛化能力。

位置条件(点、涂鸦、框和实例掩码)

下载MSCOCO 2017数据集并将其存储在datasets文件夹中,确保数据组织如下:

coco/
  annotations/
    instances_val2017.json
  images/
    val2017/
      000000000139.jpg
      000000000285.jpg
      ...

请下载定制的instances_val2017.json,它将所有图像调整为512x512并相应调整掩码/框。组织好数据后,执行以下命令:

CUDA_VISIBLE_DEVICES=0 python eval_local.py \
    --job_index 0 \
    --num_jobs 1 \
    --use_captions \
    --save_dir "eval-cocoval17" \
    --ckpt_path pretrained/instancediffusion_sd15.pth \
    --test_config configs/test_mask.yaml \
    --test_dataset cocoval17 \
    --mis 0.36 \
    --alpha 1.0

pip install ultralytics
mv datasets/coco/images/val2017 datasets/coco/images/val2017-official
ln -s generation_samples/eval-cocoval17 datasets/coco/images/val2017
yolo val segment model=yolov8m-seg.pt data=coco.yaml device=0

我们将所有样本均匀分配到--num_jobs个分割中,每个作业(GPU)负责生成验证数据集的一部分。--job_index参数指定每个单独作业的作业索引。

属性绑定

test_attribute="colors" # colors, textures
CUDA_VISIBLE_DEVICES=0 python eval_local.py \
    --job_index 0 \
    --num_jobs 1 \
    --use_captions \
    --save_dir "eval-cocoval17-colors" \
    --ckpt_path pretrained/instancediffusion_sd15.pth \
    --test_config configs/test_mask.yaml \
    --test_dataset cocoval17 \
    --mis 0.36 \
    --alpha 1.0
    --add_random_${test_attribute}

# 评估实例级CLIP分数和属性绑定性能
python eval/eval_attribute_binding.py --folder eval-cocoval17-colors --test_random_colors

要评估InstanceDiffusion在纹理属性绑定方面的性能,将test_attribute设置为textures,并将--test_random_colors替换为--test_random_textures

基于涂鸦/点的图像生成的PiM评估

python eval_local.py \
    --job_index 0 \
    --num_jobs 1 \
    --use_captions \
    --save_dir "eval-cocoval17-point" \
    --ckpt_path pretrained/instancediffusion_sd15.pth \
    --test_config configs/test_point.yaml \
    --test_dataset cocoval17 \
    --mis 0.36 \
    --alpha 1.0

pip install ultralytics
mv datasets/coco/images/val2017 datasets/coco/images/val2017-official
ln -s generation_samples/eval-cocoval17-point datasets/coco/images/val2017
yolo val segment model=yolov8m-seg.pt data=coco.yaml device=0

# 请指明上一步生成的predictions.json文件的路径
python eval/eval_pim.py --pred_json /path/to/predictions.json

要评估基于涂鸦的图像生成的PiM,在执行python eval_local.py时将--test_config更改为configs/test_scribble.yaml。此外,运行python eval/eval_pim.py时需要包含--test_scribble。 我们将所有样本平均分配到--num_jobs个分割中,每个作业(GPU)负责生成验证数据集的一部分。--job_index参数指定每个单独作业的索引。

InstanceDiffusion模型训练

要使用submitit训练InstanceDiffusion,首先按照INSTALL中的说明设置conda环境。然后,按照此链接中的指南准备训练数据。接下来,将SD1.5下载到pretrained文件夹。最后,运行以下命令:

run_name="instancediffusion"
python run_with_submitit.py \
    --workers 8 \
    --ngpus 8 \
    --nodes 8 \
    --batch_size 8 \
    --base_learning_rate 0.00005 \
    --timeout 20000 \
    --warmup_steps 5000 \
    --partition learn \
    --name=${run_name} \
    --wandb_name ${run_name} \
    --yaml_file="configs/train_sd15.yaml" \
    --official_ckpt_name='pretrained/v1-5-pruned-emaonly.ckpt' \
    --train_file="train.txt" \
    --random_blip 0.5 \
    --count_dup true \
    --add_inst_cap_2_global false \
    --enable_ema true \
    --re_init_opt true \

更多选项,请参见python run_with_submitit.py -h

第三方实现

ComfyUI-InstanceDiffusion:Tucker Darby帮助将InstanceDiffusion移植到ComfyUI。以下是Tucker创建的几个视频演示(视频使用ComfyUI工作流制作,该工作流使用AnimateDiff和AnimateLCM作为一致性方法):

演示1演示2

视频演示

许可和致谢

InstanceDiffusion的大部分内容均遵循Apache许可,但项目的某些部分受单独的许可条款约束:CLIP、BLIP、Stable Diffusion和GLIGEN均遵循其各自的许可;如果您之后添加其他第三方代码,请保持此许可信息更新,如果该组件使用的许可不是Apache、CC-BY-NC、MIT或CC0,请告知我们。

道德考量

InstanceDiffusion广泛的图像生成能力可能会带来与许多其他文本到图像生成方法类似的挑战。

如何获得我们的支持?

如果您有任何一般性问题,请随时发送电子邮件至XuDong Wang。如果您有代码或实现相关的问题,请随时向我们发送电子邮件或在此代码库中提出问题(我们建议您在此代码库中提出问题,因为您的问题可能会帮助到其他人)。

引用

如果您发现我们的工作具有启发性或在研究中使用了我们的代码库,请考虑给予星标⭐并引用。

@misc{wang2024instancediffusion,
      title={InstanceDiffusion: Instance-level Control for Image Generation}, 
      author={Xudong Wang and Trevor Darrell and Sai Saketh Rambhatla and Rohit Girdhar and Ishan Misra},
      year={2024},
      eprint={2402.03290},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多