SDXL:Improving latent diffusion models for high-resolution image synthesis
文生图模型之SDXL通过升级Stable Diffusion至2.3B参数版本(SDXL),在多个方面显著提升了生成效果和灵活性。其核心改进包括:采用更大尺寸的UNet架构(2.6B参数)、多尺度微调技术、额外条件注入以优化数据处理效率、引入细化模型以增强细节生成能力,并支持浮点32位推理以提高精度。此外,SDXL支持基于尺寸和裁剪坐标的条件嵌入,并提供单独的细化模型用于进一步提升图像质量。该模型已开源其代码与权重,并支持多种平台使用(如GitHub与网页UI)。未来研究方向包括单阶段模型优化、更高效的扩散架构设计及扩散过程中的质量控制技术等。
在之前的知乎文章中讨论了比较火的文生图模型Stable Diffusion。近期Stability AI发布了全新版本的SDXL。目前开源了包括代码、模型和相关技术报告在内的完整版本,并且该新版本在稳定性与生成效果上均有显著提升。

GitHub上有一个名为Stability-AI的项目专门专注于生成模型的研究与开发。

模型相关的代码与权重参数均已公开 accessible](https://github.com/Stability-AI/generative-models "GitHub - Stability-AI/generative-models: Generative Models by Stability AI")。对于sdXL这一款工具我也略知一二,在实际应用中发现效果不尽如人意时可能需要深入探究数据利用方式并对其潜在问题进行系统性优化。作者提到的这种分析思路非常值得借鉴,在sdXL 1.5版本中也可以顺利使用这一款工具;此外,在diffusers框架中已经有了更为完善的集成方案 available。
1.introduction
3大改进点:
1.sdxl的模型参数量大幅增加至2.3B,并整合了两个clip text encoder用于提取文本特征;
2.通过引入条件注入技术优化数据处理流程,并采用多尺度策略进行微调;
3.同时,在图像质量提升方面,sdxl级联了一个细化模型以并联工作的方式增强细节捕捉能力;值得注意的是,该细化模型也可单独应用以强化细节捕捉能力。
2.Improving stable diffusion

第一张图是人工评分的,sdxl遥遥领先。
2.1 architecture & scale
sdxl采用了更大版本的unet,2.6B相比较之前的版本,大了3倍。



结合附图1与附图2对模型架构进行详细对比分析:第一张图展示了SDXL版本的UNET结构图示(sdxl-unet),第二张则为传统SD版本(sd-unet)。观察SDXL架构发现,在第一个阶段(stage 1)未采用cross-attention机制,默认配置为普通的downblock2d模块结构。这一设计选择背后的原因在于:尽管引入自注意力机制能够显著提升生成质量(如4×放大倍率),但该模块的设计会导致显存占用及计算资源需求显著增加。值得注意的是,在模型架构设计上 SDXL采用了较简化的策略:仅包含3个stage(与之前的模型相比),而SD版本则拥有4个stage模块组成(如表1所示)。这种差异源于SDXL直接输出1024x1024分辨率图像的需求:其潜在空间维度被压缩至128x128x4的空间特征码表示形式。通过表1可以看出 SDXL网络在各阶段的通道数量呈现明显的递增趋势:第一阶段通道数为320 第二阶段升至640 最终达到1280的最大值这一稳定增长模式体现了其统一的设计理念。从参数规模的角度来看 SDXL较之于传统模型主要体现在多层transformer块的数量上:在各关键节点处引入了数量级更高的自注意力机制以满足更高的生成分辨率目标(如表1第3行数据所示)。具体而言 在stage 2与stage 3中分别采用了2层与10层transformer块 这一配置安排与其对应的通道放大倍率呈现出高度的一致性(如表中第2行数据所示)。这种参数规模的优化既保证了生成质量的同时又有效降低了整体计算负担
在功能上又进行了进一步优化,在功能上又进行了进一步优化
在功能上又进行了进一步优化,在功能上又进行了进一步优化
在功能上又进行了进一步优化
在功能上又进行了进一步优化

在进行了相关优化后,实验数据显示该生成器的UNet模块总参数规模达到了2.6亿个可训练权重。值得注意的是,在UNet的具体架构发生了变化的同时,在扩散模型的相关配置上仍保持着与原始版本的一致性,并采用了1000步进行离散化处理。具体而言,在扩散模型的部分我们采用了相同的噪声调度机制,并维持了相同的采样步数策略。
2.2 micro-conditioning
sdxl的第2个优化措施采用了条件注入机制来缓解训练过程中的数据处理相关挑战,并涵盖了提高数据利用率以及图像裁剪方面的相关问题。

第一个问题是关于SD(Stable Diffusion)模型在不同分辨率下的训练策略。通常在256x256像素的分辨率上进行预训练后,在更高分辨率(如512x512)下继续训练。然而,在使用较低分辨率(如256x256)时会面临一个问题:必须筛选出尺寸大于等于256像素的图像样本;而在更高分辨率(如512x512)下处理时,则只能使用至少等大的图像样本。由于这一过程需要进行数据筛选以满足模型需求,在实际操作中会导致可训练的数据样本数量减少(如图所示),具体比例约为39%。为了解决这一问题,默认的方法是先对原始数据集进行超分处理(但需要注意的是这种方法并非总是完美)。为了实现这一目标,在模型架构中引入了条件嵌入机制:将原始图片宽度和高度参数嵌入到UNet架构中去学习图像分辨率相关的特征表示。这样一来,在实际微调过程中无需对数据进行过滤操作即可直接对图片进行resize处理;但在推理阶段,则需要根据目标分辨率设定来控制生成图像的质量(与时间步长类似)。值得注意的是,在这一过程中宽度和高度参数被转换为傅里叶特征编码的形式,并将其与时间步长嵌入信息相结合加载到生成网络中。以图中的结果来看,在使用高分辨率(如512x512)模型时输入低分辨率图片会导致生成结果模糊不清;而当输入高分辨率图片时则能够显著提升生成图像的质量。

另一个关注点在于图像在训练阶段的处理问题。具体而言,在文生图模型的预训练过程中,通常情况下会采用固定的图像尺寸来进行数据准备工作。这一过程中,通常会对原始图像进行预处理步骤:首先将原始图片按照比例缩放至目标尺寸(通常是将最短边缩放到目标尺寸),随后沿着图片较长的一边进行裁剪操作(可以选择随机裁剪或中心裁剪)。然而这种操作可能会导致一些关键信息被遗漏。

sdxl在训练过程中将裁剪区域的左上顶点坐标作为条件整合进unet模型中,并借助傅里叶编码将其整合进时间嵌入模块中。在推理阶段只需将该坐标设置为(0,0),即可获得中心化的图像。很容易理解,在训练期间对未被裁剪区域的左上角坐标信息进行了处理,并使模型成功学习到了这些信息。这一操作导致提取的信息存在缺失。

在Sdxl训练过程中,可以选择同时注入两种不同的条件,在进行图像处理时需确保同时存储原始宽度和高度参数以及图像裁剪区域的起始坐标。随后系统将在指定区域展开处理并生成相应的输出。具体来说,在初始阶段系统会在256x256分辨率下进行处理并完成6×1e+5次迭代(批量大小为2k),随后提升分辨率至512x512继续运行约2×1e+5步。这种方法能够较为精确地估计出约16亿个样本数据量的基础上,在最终阶段系统会切换至更高分辨率(1k×1k)并采用多尺度微调策略以进一步优化模型性能。
2.3 multi-aspect traininng
在完成预训练任务后, sdxl采用了多尺度策略进行微调训练,基于novelAI平台设计了新的微调方案,根据图像的不同比例尺寸将其分类存放在各个桶中。在整个训练过程中,各个训练步骤可以在不同的桶之间灵活切换,每一批次的数据均来自同一个桶中的样本。此外,在unet模块中还引入了桶大小参数作为条件进行注入,与之前的微调策略保持一致。
2.4 improved autoencoder
sdxl和sd一样也是基于latent diffusion架构,对于latent diffusion架构,首先要采用一个autoencoder模型来将图像压缩为latent,然后扩散模型用来生成latent,生成的latent可以通过autoencoder的decoder来重建图像,注意不是在pixel空间做的,实在latent空间做的。sdxl的autoencoder采用的kl,并不是vq,基于同样的架构用了更大bs(256vs9)重新训练,下表中的vae模型结构都是相同的,但是sd-vae 2.x只是在sd-vae 1.x基础上微调了decoder部分,encoder部分是相同的,所以两者的latent分布是一致的,可以通用。但是sdxl是重新训练的,它的latent分布发生了变化,不能混用。将latent送入到扩散模型之前,要对latent进行缩放来使得latent的标准差尽量为1,由于权重发生了变化,所以sdxl的缩放系数和sd不同,sd是0.18215,sdxl是0.13025,此外sdxl-vae推理时用float16会溢出,用float32推理,在webui中选择--no-half-vae。

2.5 putting everything together
sdxl还有一个精化环节,在基础版本sdxl base model的基础上进行图像细节优化的是refiner model这一子模型,在base model所共用的vae架构下实现了更高效的图像生成效果。值得注意的是尽管refiner model与base model在架构上有显著差异但它们共享相同的unet核心组件其中refiner model仅在较低噪声水平(前200个timesteps)内进行精细训练以提升图像质量在推理过程中则完全依赖于refiner model的强大生成能力。从结构设计角度来看refiner model采用了四个独立stage其中第一个stage同样采用了无注意力机制的设计其特征维度设定为384对比base model的基础版本略高而refiner model中的attention模块均采用了四个transformer block以确保多尺度特征捕捉能力的完整性。尽管如此但与base model相比refiner model在参数规模上略显紧凑其总参数量为2.3B远低于base模型的基础配置参数总量

在文本编码器部分,Refiner model仅依赖于OpenCLIP中的ViT-bigG架构,并提取上一层的特征向量以及经过池化处理后的文本表示。如同Base model所采用的方案,在图像预处理方面同样地,在条件设定中加入了图像的艺术评分指标aesthetic-score。此外,在条件设定中加入了图像的艺术评分指标aesthetic-score作为辅助输入以提升生成质量。值得注意的是,默认情况下Refiner model并未采用多尺度微调策略

3.future work
手工生成的模型存在明显缺陷;
与真实场景存在较大差异;
在多实体共存的情况下,会导致属性混乱、扩散以及泄漏。
single stage:单阶段模型;
text synthesis:采用更好的text encoder,在imgen中也同样重要;
architecture:使用了一些纯transformer的架构,比如dit,没啥效果;
distillation:减少采样步数;
diffusion model:采用更好的扩散架构
