Skip to content

T2I-Adapter

T2I-Adapter 是一个轻量级适配器,用于控制和为文本到图像模型提供更准确的结构指导。它通过学习文本到图像模型的内部知识与外部控制信号(如边缘检测或深度估计)之间的对齐来工作。

T2I-Adapter 的设计非常简单,条件信息传递给四个特征提取块和三个下采样块。这使得为不同的条件快速且容易地训练不同的适配器,并将这些适配器插入到文本到图像模型中。T2I-Adapter 与 ControlNet 类似,但更小(约 77M 参数)且更快,因为它在扩散过程中只运行一次。缺点是性能可能略逊于 ControlNet。

本指南将向你展示如何使用 T2I-Adapter 与不同的 Stable Diffusion 模型,以及如何组合多个 T2I-Adapter 以施加多个条件。

TIP

有多个 T2I-Adapter 可用于不同的条件,如调色板、深度、草图、姿态和分割。请查看 TencentARC 仓库以试用它们!

在开始之前,请确保你已安装以下库。

py
# uncomment to install the necessary libraries in Colab
#!pip install -q diffusers accelerate controlnet-aux==0.0.7

文本到图像

文本到图像模型依赖于提示来生成图像,但有时仅靠文本可能不足以提供更准确的结构指导。T2I-Adapter 允许你提供一个额外的控制图像来引导生成过程。例如,你可以提供一个 Canny 图像(黑色背景上的白色轮廓)来引导模型生成具有相似结构的图像。

MultiAdapter

T2I-Adapters 也是可组合的,允许你使用多个适配器对图像施加多个控制条件。例如,你可以使用姿态图来提供结构控制,使用深度图来提供深度控制。这通过 [MultiAdapter] 类实现。

让我们使用姿态和深度适配器来条件化一个文本到图像模型。创建并放置你的深度图和姿态图到一个列表中。

py
from diffusers.utils import load_image

pose_image = load_image(
    "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/keypose_sample_input.png"
)
depth_image = load_image(
    "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/depth_sample_input.png"
)
cond = [pose_image, depth_image]
prompt = ["Santa Claus walking into an office room with a beautiful city view"]
depth image
pose image

在 [MultiAdapter] 类中将相应的姿态和深度适配器作为列表加载。

py
import torch
from diffusers import StableDiffusionAdapterPipeline, MultiAdapter, T2IAdapter

adapters = MultiAdapter(
    [
        T2IAdapter.from_pretrained("TencentARC/t2iadapter_keypose_sd14v1"),
        T2IAdapter.from_pretrained("TencentARC/t2iadapter_depth_sd14v1"),
    ]
)
adapters = adapters.to(torch.float16)

最后,加载一个带有适配器的 [StableDiffusionAdapterPipeline],并将你的提示和条件图像传递给它。使用 [adapter_conditioning_scale] 来调整每个适配器在图像上的权重。

py
pipeline = StableDiffusionAdapterPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16,
    adapter=adapters,
).to("cuda")

image = pipeline(prompt, cond, adapter_conditioning_scale=[0.7, 0.7]).images[0]
image