Looped-DiT:2.6 亿参数模型击败 6.5 倍规模的模型

ComfyUI Wikinews

商汤 OpenSenseNova 发布 Looped-DiT,它在每个去噪步骤内反复运行共享 transformer 块,让一个小模型击败规模大得多的模型。

Looped-DiT 是 OpenSenseNova(商汤)团队对一种文生图扩散 transformer 的官方实现,它扩展的是计算深度而非参数量:一组共享的 transformer 块会在每个去噪步骤内运行多次。在他们的基准测试中,一个 2.6 亿参数的循环模型击败了一个规模大 6.5 倍的模型,同时推理算力消耗少了 4.9 倍。
在循环之间共享中间块,并采用自调制注意力与深度监督

方法:一个共享块组在每个去噪步骤中循环 N 次,由自调制注意力调节循环,并通过深度监督训练每次循环之后的状态。

为什么朴素的循环会失败

把相同的块运行两遍并不能可靠地改进扩散 transformer。论文将原因归结为两个问题:各次中间循环的监督信号太弱,以及随着循环次数增加,注意力更新会逐步侵蚀局部信息。Looped-DiT 添加了两个组件来解决它们:

  • 深度监督(Deep Supervision) 在每次循环后通过循环后的块解码状态,并将每个预测结果都与同一个干净图像目标进行训练。
  • 自调制注意力(Self-Modulating Attention) 调节循环内部的注意力更新,使用独占自注意力(XSA)或逐头注意力门控。

主干网络是来自 MiniT2I 的像素空间 MMDiT,以冻结的 FLAN-T5-Large 作为条件。仓库涵盖 B/32、B/16 和 L/16 的训练、任意循环深度的推理、六项基准的评估,以及每个训练集的数据准备脚本。

结果

分数使用 EMA 权重、100 步 Euler、引导系数 6.0、循环深度 4:

模型补丁GenEvalDPGPRISMCoReSpatialTIIF平均
Looped-DiT B/323285.185.354.444.552.376.166.3
Looped-DiT B/161687.487.067.053.554.679.771.5

真正关键的结论在论文摘要中:在参数量匹配和算力匹配的设置下,循环设计始终优于非循环基线;而在固定推理预算下,更深的循环比额外的去噪步数能带来更多收益。作者还报告称,更深的循环会逐步纠正更早循环中犯下的错误,他们将其描述为具有 Latent 推理迹象的行为。

运行它

两个模型均以 PyTorch 文件形式发布:sensenova/Looped-DiT-B16 和 sensenova/Looped-DiT-B32,推理只需一次模块调用。--loops 设置循环深度,传入多个深度会各生成一行结果,从而可以在单个提示词上比较不同深度:

hf download sensenova/Looped-DiT-B16 looped-dit-b16.pt --local-dir checkpoints

python -m looped_dit.sample --checkpoint checkpoints/looped-dit-b16.pt \
    --prompt "a red cube on top of a blue sphere" --loops 1 2 3 4 --out loops.png

论文的主要结果使用 Euler 100 步、引导 6.0、循环深度 4、512x512,基于 bfloat16 的 EMA 权重。深度 4 是训练深度,但作者指出其他深度无需重新训练也能工作,因此循环次数是推理时的一个可调参数,而不是模型文件的固定属性。

可用性

这是一个研究发布,而不是 ComfyUI 集成。目前没有 ComfyUI 节点、没有 Comfy-Org 重新打包,也没有 diffusers pipeline,所以要运行它就得使用仓库自带的 Python 环境:PyTorch 2.1 或更新版本的 CUDA 构建、requirements.txt,以及需要单独安装的评估栈(mmdet、vLLM、modelscope),因为基准数据和 Mask2Former 权重并未打包在内。考虑到发布日期以及它迄今获得的 51 个 GitHub star,社区移植并不令人意外,但截至本文撰写时还不存在。

评论

使用 GitHub 登录后即可参与讨论。

评论加载中…
Looped-DiT:2.6 亿参数模型击败 6.5 倍规模的模型 | ComfyUI Wiki