SDXL Improving Latent Diffusion Models for High-Resolution Image Synthesis

SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis

TL; DR:更大更强的 SD 模型:base + refine 二阶段精调,更大的模型,训练时的微条件控制。


方法

SDXL 在技术上的改进主要有以下几个方面:使用更大的 UNet、两个 text encoder,引入分辨率、裁剪坐标和长宽比三种微条件,引入 refine 精调模型。

一、架构和规模

自从 DDPM 提出以来,每段时间新出的模型总会在架构和规模上有所更新,从最基础的 UNet 开始,加 Self attention、cross attention,或者直接用 Transformer。本次 SDXL 也不例外,在架构和规模上,有如下更新:

  1. 参考 Simple Diffusion 的做法,将 Transformer 的大部分计算量转移到 UNet 中的 low level 特征,不同于之前的 SD,SDXL 采用不同层不同的 Transformer Blocks 分布;
  2. 使用了两个文本编码器 OpenCLIP ViT-bigG 和 ViT-L,将它们的倒数第二层特征拼接起来,作为文本特征;
  3. 除了使用交叉注意力像 UNet 注入文本条件之外,参考 GLIDE 的做法,额外使用 OpenCLIP ViT-bigG 的池化文本嵌入用作文本条件

详细的变更如下表所示。综合上述改变,最终 UNet 参数量达到 2.6B,文本编码器总参数量达到 817M。

在这里插入图片描述

二、Micro Conditioning 微条件

微条件是 SDXL 作者为了解决低分辨率和图像裁剪导致的数据质量或数量的损失,将原图分辨率和图像裁剪坐标作为条件编码并输入到模型中,使得模型理解当前的训练样本是经过怎样的缩放或裁剪的预处理。在推理生图,指定较大的分辨率条件和无裁剪的微条件,即可生成高质量的新图片。

分辨率微条件

LDM/SD 作为一种两阶段的文生图模型,需要将像素空间的图片先映射到隐空间,这导致模型训练时有一个最低分辨率的要求。在之前 SD 的训练中,有两种方法处理这个问题。要么将分辨率较低的图像全部丢弃(如 SD 1.4/1.5 中将所有像素数小于 512 的图片丢弃),要么将低分辨率图像 resize 为高分辨率图像。然而这两种方法都有各自的弊端,前者无疑会损失大量的训练样本,损害模型的泛化性;后者 resize 则会引入大量上采样的人工合成痕迹,降低训练数据的质量,导致诸如图像模糊之类的生图问题。

为了更好地利用起训练数据中的低分辨率图像,SDXL 作者首先对训练图像的原图分辨率进行编码并作为一种微条件。具体来说,将模型缩放前的原尺寸 c size = ( h original , w original ) \mathbf{c}_\text{size}=(h_\text{original},w_\text{original}) csize=(horiginal,woriginal) 中的各值使用傅里叶特征进行独立编码,将他们拼接起来得到一个向量,加到时间步嵌入上,输入模型作为条件。

从下图可以看到,指定的 c size \mathbf{c}_{\text{size}} csize 较低,则生图结果非常模糊,而如果较高,生图结果清晰。

在这里插入图片描述

裁剪位置微条件

由于大多数深度学习框架张量并行计算的要求,同一个 batch 内的训练图像尺寸需要是相同的。常见的做法是首先确定一个目标尺寸,固定图像长宽比,将短边缩放到目标尺寸,然后再对长边进行随机裁剪,得到目标尺寸的图像。然而,这会导致模型的生图结果也会出现这种带裁剪的情况(如下图前两行所示)。

在这里插入图片描述

为了解决这个问题,作者提出将裁剪时的坐标 c crop = ( c top , c left ) \mathbf{c}_\text{crop}=(c_\text{top},c_\text{left}) ccrop=(ctop,cleft) 也作为一种微条件进行编码。做法与图像分辨率微条件完全一致。

如下图所示,在推理生图时,我们指定裁剪坐标微条件为 ( 0 , 0 ) (0,0) (0,0) 即可生成主体不被裁剪的图片,如果想要有裁剪结果作为数据增强,也可以指定向 ( 0 , 256 ) (0,256) (0,256) 这样的裁剪坐标微条件。

在这里插入图片描述

长宽比微条件

生图模型的现实应用中,生成不同长宽比的图像是一个很常见的需求。然而现有的生图模型通常是固定生成方形图片(如 512x512,1024x1024 等)。作者采用了 bucket sampling 将相近长宽比的图像采样到同一个 batch 内,不同 batch 中长宽比不同而总像素数保持在 1024x1024 附近。

同时,图像的长宽比信息也作为一种微条件 c ar = ( h tgt , w tgt ) \mathbf{c}_\text{ar}=(h_\text{tgt},w_\text{tgt}) car=(htgt,wtgt) 输入给模型,具体实现方式与上面介绍的两种微条件一致。

三、训练细节及refine模型

SDXL 采用多阶段的训练方式。使用 1000 步的离散 noise schedule,首先在 256x256 的内部数据集上进行预训练,共 600k 步,batch size 2048。第二阶段使用 512x512 的图像数据进行训练,200k 步。最后第三阶段使用多长宽比数据进行微调,保持总像素数在 1024x1024 左右,并采用 offset noise 为 0.05。

上述过程训练的模型称为 SDXL base 模型。在训练完之后,作者发现 base 模型在生图细节上还不够好,因此引入了一个 refine 模型来精修图像细节。具体来说,refine 模型是在相同的的 vae latent space 训练的一个独立的 LDM 模型。在高质量、高分辨率图像的 base 模型的结果上进行训练,采用 SDEdit 中提出的加噪-去噪过程,采用 eDiff-I 提出的 200 步的离散步的 nosie scale。在推理时,refine 模型对 base 模型输出的 latent 进行进一步精修。

在这里插入图片描述

总结

SDXL 三个主要的改进:1)更大的模型,这不必多说,已经是如今深度学习的趋势。2)微条件,这是一种比较巧妙的提升数据质量和数量的方式,更高效利用数据。3)引入 refine 精修模型,没具体评测过,不够貌似没什么人用呢。

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值