模型:
shi-labs/versatile-diffusion
我们构建了Versatile Diffusion(VD),作为通往通用生成人工智能的一步,VD是第一个统一的多流多模态扩散框架。Versatile Diffusion可以原生地支持图像到文本、图像变化、文本到图像和文本变化,并且可以进一步扩展到其他应用,如语义-风格解缠、图像-文本双引导生成、潜在图像-文本-图像编辑等。未来版本将支持更多模态,如语音、音乐、视频和3D。
Versatile Diffusion的一个单一流程包含一个VAE,一个扩散器和一个上下文编码器,因此可以在一个数据类型(例如图像)和一个上下文类型(例如文本)下处理一个任务(例如文本到图像)。Versatile Diffusion的多流程结构显示在以下图表中:
@article{xu2022versatile, title = {Versatile Diffusion: Text, Images and Variations All in One Diffusion Model}, author = {Xingqian Xu, Zhangyang Wang, Eric Zhang, Kai Wang, Humphrey Shi}, year = 2022, url = {https://arxiv.org/abs/2211.08332}, eprint = {2211.08332}, archiveprefix = {arXiv}, primaryclass = {cs.CV} }
您可以使用模型与 ?Diffusers library 和 SHI-Labs Versatile Diffusion codebase 。
扩散器可以让您同时使用统一和更省内存的、任务特定的流水线。
请确保安装transformers从"main"以使用此模型:
pip install git+https://github.com/huggingface/transformers
要在所有任务中使用Versatile Diffusion,建议使用 VersatileDiffusionPipeline
#! pip install git+https://github.com/huggingface/transformers diffusers torch from diffusers import VersatileDiffusionPipeline import torch import requests from io import BytesIO from PIL import Image pipe = VersatileDiffusionPipeline.from_pretrained("shi-labs/versatile-diffusion", torch_dtype=torch.float16) pipe = pipe.to("cuda") # prompt prompt = "a red car" # initial image url = "https://huggingface.co/datasets/diffusers/images/resolve/main/benz.jpg" response = requests.get(url) image = Image.open(BytesIO(response.content)).convert("RGB") # text to image image = pipe.text_to_image(prompt).images[0] # image variation image = pipe.image_variation(image).images[0] # image variation image = pipe.dual_guided(prompt, image).images[0]
特定任务的流水线只会加载需要的权重到GPU。您可以在 here 中找到所有任务特定的流水线。
您可以按照以下方式使用它们:
from diffusers import VersatileDiffusionTextToImagePipeline import torch pipe = VersatileDiffusionTextToImagePipeline.from_pretrained("shi-labs/versatile-diffusion", torch_dtype=torch.float16) pipe.remove_unused_weights() pipe = pipe.to("cuda") generator = torch.Generator(device="cuda").manual_seed(0) image = pipe("an astronaut riding on a horse on mars", generator=generator).images[0] image.save("./astronaut.png")图像变化
from diffusers import VersatileDiffusionImageVariationPipeline import torch import requests from io import BytesIO from PIL import Image # download an initial image url = "https://huggingface.co/datasets/diffusers/images/resolve/main/benz.jpg" response = requests.get(url) image = Image.open(BytesIO(response.content)).convert("RGB") pipe = VersatileDiffusionImageVariationPipeline.from_pretrained("shi-labs/versatile-diffusion", torch_dtype=torch.float16) pipe = pipe.to("cuda") generator = torch.Generator(device="cuda").manual_seed(0) image = pipe(image, generator=generator).images[0] image.save("./car_variation.png")双引导生成
from diffusers import VersatileDiffusionDualGuidedPipeline import torch import requests from io import BytesIO from PIL import Image # download an initial image url = "https://huggingface.co/datasets/diffusers/images/resolve/main/benz.jpg" response = requests.get(url) image = Image.open(BytesIO(response.content)).convert("RGB") text = "a red car in the sun" pipe = VersatileDiffusionDualGuidedPipeline.from_pretrained("shi-labs/versatile-diffusion", torch_dtype=torch.float16) pipe.remove_unused_weights() pipe = pipe.to("cuda") generator = torch.Generator(device="cuda").manual_seed(0) text_to_image_strength = 0.75 image = pipe(prompt=text, image=image, text_to_image_strength=text_to_image_strength, generator=generator).images[0] image.save("./red_car.png")
请按照 here 中的说明操作。
我们希望提醒用户注意此演示可能存在的问题和关注点。与之前的大型基础模型类似,Versatile Diffusion在某些情况下可能存在问题,部分原因是由于不完善的训练数据和词向量编码器/上下文编码器等预训练网络的局限性。在其未来的研究阶段,VD可能在文本到图像、图像到文本等任务上表现更好,通过更强大的VAE、更复杂的网络设计和更干净的数据进行改进。到目前为止,我们保持了所有功能可用于研究测试,以展示VD框架的巨大潜力,并收集重要反馈以改进模型。我们欢迎研究人员和用户通过HuggingFace社区讨论功能或通过电子邮件向作者报告问题。
请注意,VD可能输出强化或加剧社会偏见的内容,以及逼真的面孔、色情和暴力。VD是在LAION-2B数据集上训练的,该数据集抓取了未经筛选的在线图像和文本,可能包含意外的例外,因为我们删除了非法内容。此演示中的VD仅用于研究目的。