英文

UniDiffuser是一个统一的扩散框架,可同时适应与一组多模态数据相关的所有分布,并将其转换为一种变换器。UniDiffuser能够通过设置适当的时间步长来执行图像、文本、文本到图像、图像到文本和图像文本对的生成,而无需额外的开销。

具体而言,UniDiffuser采用一种称为 U-ViT 的变换器变体,该变体对联合噪声预测网络进行参数化。其他组件用作不同模态的编码器和解码器,包括从 Stable Diffusion 预训练的图像自编码器,从 image ViT-B/32 CLIP encoder 预训练的 text ViT-L CLIP encoder ,以及由我们自己微调的 GPT-2 文本解码器。

我们提供了两个UniDiffuser版本:

  • UniDiffuser-v0 :该版本在 LAION-5B 上进行了训练,其中包含了噪声网络数据的文本-图像对。
  • UniDiffuser-v1 :该版本是从UniDiffuser-v0恢复的,经过了一组噪声较小的内部文本-图像对的进一步训练。在训练过程中,它使用一个标记来区分网络数据和内部数据。

下载

我们在 this link 中提供了UniDiffuser-v0的文件,并在 this link 中提供了UniDiffuser-v1的文件,包括:

  • autoencoder_kl.pth:从 Stable Diffusion 转换而来的图像自编码器权重。
  • caption_decoder.pth:微调的GPT-2文本解码器的权重。
  • uvit_v0.pth/uvit_v1.pth:UniDiffuser-v0/UniDiffuser-v1的U-ViT权重。

请注意,UniDiffuser-v0和UniDiffuser-v1共享相同的autoencoder_kl.pth和caption_decoder.pth。您只需要下载它们一次。至于其他组件,它们将自动下载。

UniDiffuser-v1的扩散管道可以按以下方式下载:

from diffusers import UniDiffuserPipeline

pipe = UniDiffuserPipeline.from_pretrained("thu-ml/unidiffuser-v1")

使用方法

使用 UniDiffuser codebase 的模型。

以下是使用UniDiffuser-v1与扩散器的示例:

import requests
import torch
from PIL import Image
from io import BytesIO

from diffusers import UniDiffuserPipeline

device = "cuda"
model_id_or_path = "thu-ml/unidiffuser-v1"
pipe = UniDiffuserPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
pipe.to(device)

# Joint image-text generation. The generation task is automatically inferred.
sample = pipe(num_inference_steps=20, guidance_scale=8.0)
image = sample.images[0]
text = sample.text[0]
image.save("unidiffuser_sample_joint_image.png")
print(text)

# The mode can be set manually. The following is equivalent to the above:
pipe.set_joint_mode()
sample2 = pipe(num_inference_steps=20, guidance_scale=8.0)

# Note that if you set the mode manually the pipeline will no longer attempt
# to automatically infer the mode. You can re-enable this with reset_mode().
pipe.reset_mode()

# Text-to-image generation.
prompt = "an elephant under the sea"

sample = pipe(prompt=prompt, num_inference_steps=20, guidance_scale=8.0)
t2i_image = sample.images[0]
t2i_image.save("unidiffuser_sample_text2img_image.png")

# Image-to-text generation.
image_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/unidiffuser/unidiffuser_example_image.jpg"
response = requests.get(image_url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image = init_image.resize((512, 512))

sample = pipe(image=init_image, num_inference_steps=20, guidance_scale=8.0)
i2t_text = sample.text[0]
print(i2t_text)

# Image variation can be performed with a image-to-text generation followed by a text-to-image generation:
sample = pipe(prompt=i2t_text, num_inference_steps=20, guidance_scale=8.0)
final_image = sample.images[0]
final_image.save("unidiffuser_image_variation_sample.png")

# Text variation can be performed with a text-to-image generation followed by a image-to-text generation:
sample = pipe(image=t2i_image, num_inference_steps=20, guidance_scale=8.0)
final_prompt = sample.text[0]
print(final_prompt)

模型详细信息

  • 模型类型:基于扩散的多模态生成模型
  • 语言:英文
  • 许可证:agpl-3.0
  • 模型描述:这是一个可以执行图像、文本、文本到图像、图像到文本和图像文本对生成的模型。其主要组件是一个参数化联合噪声预测网络的 U-ViT 。其他组件用作不同模态的编码器和解码器,包括从 Stable Diffusion 预训练的图像自编码器,从 image ViT-B/32 CLIP encoder 预训练的 text ViT-L CLIP encoder ,以及由我们自己微调的 GPT-2 文本解码器。
  • 了解更多信息的资源: GitHub Repository Paper

直接使用

注意:本节的大部分内容来自 Stable Diffusion model card ,但同样适用于UniDiffuser。

模型应遵循agpl-3.0许可证使用。可能的用途包括:

  • 安全部署可能生成有害内容的模型。
  • 探索和理解生成模型的限制和偏见。
  • 生成艺术作品并在设计和其他艺术过程中使用。
  • 在教育或创意工具中应用。
  • 对生成模型进行研究。

以下是不包括在使用范围内的用途。

误用、恶意使用和超出范围使用

不应使用该模型有意创建或传播会给人们带来敌意或让人感到疏远环境的图像。这包括生成人们可以预见到的令人不安、令人痛苦或冒犯的图像,或者传播历史或当前的刻板印象。

超出范围使用

该模型并非用于作为人们或事件的事实或真实表达,因此使用该模型生成此类内容超出了该模型的能力范围。

误用和恶意使用

将该模型用于生成对个人残忍的内容是该模型的误用。这包括但不限于:

  • 生成贬低、剥夺人性或以其他方式有害的人或其环境、文化、宗教等的表达。
  • 故意推广或传播歧视性内容或有害刻板印象。
  • 未经个人同意而冒充个人。
  • 未经观看者同意的性内容。
  • 误导信息和假新闻。
  • 尖锐的暴力和血腥描绘。
  • 违反受版权或许可协议使用的受版权或许可材料的共享。
  • 分享违反版权或许可协议的修改版权或许可材料。