模型:
thu-ml/unidiffuser-v1
UniDiffuser是一个统一的扩散框架,可同时适应与一组多模态数据相关的所有分布,并将其转换为一种变换器。UniDiffuser能够通过设置适当的时间步长来执行图像、文本、文本到图像、图像到文本和图像文本对的生成,而无需额外的开销。
具体而言,UniDiffuser采用一种称为 U-ViT 的变换器变体,该变体对联合噪声预测网络进行参数化。其他组件用作不同模态的编码器和解码器,包括从 Stable Diffusion 预训练的图像自编码器,从 image ViT-B/32 CLIP encoder 预训练的 text ViT-L CLIP encoder ,以及由我们自己微调的 GPT-2 文本解码器。
我们提供了两个UniDiffuser版本:
我们在 this link 中提供了UniDiffuser-v0的文件,并在 this link 中提供了UniDiffuser-v1的文件,包括:
请注意,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)
注意:本节的大部分内容来自 Stable Diffusion model card ,但同样适用于UniDiffuser。
模型应遵循agpl-3.0许可证使用。可能的用途包括:
以下是不包括在使用范围内的用途。
不应使用该模型有意创建或传播会给人们带来敌意或让人感到疏远环境的图像。这包括生成人们可以预见到的令人不安、令人痛苦或冒犯的图像,或者传播历史或当前的刻板印象。
超出范围使用
该模型并非用于作为人们或事件的事实或真实表达,因此使用该模型生成此类内容超出了该模型的能力范围。
误用和恶意使用
将该模型用于生成对个人残忍的内容是该模型的误用。这包括但不限于: