SDXL:改进高分辨率图像合成的隐扩散模型.

SDXL模型是对Stable Diffusion模型的官方改进,相比于SDv1.5模型的0.98B参数,SDXL模型的参数提高到6.6BSDXL模型的改进主要在以下几个方面:

SDXL模型是一个二阶段的级联扩散模型,包括Base模型和Refiner模型。其中Base模型是基本的文生图模型;在Base模型之后级联的Refiner模型是图生图模型,用于对Base模型生成的图像隐特征进行精细化。

Base模型由U-NetVAE和两个CLIP Text Encoder组成。Refiner模型采用独立的U-Net,而VAE和一个CLIP Text EncoderBase模型共用(Refiner模型的Text Encoder只使用了OpenCLIP ViT-bigG)。

SDXL模型输入的最大Token数是77,当输入文本的Token数量超过77后,将通过Clip操作拉回77;如果Token数不足77则会padding操作。

SDXL模型分别提取两个CLIP Text Encoder的倒数第二层特征,并进行连接操作作为文本条件。其中OpenCLIP ViT-bigG的特征维度为77x1280,而CLIP ViT-L的特征维度是77x768,所以输入总的特征维度是77x2048(77是最大的token数)。

⚪ 训练技巧:图像尺寸条件化

Stable Diffusion的训练过程主要分成两个阶段,一个是在256x256的图像尺寸上进行预训练,然后在512x512的图像尺寸上继续训练。这两个阶段的训练过程都要对最小图像尺寸进行约束。第一阶段会将尺寸小于256x256的图像舍弃;第二阶段会将尺寸小于512x512的图像舍弃。这样的约束会导致训练数据中的大量数据被丢弃。

下图展示了如果将尺寸小于256x256的图像筛除,整个数据集将减少39\%的数据。如果加上尺寸小于512x512的图像,未利用数据占整个数据集的百分比将更大。

SDXL模型为了在解决数据集利用率问题的同时不引入噪声伪影,将U-Net(Base)模型与原始图像分辨率相关联,核心思想是将输入图像的原始高度和宽度作为额外的条件嵌入U-Net模型中。图像高度和宽度都使用傅里叶特征编码进行独立嵌入,然后将特征连接到时序特征后。

结果表明,引入图像尺寸条件后,模型在训练过程中能够学习到图像的原始分辨率信息,从而在推理生成阶段更好地适应不同尺寸的图像生成,而不会产生噪声伪影的问题;在不断增大分辨率条件时,生成的图像质量不断提升。

⚪ 训练技巧:图像裁剪参数条件化

由于需要输入固定的图像尺寸用作训练,很多数据在预处理阶段会被裁剪。典型预处理方式是先调整图像尺寸,使得最短边与目标尺寸匹配,然后再沿较长边对图像进行随机裁剪或者中心裁剪。虽然裁剪是一种数据增强方法,但是训练中对图像裁剪导致的图像特征丢失,可能会导致模型在图像生成阶段出现不符合训练数据分布的特征。

SDXL模型引入了图像裁剪参数条件化策略。其主要思想是在加载数据时,将左上角的裁剪坐标通过傅里叶编码并嵌入U-Net(Base)模型中,并与原始图像尺寸一起作为额外的条件嵌入U-Net模型,从而在训练过程中让模型学习到对“图像裁剪”的认识。

⚪ 训练技巧:多尺度训练

SDXL模型首先在256x256和512x512的图像尺寸上分别预训练600000步和200000步(batch size = 2048),总的数据量 600000 x 2000000 x 2048 约等于16亿。

接着在1024x1024的图像尺寸上采用多尺度方案来进行微调,并将数据分成不同纵横比的bucket,并且尽可能保持每个bucket的像素数接近1024×1024,同时相邻的bucket之间高度或宽度一般相差64像素左右:

在训练过程中,一个Batch从一个bucket里的图像采样,并且在每个训练步骤中在不同的bucket大小之间交替切换。除此之外,aspect ratio也会作为条件嵌入到U-Net(Base)模型中,让模型能够更好地学习到“多尺度特征”。