首页 > 其他分享 >在 SDXL 上用 T2I-Adapter 实现高效可控的文生图

在 SDXL 上用 T2I-Adapter 实现高效可控的文生图

时间:2023-09-29 23:00:12浏览次数:28  
标签:T2I SDXL 文生 Adapter image adapter 模型

T2I-Adapter 是一种高效的即插即用模型,其能对冻结的预训练大型文生图模型提供额外引导。T2I-Adapter 将 T2I 模型中的内部知识与外部控制信号结合起来。我们可以根据不同的情况训练各种适配器,实现丰富的控制和编辑效果。

同期的 ControlNet 也有类似的功能且已有广泛的应用。然而,其运行所需的 计算成本比较高。这是因为其反向扩散过程的每个去噪步都需要运行 ControlNet 和 UNet。另外,对 ControlNet 而言,复制 UNet 编码器作为控制模型的一部分对效果非常重要,这也导致了控制模型参数量的进一步增大。因此,ControlNet 的模型大小成了生成速度的瓶颈 (模型越大,生成得越慢)。

在这方面,T2I-Adapters 相较 ControlNets 而言颇有优势。T2I-Adapter 的尺寸较小,而且,与 ControlNet 不同,T2I-Adapter 可以在整个去噪过程中仅运行一次。

模型 参数量 所需存储空间(fp16)
ControlNet-SDXL 1251 M 2.5 GB
ControlLoRA (rank = 128) 197.78 M (参数量减少 84.19%) 396 MB (所需空间减少 84.53%)
T2I-Adapter-SDXL 79 M (参数量减少 93.69%) 158 MB (所需空间减少 94%)

在过去的几周里,Diffusers 团队和 T2I-Adapter 作者紧密合作,在 diffusers 库上为 Stable Diffusion XL (SDXL) 增加 T2I-Adapter 的支持。本文,我们将分享我们在从头开始训练基于 SDXL 的 T2I-Adapter 过程中的发现、漂亮的结果,以及各种条件 (草图、canny、线稿图、深度图以及 OpenPose 骨骼图) 下的 T2I-Adapter checkpoint!

结果合辑

与之前版本的 T2I-Adapter (SD-1.4/1.5) 相比,T2I-Adapter-SDXL 还是原来的配方,不一样之处在于,用一个 79M 的适配器去驱动 2.6B 的大模型 SDXL! T2I-Adapter-SDXL 在继承 SDXL 的高品质生成能力的同时,保留了强大的控制能力!

diffusers 训练 T2I-Adapter-SDXL

我们基于 diffusers 提供的 这个官方示例 构建了我们的训练脚本。

本文中提到的大多数 T2I-Adapter 模型都是在 LAION-Aesthetics V2 的 3M 高分辨率 图文对 上训练的,配置如下:

  • 训练步数: 20000-35000
  • batch size: 采用数据并行,单 GPU batch size 为 16,总 batch size 为 128
  • 学习率: 1e-5 的恒定学习率
  • 混合精度: fp16

我们鼓励社区使用我们的脚本来训练自己的强大的 T2I-Adapter,并对速度、内存和生成的图像质量进行折衷以获得竞争优势。

diffusers 中使用 T2I-Adapter-SDXL

这里以线稿图为控制条件来演示 T2I-Adapter-SDXL 的使用。首先,安装所需的依赖项:

pip install -U git+https://github.com/huggingface/diffusers.git
pip install -U controlnet_aux==0.0.7 # for conditioning models and detectors
pip install transformers accelerate

T2I-Adapter-SDXL 的生成过程主要包含以下两个步骤:

  1. 首先将条件图像转换为符合要求的 控制图像 格式。
  2. 然后将 控制图像提示 传给 StableDiffusionXLAdapterPipeline

我们看一个使用 Lineart Adapter 的简单示例。我们首先初始化 SDXL 的 T2I-Adapter 流水线以及线稿检测器。

import torch
from controlnet_aux.lineart import LineartDetector
from diffusers import (AutoencoderKL, EulerAncestralDiscreteScheduler,
                       StableDiffusionXLAdapterPipeline, T2IAdapter)
from diffusers.utils import load_image, make_image_grid

# load adapter
adapter = T2IAdapter.from_pretrained(
    "TencentARC/t2i-adapter-lineart-sdxl-1.0", torch_dtype=torch.float16, varient="fp16"
).to("cuda")

# load pipeline
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
euler_a = EulerAncestralDiscreteScheduler.from_pretrained(
    model_id, subfolder="scheduler"
)
vae = AutoencoderKL.from_pretrained(
    "madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    model_id,
    vae=vae,
    adapter=adapter,
    scheduler=euler_a,
    torch_dtype=torch.float16,
    variant="fp16",
).to("cuda")

# load lineart detector
line_detector = LineartDetector.from_pretrained("lllyasviel/Annotators").to("cuda")

然后,加载图像并生成其线稿图:

url = "https://huggingface.co/Adapter/t2iadapter/resolve/main/figs_SDXLV1.0/org_lin.jpg"
image = load_image(url)
image = line_detector(image, detect_resolution=384, image_resolution=1024)

龙的线稿图

然后生成:

prompt = "Ice dragon roar, 4k photo"
negative_prompt = "anime, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch, deformed, mutated, ugly, disfigured"
gen_images = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=image,
    num_inference_steps=30,
    adapter_conditioning_scale=0.8,
    guidance_scale=7.5,
).images[0]
gen_images.save("out_lin.png")

用线稿图生成出来的龙

理解下述两个重要的参数,可以帮助你调节控制程度。

  1. adapter_conditioning_scale

    该参数调节控制图像对输入的影响程度。越大代表控制越强,反之亦然。

  2. adapter_conditioning_factor

    该参数调节适配器需应用于生成过程总步数的前面多少步,取值范围在 0-1 之间 (默认值为 1)。 adapter_conditioning_factor=1 表示适配器需应用于所有步,而 adapter_conditioning_factor=0.5 则表示它仅应用于前 50% 步。

更多详情,请查看 官方文档

试玩演示应用

你可以在 这儿 或下述嵌入的游乐场中轻松试玩 T2I-Adapter-SDXL:

你还可以试试 Doodly,它用的是草图版模型,可以在文本监督的配合下,把你的涂鸦变成逼真的图像:

更多结果

下面,我们展示了使用不同控制图像作为条件获得的结果。除此以外,我们还分享了相应的预训练 checkpoint 的链接。如果想知道有关如何训练这些模型的更多详细信息及其示例用法,可以参考各自模型的模型卡。

使用线稿图引导图像生成

线稿图的更多结果
模型见 TencentARC/t2i-adapter-lineart-sdxl-1.0

使用草图引导图像生成

草图的结果
模型见 TencentARC/t2i-adapter-sketch-sdxl-1.0

使用 Canny 检测器检测出的边缘图引导图像生成

Canny 边缘图的结果
模型见 TencentARC/t2i-adapter-canny-sdxl-1.0

使用深度图引导图像生成

深度图的结果
模型分别见 TencentARC/t2i-adapter-depth-midas-sdxl-1.0TencentARC/t2i-adapter-depth-zoe-sdxl-1.0

使用 OpenPose 骨骼图引导图像生成

OpenPose 骨骼图的结果
模型见 TencentARC/t2i-adapter-openpose-sdxl-1.0


致谢: 非常感谢 William Berman 帮助我们训练模型并分享他的见解。


英文原文: https://hf.co/blog/t2i-sdxl-adapters

原文作者: Chong Mou,Suraj Patil,Sayak Paul,Xintao Wang,hysts

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。

审校/排版: zhongdongy (阿东)

标签:T2I,SDXL,文生,Adapter,image,adapter,模型
From: https://www.cnblogs.com/huggingface/p/17737483.html

相关文章

  • [论文速览] SDXL@ Improving Latent Diffusion Models for High-Resolution Image Syn
    Pretitle:SDXL:ImprovingLatentDiffusionModelsforHigh-ResolutionImageSynthesisaccepted:arXiv2023paper:https://arxiv.org/abs/2307.01952code:https://github.com/Stability-AI/generative-models关键词:imagesynthesis,stablediffusion,SDXL,AICG......
  • 使用Automatic1111在本地PC上运行SDXL 1.0
    这是我们部署StableDiffusion的第三篇文章了,前两篇文章都详细介绍了Automatic1111的stable-diffusion-webui的安装,这次主要介绍如何使用SDXL1.0模型。https://avoid.overfit.cn/post/3f640647d3eb4360ade44ee997091c87获取项目......
  • SDXL 1.0出图效果直逼Midjourney!手把手教你快速体验!
    介绍最近,StabilityAI正式推出了全新的SDXL1.0版本。经过我的实际测试,与之前的1.5版本相比,XL的效果有了巨大的提升,可以说是全方位的超越。不仅在理解提示词方面表现出色,而且图片的构图、颜色渲染和画面细腻程度都有了很大的进步,实际出图效果堪比Midjourney。此外,该版本还继续采......
  • 园子的商业化努力-阿里云开发者社区合作:AI入门必修,9分钟搭建文生图应用
    这是阿里云开发社区在园子里推广的一个活动,欢迎感兴趣的园友参与!活动链接:https://click.aliyun.com/m/1000377296/活动主题:领取NAS和PAI-EAS试用资源,分享你的AIGC创作心得活动时间:2023/7/17-2023/8/13活动玩法:Step1:免费领取文件存储NAS、模型在线服务PAI-EAS两款云产品免费......
  • SDXL 1.0 介绍和优缺点总结
    2023年7月26日:Stability.AI发布SDXL1.0,这是对其生成模型的又一次重大更新,带来了突破性的变化。SDXL1.0包括两种不同的模型:sdxml-base-1.0:生成1024x1024图像的基本文本到图像模型。基本模型使用OpenCLIP-ViT/G和CLIP-ViT/L进行文本编码。sdxml-refiner-1.0:一个图像......
  • Pika Labs:文生视频AI
    最近又一个文生视频AI火了。话不多说,直接上效果!若不说是AI生成的,或许很多朋友都会误以为是《小黄人》又出预告片了吧~而且这一次,文生视频不再是短短的几秒钟,是直接可以出广告片的那种了。例如一段有关Pizza的广告是这样的:画面充斥着警笛、救护等素,结果主人公却是个Pizza,这......
  • 重塑一个ID:"歪老哥",从新开始博文生涯
     我,路人甲,风靡FPGA行业多年,曾长时间霸榜多个博客论坛,获得过十佳博主称号;随后,由于工作、生活等其他原因,近8年没有在写过博客,几乎断档,销声匿迹。因此00后,甚至90后很少有认识我的;虽然我的书一直在高校做教材,新书也深受业内人士的亲睐;我开源的代码,文档,博客也一直在被扩散,奄奄一......
  • 道德与社会问题简报 #4: 文生图模型中的偏见
    简而言之:我们需要更好的方法来评估文生图模型中的偏见介绍文本到图像(TTI)生成现在非常流行,成千上万的TTI模型被上传到HuggingFaceHub。每种模态都可能受到不同来源的偏见影响,这就引出了一个问题:我们如何发现这些模型中的偏见?在当前的博客文章中,我们分享了我们对TT......
  • 探秘高逼格艺术二维码的制作过程-AI绘画文生图
    前几天看到几个逼格比较高的二维码,然后自己动手做了一下,给大家看看效果:1、文生图(狮子):2、文生图(城市): 下边将开始介绍怎么做的,有兴趣的可以继续读一读。这里使用的AI绘图工具是StableDiffusion,没有的同学需要去部署一个,计算平台国内建议使用AutoDL,国外可以白嫖Kaggle的......
  • 最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能
        本资源旨在跟踪中文生物医学自然语言处理的进展,收集整理相关的论文列表和展示现存方法性能。    内容整理自网络,源地址:https://github.com/lingluodlut/Chinese-BioNLP    中文电子病历命名实体识别    中文电子病历命名实体识别(ChineseClinicalNamedEntity......