DeepFloyd Lab 联合 StabilityAI 开源的大模型 DeepFloyd IF

2023-08-28 20:38:54 浏览数 (2)

磐创AI分享

简介

本文将介绍 DeepFloyd IF ,这是一个最先进的开源文本生成图像模型(Text-to-Image),具有高度的逼真度和语言理解能力。

DeepFloyd IF是一个由冻结文本编码器和三个级联像素 diffusion 模块组成的模块:一个基于文本提示生成 64x64 px图像的基本模型和两个超分辨率模型,每个模型都设计用于生成分辨率不断提高的图像:256x256 px 和1024x1024 px。

模型的所有阶段都使用基于 T5 transformer 的冻结文本编码器来提取文本嵌入,然后将其输入到通过交叉注意力和注意力池增强的UNet架构中。

结果是一个高效的模型,其性能优于当前最先进的模型,在COCO数据集上实现了6.66的零样本FID得分。我们的工作强调了更大的UNet架构在 diffusion 模型的第一阶段的潜力,并描绘了文本生成图像的前景。

受具有深度语言理解的逼真 Text2Image diffusion 模型的启发

使用所有IF model 的最低要求:

  • 用于 IF-I-XL (4.3B text to 64x64 base module) 和 IF-II-L (1.2B to 256x256 upscaler module) 的16GB vRAM
  • 用于 IF-I-XL (4.3B text to 64x64 base module) 、 IF-II-L (1.2B to 256x256 upscaler module) 和 Stable x4 (to 1024x1024 upscaler) 的 24GB vRAM
  • xformers 并设置环境变量 FORCE_MEM_EFFICITE_ATTN=1

快速开始

在 Colab Hugging Face Spaces 中打开

代码语言:javascript复制
pip install deepfloyd_if==1.0.2rc0
pip install xformers==0.0.16
pip install git https://github.com/openai/CLIP.git --no-deps
本地 notebooks
  • Jupyter Notebook Kaggle

Dream、Style Transfer、Super Resolution或Inpainting模式可在 Jupyter Notebook 中使用。

集成 Diffusers

IF 同时集成了 Hugging Face Diffusers 库

Diffusers 单独运行每个阶段,允许用户自定义图像生成过程,并允许轻松检查中间结果。

例子

在使用IF之前,你需要接受其使用条件。为此:

  • 确保有一个 Hugging Face 账户并登录
  • 接受 DeepFloyd/IF-I-XL-v1.0 模型卡上的许可
  • 请确保在本地登录

安装huggingface_hub:

代码语言:javascript复制
pip install huggingface_hub --upgrade

在 Python shell中运行 login 函数

代码语言:javascript复制
from huggingface_hub import login

login()

并输入你的 Hugging Face 中心访问令牌。

接下来我们安装 diffusers 和依赖项:

代码语言:javascript复制
pip install diffusers accelerate transformers safetensors

现在我们可以在本地运行模型了。

默认情况下, diffusers 使用模型 cpu 卸载来运行整个IF管道,只有14GB的VRAM。

如果你使用的是 torch>=2.0.0,请确保删除所有enable_xformers_memory_efficient_attention() 函数。

代码语言:javascript复制
from diffusers import DiffusionPipeline
from diffusers.utils import pt_to_pil
import torch
stage 1
代码语言:javascript复制
stage_1 = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16)
stage_1.enable_xformers_memory_efficient_attention()  # remove line if torch.__version__ >= 2.0.0
stage_1.enable_model_cpu_offload()
stage 2
代码语言:javascript复制
stage_2 = DiffusionPipeline.from_pretrained(
    "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
)
stage_2.enable_xformers_memory_efficient_attention()  # remove line if torch.__version__ >= 2.0.0
stage_2.enable_model_cpu_offload()
stage 3
代码语言:javascript复制
safety_modules = {"feature_extractor": stage_1.feature_extractor, "safety_checker": stage_1.safety_checker, "watermarker": stage_1.watermarker}
stage_3 = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-x4-upscaler", **safety_modules, torch_dtype=torch.float16)
stage_3.enable_xformers_memory_efficient_attention()  # remove line if torch.__version__ >= 2.0.0
stage_3.enable_model_cpu_offload()
prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'

文本嵌入

代码语言:javascript复制
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)

generator = torch.manual_seed(0)
stage 1
代码语言:javascript复制
image = stage_1(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator, output_type="pt").images
pt_to_pil(image)[0].save("./if_stage_I.png")
stage 2
代码语言:javascript复制
image = stage_2(
    image=image, prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator, output_type="pt"
).images
pt_to_pil(image)[0].save("./if_stage_II.png")
stage 3
代码语言:javascript复制
image = stage_3(prompt=prompt, image=image, generator=generator, noise_level=100).images
image[0].save("./if_stage_III.png")

有多种方法可以通过 diffusers 来加快推理时间并降低内存消耗。为此,请查看 diffusers 文档:

0 人点赞