赞
踩
TL; DR:将 Diffusion 中常用的 UNet 模型替换为 Transformer 模型,并探究了为 Transformer 模型注入条件的结构设计和 scaling 的能力。实验显示,随着模型计算复杂度的上升,生成质量也稳步提升,Transformer 在 Diffusion 中的 scaling 能力得到了验证。而 adaLN 相较于 in-context、cross-attention 等结构更适合为 Transformer 模型注入条件。
Diffusion 仅要求其去噪网络是一个输入输出等尺寸的图到图模型,基于 CNN 的 UNet 是一个很自然的选择。但近些年来,凭借着更强的全局理解能力和 scaling 能力,Transformer 在视觉领域也大放异彩。本文中作者使用 ViT 替换掉 UNet,在 Diffusion 中也验证了 Transformer 的 scaling 能力。并试验了 in-context、cross-attention、adaLN 等不同的条件注入方式。
patchify
我们知道 Transformer 处理的是一维的序列,而在(图片) Diffusion 中,我们处理的是二维的图片或者特征图,这里需要将特征图展平为一维的序列。为了指示patch 之间的位置关系,DiT 使用了 sin-cos 的位置编码,这个位置编码是不可学习的。
DiT block design
在 patchify 之后,就可以把各个 patch token 送到 Transformer 中进行处理,此时就已经可以做无条件生成了。如果要做有条件生成,还需要将条件编码并输入到模型中。在常用的 Classfier-free Guidance 中,就是要将条件 embedding 和非条件 embedding 输入到模型中。在 LDM 中,是通过 cross-attention 的方式输入到 UNet 模型中的。那么在 Transformer 结构中,如何把条件注入到模型中呢?
DiT 探究了四种对 Transformer 的条件注入方法:
实验对比这四种结构的性能,adaLN-zero 最优。
Transformer Decoder
在隐层进行 Diffusion 去噪之后,需要输出的还是特征图,再送到 vae decoder 中解码出真实图片。但 Transformer 的输出是一维序列,所以这里还需要一个 Transformer Decoder 来将一维序列变换为与输入同尺寸的特征图。这里直接用了一个标准的线性解码器。
之所以要用 Transformer 替换掉 UNet,很重要的一个原因就是 Transformer 的 scaling 能力更强,给更多的参数和计算量,就能有更好的性能。
关于 scaling 能力最关键的实验如下图所示。可以看到,生成质量的提升能跟住 log 尺度的计算量增加,scaling 能力相当不错了。
DiT 的思路和做法都是比较直接的,就是用 Transformer 替换掉 UNet,并探索了其 scaling 能力和条件注入的结构。
在 Diffusion 成功之后,以 DiT 为代表的,有很多用 Transformer 替换 UNet 的工作,但都没有受到很大的关注。究其原因,应该是 UNet 已经做的足够好,计算开销也低,使用 Transformer scaling 上去,虽然生成质量有所提升,但也没那么显著。
然而,在最近 OpenAI 的 sora 炸裂登场之后,借助 Transformer 实现了任意长度任意尺寸的视频生成,最大长度更是达到了惊人的 60 秒,对比一众在四五秒挣扎的现有模型来说,真算得上是降维打击了。我们或许应该好好想想如何更好地利用起 Transformer 的特点了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。