赞
踩
[PDF]SDXL:Improving Latent Diffusion Models for Hight-Resolution Image Synthesis
CODE
MODEL WEIGHTS
我们提出了SDXL,这是一个用于文本到图像合成的潜在扩散模型。与之前的 Stable Diffusion 版本相比,SDXL 利用了一个三倍大的 UNet 骨干:模型参数的增加主要是由于更多的注意力块和更大的交叉注意力上下文,因为 SDXL 使用了第二个文本编码器。我们设计了多种新颖的条件方案,并在多个宽高比上训练 SDXL。我们还引入了一个细化模型,用于通过后处理的图像到图像技术改善 SDXL 生成的样本的视觉保真度。我们证明,与之前的 Stable Diffusion 版本相比,SDXL 显示出了明显改进的性能,并且在结果上与黑盒最先进的图像生成器相媲美。为了促进开放研究并增进在大型模型训练和评估方面的透明度,我们提供了代码和模型权重的访问权限。
过去一年在深度生成建模领域取得了巨大的突破,涵盖了各种数据域,如自然语言[50]、音频[17]和视觉媒体[38, 37, 40, 44, 15, 3, 7]。在本报告中,我们关注后者,并揭示了 SDXL,这是 Stable Diffusion 的一个明显改进版本。Stable Diffusion 是一个潜在的文本到图像扩散模型(DM),它为诸如 3D 分类[43]、可控图像编辑[54]、图像个性化[10]、合成数据增强[48]、图形用户界面原型设计[51] 等最近进展的领域奠定了基础。值得注意的是,应用的范围非常广泛,涵盖了诸如音乐生成[9]和从 fMRI 脑扫描中重建图像[49]等多样领域。
用户研究表明,SDXL 在性能上始终明显优于所有先前版本的 Stable Diffusion(见图1)。在本报告中,我们介绍了导致性能提升的设计选择,包括 i) 与以前的 Stable Diffusion 模型相比,一个 3 倍大的 UNet 骨干(第2.1节),ii) 两种简单但有效的额外调节技术(第2.2节),它们不需要任何形式的额外监督,以及 iii) 一个单独的基于扩散的细化模型,它对由 SDXL 生成的潜在特征应用噪声去噪过程[28],以提高其样本的视觉质量(第2.5节)。
视觉媒体创作领域的一个主要关切是,虽然黑盒模型通常被认为是最先进的,但其架构的不透明性阻碍了对其性能的忠实评估和验证。这种缺乏透明度妨碍了可重现性,阻碍了创新,并阻止了社区在其基础上进行进一步科学和艺术进展。此外,这些封闭源代码的策略使得难以客观、公正地评估这些模型的偏见和局限性,这对于其负责任和道德的部署至关重要。通过 SDXL,我们发布了一个开放的模型,其性能与黑盒图像生成模型相媲美(见图10和图11)。
在本节中,我们介绍了对 Stable Diffusion 架构的改进。这些改进是模块化的,可以单独或一起用于扩展任何模型。尽管以下策略被实现为对潜在扩散模型(LDMs)[38]的扩展,但它们中的大多数也适用于它们的像素空间对应物。
图 1: 左图:比较用户对 SDXL 和 Stable Diffusion 1.5&2.1 的偏好。尽管 SDXL 已经明显优于 Stable Diffusion 1.5&2.1,但添加额外的细化阶段可以提升性能。右图:两阶段流程的可视化:我们使用 SDXL 生成大小为 128 × 128 的初始潜在图。随后,我们利用专门的高分辨率细化模型,并对在第一步生成的潜在图使用相同提示的 SDEdit [28] 进行处理。SDXL 和细化模型使用相同的自动编码器。
从 Ho 等人的开创性工作 [14] 和 Song 等人的工作 [47] 开始,它们展示了扩散模型(DMs)在图像合成中是强大的生成模型,卷积 UNet [39] 架构一直是基于扩散的图像合成的主导架构。然而,随着基础 DMs [40, 37, 38] 的发展,底层架构不断演变:从添加自注意力和改进的上采样层 [5],到用于文本到图像合成的交叉注意力 [38],再到纯变压器架构 [33]。
我们遵循这一趋势,并且,按照 Hoogeboom 等人 [16] 的方法,将变压器计算的主要部分转移到 UNet 的较低层特征中。特别是,与原始的 Stable Diffusion 架构相反,我们在 UNet 中使用了变压器块的异构分布:出于效率原因,我们在最高特征级别省略了变压器块,在较低级别使用了 2 个和 10 个块,并且在 UNet 中完全删除了最低级别(8× 降采样)- 请参见表1,比较 Stable Diffusion 1.x & 2.x 和 SDXL 的架构。我们选择了一个更强大的预训练文本编码器,用于文本调节。具体来说,我们使用 OpenCLIP ViT-bigG [19] 结合 CLIP ViT-L [34],其中我们沿通道轴连接了文本编码器的倒数第二个输出 [1]。除了使用交叉注意力层将模型调节到文本输入之外,我们还遵循 [30],并且还根据 OpenCLIP 模型的池化文本嵌入对模型进行调节。这些变化使 UNet 的模型规模达到了 2.6B 参数,请参见表1。文本编码器总共有 817M 参数。
将模型调节到图像大小 LDM 范式 [38] 的一个臭名昭著的缺点是由于其两阶段架构,训练模型需要最小图像大小。解决这个问题的两种主要方法要么丢弃所有分辨率低于某个最小值的训练图像(例如,Stable Diffusion 1.4/1.5 丢弃了所有大小低于 512 像素的图像),要么对太小的图像进行放大。然而,根据期望的图像分辨率,前一种方法可能导致丢弃大量训练数据,可能会导致性能下降并影响泛化。我们在图2中为 SDXL 预训练的数据集上可视化了这种效果。对于这个特定的数据选择,丢弃所有低于我们预训练分辨率 256x256 像素的样本将导致严重的 39% 数据丢失。另一方面,第二种方法通常会引入放大伪影,可能会泄漏到最终模型输出中,导致模糊样本等问题。
图2:我们的预训练数据集的高度-vs-宽度分布。在没有提出的大小调节的情况下,由于边缘长度小于 256 像素,将丢弃 39% 的数据,如虚线所示。每个可视化单元格中的颜色强度与样本数量成比例。
相反,我们建议将 UNet 模型调节到原始图像分辨率,该分辨率在训练期间可以轻松获得。特别是,我们将图像的原始(即在任何缩放之前的)高度和宽度作为模型的额外调节提供给模型,即 c s i z e = ( h o r i g i n a l , w o r i g i n a l ) c_{size} = (h_{original}, w_{original}) csize=(horiginal,woriginal)。每个组件都使用傅里叶特征编码进行独立嵌入,并且这些编码被连接成一个单一的向量,我们通过将其添加到时间步嵌入 [5] 中馈送到模型中。
在推理时,用户可以通过这种大小调节设置图像的期望外观分辨率。显然(见图3),模型已经学会将调节 c s i z e c_{size} csize 与分辨率相关的图像特征关联起来,这可以用来修改与给定提示相对应的输出的外观。请注意,在图3中显示的可视化效果中,我们显示了由 512x512 模型生成的样本(有关详细信息,请参见第2.5节),因为大小调节的效果在我们用于最终的 SDXL 模型的随后的多方面(比率)微调之后不太明显。
图3:改变大小调节的效果:我们从SDXL中绘制了4个具有相同随机种子的样本,并根据每列上面的说明改变大小调节。当在更大的图像尺寸上进行调节时,图像质量显然会提高。来自512x512模型的样本,详见第2.5节。注意:对于这个可视化,我们使用了512×512像素的基础模型(详见第2.5节),因为在1024×1024微调之前,大小调节的效果更为明显。最好放大查看。
我们通过在 512x512 空间大小的类别条件 ImageNet [4] 上训练和评估三个 LDMs 来定量评估这种简单但有效的调节技术:对于第一个模型(CIN-512-only),我们丢弃所有边缘至少小于 512 像素的训练示例,结果是一个只有 70k 图像的训练数据集。对于 CIN-nocond,我们使用所有训练示例,但不进行大小调节。仅对 CIN-size-cond 使用这种额外的调节。训练后,我们生成了 5k 个样本,每个模型使用 50 个 DDIM 步骤 [46] 和(无分类器的)引导尺度为 5 [13] 进行评估,并计算 IS [42] 和 FID [12](针对完整的验证集)。对于 CIN-size-cond,我们生成的样本始终在
c
s
i
z
e
=
(
512
,
512
)
c_{size} = (512, 512)
csize=(512,512) 条件下生成。表2总结了结果,并验证了 CIN-size-cond 在两个指标上都优于基线模型。我们将 CIN-512-only 的性能下降归因于对小训练数据集的过度拟合导致的泛化不良,而 CIN-nocond 的样本分布中模糊样本模式的影响导致了降低的 FID 分数。请注意,尽管我们发现这些传统的定量分数不适合评估基础(文本到图像)DMs [40, 37, 38] 的性能(请参见附录 F),但它们仍然是 ImageNet 上合理的指标,因为 FID 和 IS 的神经骨架本身已在 ImageNet 上进行了训练。
图4的前两行说明了以前SD模型的典型故障模式:合成的对象可能会被裁剪,例如左侧示例中SD 1-5和SD 2-1中猫的被截断的头部。对于这种行为的直观解释是模型在训练过程中使用了随机裁剪:由于在DL框架(如PyTorch [32])中整理一个批次需要相同大小的张量,一个典型的处理流程是(i)调整图像的大小,使最短尺寸与目标尺寸匹配,然后(ii)沿着较长的轴随机裁剪图像。虽然随机裁剪是一种自然的数据增强形式,但它可能泄漏到生成的样本中,导致上述恶意效果。
图4:将SDXL的输出与以前版本的稳定扩散进行比较。对于每个提示,我们显示相应模型的3个随机样本,使用DDIM采样器 [46] 进行50步和cfg-scale 8.0 [13]。附加的样本见图14。
为了解决这个问题,我们提出了另一种简单而有效的调节方法:在数据加载期间,我们均匀采样裁剪坐标
c
t
o
p
c_{top}
ctop和
c
l
e
f
t
c_{left}
cleft(整数,指定从左上角沿高度和宽度轴裁剪的像素数量),并将它们通过傅立叶特征嵌入作为调节参数馈送到模型中,类似于上面描述的大小调节。然后,拼接的嵌入
c
c
r
o
p
c_{crop}
ccrop被用作附加的调节参数。我们强调,这种技术不仅限于LDM,还可以用于任何DM。请注意,裁剪和大小调节可以轻松地结合在一起。在这种情况下,我们将特征嵌入沿通道维度拼接,然后将其添加到UNet中的时间步嵌入中。算法1说明了在应用这种组合时我们如何在训练过程中采样
c
c
r
o
p
c_{crop}
ccrop和
c
s
i
z
e
c_{size}
csize。鉴于我们的经验是大规模数据集平均以物体为中心,我们在推断期间设置
(
c
t
o
p
,
c
l
e
f
t
)
=
(
0
,
0
)
(c_{top}, c_{left}) = (0, 0)
(ctop,cleft)=(0,0),从而从训练模型中获取以物体为中心的样本。有关说明,请参见图5:通过调整
(
c
t
o
p
,
c
l
e
f
t
)
(c_{top},c_{left})
(ctop,cleft),我们可以成功地模拟推断期间的裁剪量。这是一种条件增强的形式,已经在自回归模型 [20] 中使用过,并且最近在扩散模型 [21] 中也有使用。虽然其他方法(如数据分桶 [31])成功地解决了相同的任务,但我们仍然受益于裁剪引起的数据增强,同时确保它不泄漏到生成过程中——我们实际上利用它来更好地控制图像合成过程。此外,它易于实现,并且可以在线在训练过程中应用,无需额外的数据预处理。
图5:改变剪裁调节,如第2.2节所述。查看SD 1.5和SD 2.1的样本,这两者都不能明确控制此参数,从而引入了剪裁伪影。来自
51
2
2
512^2
5122型号的样本,详见第2.5节。
真实世界的数据集包含尺寸和宽高比差异很大的图像(参见图2)。尽管文本到图像模型的常见输出分辨率是512 × 512或1024 × 1024像素的正方形图像,但我们认为这是一个相当不自然的选择,考虑到广泛分布和使用横幅(例如16:9)或纵向格式屏幕。
受此启发,我们微调我们的模型以同时处理多个宽高比:我们遵循通常的做法[31],将数据分为不同宽高比的桶,其中我们尽量保持像素计数接近 102 4 2 1024^2 10242,相应地以64的倍数变化高度和宽度。在附录I中提供了用于培训的所有宽高比的完整列表。在优化期间,训练批次由同一桶中的图像组成,并且我们在每个训练步骤之间交替使用不同的桶大小。此外,模型接收到桶大小(或目标大小)作为条件,表示为嵌入到傅里叶空间的整数元组 c a r = ( h t g t , w t g t ) c_{ar} =(h_{tgt},w_{tgt}) car=(htgt,wtgt),类似于上面描述的大小和剪裁条件。
在实践中,我们将多方面训练应用为在固定宽高比和分辨率下预训练模型之后的微调阶段,并通过沿通道轴进行连接结合引入的2.2节中的条件技术。附录J中的图16提供了此操作的Python代码。请注意,剪裁调节和多方面训练是互补的操作,而剪裁调节只在桶边界内(通常为64像素)起作用。然而,为了方便实现,我们选择保留此控制参数供多方面模型使用。
稳定扩散是一个在预训练、学习(并固定)的自动编码器的潜在空间中操作的LDM。虽然大部分语义组合由LDM完成,但我们可以通过改进自动编码器来提高生成图像中的局部高频细节。为此,我们使用与原始稳定扩散中使用的相同自动编码器架构,在更大的批处理大小(256比9)下进行训练,并使用指数移动平均值跟踪权重。得到的自动编码器在所有评估的重构度量中均优于原始模型,参见表3。我们在所有实验中使用这个自动编码器。
我们通过多阶段的过程训练最终模型SDXL。SDXL使用第2.4节中的自动编码器和离散时间扩散进度[14, 45](共1000步)。首先,我们在内部数据集上预训练基础模型(见表1),该数据集的高度和宽度分布在图2中可视化,分辨率为256×256像素,批处理大小为2048,使用第2.2节中描述的大小和裁剪调节。然后,我们在512×512像素图像上进行了另外200,000个优化步骤的训练,并最终利用多方面训练(第2.3节)与0.05的偏移噪声[11, 25]级别,以在不同纵横比(第2.3节,附录I)的∼1024×1024像素区域上训练模型。
细化阶段
根据经验,我们发现所得到的模型有时会产生低局部质量的样本,如图6所示。为了提高样本质量,我们在相同的潜在空间中训练一个单独的LDM,专门用于高质量、高分辨率的数据,并在基础模型的样本上使用SDEdit [28]引入的噪声-去噪过程。我们遵循[1],并将此细化模型专门用于前200个(离散的)噪声尺度。在推断过程中,我们从基础SDXL渲染潜在空间,并直接在潜在空间中使用细化模型进行扩散和去噪(见图1),使用相同的文本输入。我们注意到这一步骤是可选的,但对于详细的背景和人脸样本质量有所提高,如图6和图13所示。
图6:来自SDXL的
102
4
2
1024^2
10242样本(带有缩放效果),左侧为未使用(左)和使用(右)细化模型的情况。提示:“纽约市被海洋淹没,高楼大厦和丛林废墟在雨林中蔓延,日落时分的壮丽远景照片,电影般的镜头,高度详细,8k,金色光辉”。有关其他样本,请参见图13。
为了评估我们模型的性能(带有或不带有细化阶段),我们进行了用户研究,并让用户从以下四种模型中选择他们最喜欢的生成模型:SDXL、SDXL(带有细化器)、Stable Diffusion 1.5和Stable Diffusion 2.1。结果表明,带有细化阶段的SDXL是最受欢迎的选择,比Stable Diffusion 1.5和2.1显著优越(胜率:SDXL带有细化:48.44%,SDXL基础:36.93%,Stable Diffusion 1.5:7.91%,Stable Diffusion 2.1:6.71%)。见图1,该图还提供了整个流程的概览。然而,当使用传统的性能指标,如FID和CLIP分数时,SDXL相对于先前方法的改进并不明显,如图12所示,并在附录F中进行了讨论。这与Kirstain等人的研究结果一致,进一步支持了他们的发现。
本报告介绍了对基础模型 Stable Diffusion 进行改进的初步分析,用于文本到图像的合成。虽然我们在合成图像质量、提示遵循和构图方面取得了显著的改进,但在接下来的工作中,我们讨论了一些我们认为模型可以进一步改进的方面:
单阶段:目前,我们使用额外的精化模型采用两阶段方法生成来自 SDXL 的最佳样本。这导致需要加载两个大型模型到内存中,影响可访问性和采样速度。未来的工作应该探索提供相等或更好质量的单阶段方法。
文本合成:尽管规模和更大的文本编码器(OpenCLIP ViT-bigG [19])有助于改善与 Stable Diffusion 先前版本相比的文本呈现能力,但整合字节级标记器 [52, 27] 或简单地将模型扩展到更大尺寸 [53, 40] 可能进一步改善文本合成。
架构:在这项工作的探索阶段,我们简要尝试了基于 Transformer 的架构,如 UViT [16] 和 DiT [33],但没有立即看到好处。然而,我们对于仔细的超参数研究最终能够实现更大的以 Transformer 为主导的架构持乐观态度。
蒸馏:尽管我们在原始 Stable Diffusion 模型的基础上取得了显著的改进,但这是以增加推断成本(无论是在 VRAM 中还是采样速度上)为代价的。未来的工作将侧重于减少推断所需的计算量,以及增加采样速度,例如通过引导 [29]、知识 [6, 22, 24] 和渐进蒸馏 [41, 2, 29]。
我们的模型是在 [14] 的离散时间制定下进行训练的,并且需要偏移噪声 [11, 25] 才能得到审美上令人满意的结果。Karras 等人提出的 EDM 框架 [21] 是未来模型训练的一个有前途的选择,因为它在连续时间中的制定允许增加采样的灵活性,而不需要噪声时间表修正。
图 7:SDXL的失败案例,尽管与之前版本的Stable Diffusion相比有了很大的改进,但该模型有时仍然难以处理涉及详细的空间布局和详细描述的非常复杂提示(例如左上角的示例)。此外,有时手部生成不够准确(例如左上方),并且模型有时会出现两个概念相互渗透的情况(例如右下角的示例)。所有示例均为使用50个DDIM采样步骤[46]和cfg-scale 8.0 [13]生成的随机样本。
虽然我们的模型展示了在生成逼真图像和合成复杂场景方面的卓越能力,但认识到其固有的局限性是进一步改进并确保负责任使用这项技术的重要前提。
首先,当合成复杂结构时,例如人类手部(见图7,左上方),模型可能会遇到挑战。尽管它经过了多样化的数据训练,但人体解剖学的复杂性使得难以一致地获得准确的表示。这种局限性表明需要进一步扩展和专门针对合成细粒度细节的训练技术。导致这种情况发生的原因可能是在照片中,手部和类似的物体以非常高的变异性出现,模型难以提取真实3D形状和物理限制的知识。
其次,虽然模型在生成的图像中达到了令人瞩目的逼真水平,但重要的是要注意它并没有达到完美的照片逼真。某些微妙的细节,如微小的纹理变化,可能仍然缺失或表现不够忠实。这种局限性意味着在仅依赖模型生成的视觉内容进行需要高度视觉保真度的应用时应谨慎。
此外,模型的训练过程严重依赖大规模数据集,这可能会无意中引入社会和种族偏见。因此,在生成图像或推断视觉属性时,模型可能会无意中加剧这些偏见。
在某些情况下,当样本包含多个对象或主体时,模型可能会出现**“概念混合”现象**。这个问题表现为不同视觉元素的意外合并或重叠。例如,在图14中观察到橙色太阳镜,表明出现了从橙色毛衣中混合出来的情况。在图8中也可以看到这种情况,企鹅应该戴着“蓝色帽子”和“红色手套”,但生成的图像中却是蓝手套和红帽。识别和解决这种情况对于改进模型准确分离和表示复杂场景中的单个对象的能力至关重要。这可能的根本原因在于使用的预训练文本编码器:首先,它们被训练将所有信息压缩成一个令牌,因此可能在正确绑定属性和对象时失败,Feng等人[8]通过明确将词关系编码到编码中来缓解此问题。其次,对比损失也可能对此有所贡献,因为在同一批次中需要具有不同绑定的负例。
此外,虽然我们的模型在相比于SD的先前版本取得了显著进展,但在渲染长篇、易读的文本时仍然遇到困难。有时生成的文本可能包含随机字符或呈现不一致,如图8所示。克服这种局限性需要进一步研究和发展增强模型文本生成能力的技术,特别是对于扩展的文本内容,例如刘等人[27]的工作,他们提出通过字符级文本标记生成增强文本渲染能力的方法。另外,扩展模型规模确实会改善文本合成[53, 40]。
总之,我们的模型在图像合成方面表现出显著的优势,但并非没有一定的局限性。与合成复杂结构、实现完美的照片逼真、进一步解决偏见、减轻概念混合和改进文本渲染相关的挑战突显了未来研究和优化的方向。
在这一部分,我们对扩散模型(DMs)进行简洁的总结。我们考虑连续时间的扩散模型框架[47],并遵循Karras等人的表述[21]。设 p d a t a ( x 0 ) p_{data}(x_0) pdata(x0)表示数据分布, p ( x ; σ ) p(x; σ) p(x;σ)表示通过向数据添加独立同分布的 σ 2 σ^2 σ2方差的高斯噪声得到的分布。对于足够大的 σ m a x σ_{max} σmax, p ( x ; σ m a x 2 ) p(x; σ_{max}^2 ) p(x;σmax2)几乎无法与 σ m a x 2 σ^2_{max} σmax2方差的高斯噪声区分开。利用这一观察结果,扩散模型通过采样高方差的高斯噪声 x M ∼ N ( 0 , σ m a x 2 ) x_M ∼ N (0, σ_{max}^2 ) xM∼N(0,σmax2),然后将 x M x_M xM顺序去噪为 x i ∼ p ( x i ; σ i ) x_i ∼ p(x_i; σ_i) xi∼p(xi;σi),其中 i ∈ 0 , . . . , M i ∈ {0, . . . , M} i∈0,...,M,且 σ i < σ i + 1 , σ M = σ m a x σ_i < σ_i+1,σ_M = σ_{max} σi<σi+1,σM=σmax。对于训练良好的扩散模型和 σ 0 = 0 σ_0 = 0 σ0=0,得到的 x 0 x_0 x0按照数据分布分布。…
图 8: SDXL与DeepFloyd IF、DALLE-2、Bing Image Creator和Midjourney v5.2的定性比较。为了减轻由于精选而产生的任何偏见,选择了 Parti (P2) 的提示。Seed 3 在所有可以指定此参数的模型上均匀应用。对于没有种子设置功能的模型,包含了第一个生成的图像。
为了评估SDXL的生成质量,我们进行了与文本到图像生成平台Midjourney1的用户研究。我们使用了PartiPrompts(P2)基准[53]作为图像字幕的来源,该基准旨在比较各种具有挑战性的提示下的大型文本到图像模型。
对于我们的研究,我们从每个类别中随机选择了五个提示,并为每个提示使用Midjourney(v5.1,种子设置为2)和SDXL生成了四张1024 × 1024的图像。然后,这些图像被呈现给AWS GroundTruth任务组,根据对提示的遵循程度进行了投票。这些投票的结果如图9所示。总体而言,SDXL在遵循提示方面略优于Midjourney。
图9: SDXL v0.9与Midjourney v5.1之间的17,153次用户偏好比较的结果,这是当时可用的最新版本。比较涵盖了PartiPrompts(P2)基准中的所有“类别”和“挑战”。值得注意的是,SDXL在54.9%的时间里优于Midjourney V5.1。初步测试表明,最近发布的Midjourney V5.2在理解提示方面不如其前任,但生成多个提示的繁琐过程影响了进行更广泛测试的速度。
P2基准中的每个提示都被组织成一个类别和一个挑战,它们分别关注生成过程中的不同困难方面。我们在下面展示了P2每个类别(图10)和挑战(图11)的比较。在六个类别中,SDXL在四个类别中表现优于Midjourney,在十个挑战中,有七个挑战中两者之间没有显著差异,或者SDXL表现优于Midjourney。
在过去的几年里,生成性文本到图像模型通常会在自然图像的复杂小规模文本-图像数据集(如COCO [26])上进行零样本FID- [12]和CLIP-分数[34, 36]的评估。然而,随着基础文本到图像模型的出现[40, 37, 38, 1],这些模型不仅针对视觉组合性,还涉及其他困难任务,如深度文本理解、独特艺术风格之间的细粒度区分,尤其是显著的视觉美感,这种模型评估的特定形式变得越来越值得怀疑。Kirstain等人[23]证明了在COCO零样本FID中与视觉美感呈负相关,因此测量这些模型的生成性能最好由人类评估者进行。我们对SDXL进行了调查,并在图12中可视化了来自COCO [26]的10k文本-图像对的FID-vs-CLIP曲线。尽管SDXL在定量上得到了显著改善(由人类评估者问卷测量,参见图1)以及在定性上得到了改善(参见图4和图14),但它并没有取得比先前的SD版本更好的FID分数。相反,对于SDXL,FID是三个比较模型中最差的,而且只有略微改善的CLIP分数(使用OpenClip ViT g-14进行测量)。因此,我们的结果支持Kirstain等人[23]的发现,并进一步强调了需要为文本到图像基础模型提供额外的定量性能评分。所有分数都基于10k生成的样本进行评估。
from einops import rearrange import torch batch_size = 16 # 文本编码器输出的池化后的通道维度(s) pooled_dim = 512 def fourier_embedding(inputs, outdim=256, max_period=10000): """ 经典的正弦时间步嵌入,通常用于扩散模型 :param inputs: 整数标量的批次,形状为 [b,] :param outdim: 嵌入维度 :param max_period: 添加的最大频率 :return: 形状为 [b, outdim] 的嵌入批次 """ ... def cat_along_channel_dim(x: torch.Tensor) -> torch.Tensor: if x.ndim == 1: x = x[..., None] assert x.ndim == 2 b, d_in = x.shape x = rearrange(x, "b din -> (b din )") # Fourier函数添加额外的维度 emb = fourier_embedding(x) d_f = emb.shape[-1] emb = rearrange(emb, "(b din) df -> b (din df)", b=b, din=d_in, df=d_f) return emb def concat_embeddings( # 大小和裁剪条件的批次,参见Sec. 3.2 c_size: torch.Tensor, c_crop: torch.Tensor, # 比例条件的批次,参见Sec. 3.3 c_ar: torch.Tensor, # 文本编码器池化后的最终输出,参见Sec . 3.1 c_pooled_txt: torch.Tensor, ) -> torch.Tensor: # 用于大小条件的傅里叶特征 c_size_emb = cat_along_channel_dim(c_size) # 用于裁剪条件的傅里叶特征 c_crop_emb = cat_along_channel_dim(c_crop) # 用于纵横比条件的傅里叶特征 c_ar_emb = cat_along_channel_dim(c_ar) # 连接后的输出映射到与噪声水平条件相同的通道维度 # 并在馈送到unet之前添加到该条件中 return torch.cat([c_pooled_txt, c_size_emb, c_crop_emb, c_ar_emb], dim=1) # 模拟Sec. 3.2中的c_size和c_crop c_size = torch.zeros((batch_size, 2)).long() c_crop = torch.zeros((batch_size, 2)).long() # 模拟Sec. 3.3中的c_ar和池化文本编码器输出 c_ar = torch.zeros((batch_size, 2)).long() c_pooled = torch.zeros((batch_size, pooled_dim)).long() # 获取连接的嵌入 c_concat = concat_embeddings(c_size, c_crop, c_ar, c_pooled)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。