CoMPaSS:提升文本到图像模型空间理解的框架

嗨,如果你对文本到图像生成感兴趣,你可能已经注意到这些模型能够从简单的描述中创建出令人惊叹的、逼真的图片。但你有没有想过,为什么它们有时会搞错像“猫在狗的左边”这样的简单事情?事实证明,正确处理空间关系——比如左、右、上或下——比看起来要复杂得多。这就是CoMPaSS的用武之地。它是一个框架,旨在帮助现有的扩散模型更准确地处理这些空间细节。在这篇文章中,我将一步步向你解释CoMPaSS是什么、它如何工作,以及你如何自己尝试它。我们会逐步分解,这样即使你不是深度学习专家,也能理解。

让我们从基础开始。CoMPaSS到底是什么?它是一个系统,针对文本到图像扩散模型中的两个主要问题:关于空间关系的数据不清晰,以及文本编码器无法总是正确捕捉单词的顺序和含义。通过修复这些,CoMPaSS帮助模型生成更忠实于提示中描述的空间配置的图像。

为什么文本到图像模型在空间关系上挣扎?

想象一下你正在描述一个场景:“一张棕色皮沙发放在高书架的左边,一盏复古台灯放在一本精装书旁边,一只挂钟悬挂在陶瓷花瓶上方,而一只困倦的猫躺在编织篮子里。”像FLUX.1这样的模型可能把物体生成正确,但位置却乱了套。为什么会这样?

从像LAION、CC12M和COCO这样的数据集中,我们可以看到空间描述往往是模糊的。例如:

  • 像“左”或“右”这样的词取决于视角——是从观察者的角度还是物体自身的方向?
  • 有时空间术语甚至不是关于空间的,比如“正确的选择”。
  • 参考对象可能缺失,比如“向右看”却没说右边是什么。

除此之外,文本编码器(将单词转化为模型可用数据的部分)往往无法保留提示中的令牌顺序。这意味着模型可能无法很好地区分“A在B的左边”和“B在A的左边”。

CoMPaSS通过两个关键部分来解决这个问题:一个叫SCOP的数据引擎,用于创建更好的训练数据;以及一个叫TENOR的模块,用于帮助模型更好地理解文本顺序。结果呢?图像真正反映了你描述的空间配置,如项目中的预览图所示:

在实验中,将CoMPaSS添加到像FLUX.1-dev、SD1.4、SD1.5和SD2.1这样的模型上,在像VISOR这样的基准上提升了98%,T2I-CompBench Spatial提升了67%,GenEval Position提升了131%。这是一大进步,而且没有损害模型的整体图像质量。

SCOP数据引擎是什么以及它如何工作?

你可能会问,“如何修复模糊的数据?”SCOP,即空间约束导向配对,是一个数据引擎,它从图像中提取清晰的空间关系,并将它们与准确的文本描述配对。它就像一个过滤器,确保只有明确的配对进入训练数据。

以下是SCOP处理图像的三个阶段:

  1. 关系推理:从图像开始,使用边界框和类别(比如来自COCO)识别所有物体。然后,列出每对可能的物体。对于一张包含人、摩托车、汽车、卡车和椅子的图像,你可能得到15对。

  2. 空间约束执行:不是所有配对都有用。SCOP应用五条规则,只保留清晰的:

    • 视觉显著性:配对必须占据图像足够的空间(联合面积除以图像面积 > 阈值τ_v)。这确保关系是图像的主要特征。
    • 语义区分:物体必须属于不同类别(例如,没有两个摩托车)。
    • 空间清晰度:物体不能相隔太远(中心距离相对于较小物体的对角线 < τ_u)。
    • 最小重叠:它们不应重叠太多(交集除以最小面积 < τ_o),但允许一些重叠,比如“在上方”。
    • 尺寸平衡:尺寸应相当(最小面积除以最大面积 > τ_s),这样两者对关系贡献相似。

    这些约束会缩小配对——例如,从15对缩小到5对明确的。

  3. 关系解码:对于有效的配对,创建像“(cup, box) (couch, box)”这样的描述符。然后,将这些转化为图像裁剪和来自模板的文本提示,比如“一个杯子在沙发上方”或“沙发下方的一个杯子的图像”。

当应用于COCO训练分割时,SCOP创建一个包含来自15,426张图像的28,028个物体对的数据集。它相对于像LAION-400M(0.004%)和CC12M(0.13%)这样的网络规模数据集很小,但专注且高质量。一项人类研究显示,这些配对与人类注释的同意率为85.2%,表明它们可靠。

如果你在想,“我能复制这个数据集吗?”是的——说明在SCOP目录的README中。它使用COCO数据集,所以你需要那个作为基础。

探索TENOR模块:保留令牌顺序

现在,即使有很好的数据,模型也需要正确理解文本。这就是TENOR,即令牌编码顺序的作用。它是一个即插即用的模块,不添加额外参数,几乎不增加计算时间。

为什么需要它?像CLIP或T5这样的文本编码器往往丢失单词的顺序。在使用COCO物体和像左/右/上/下这样的关系的6,320个提示的测试中,编码器超过95%的时间无法匹配等价改写(例如,“A在B的左边” vs. “B在A的右边”)。它们反而选择了交换或否定的版本。

TENOR通过将令牌顺序信息注入模型的注意力机制来修复这个问题。它强化提示的结构,帮助模型区分空间设置。它兼容UNet-based模型(像SD1.5)和MMDiT-based模型(像FLUX.1)。

对于训练和推理,查看TENOR目录。有针对FLUX.1-dev和SD1.4/1.5/2.1的具体说明。

如何设置并自己尝试CoMPaSS

准备好了吗?让我们谈谈入门。项目使用uv管理的Python环境,还有一个脚本让它变得简单。

逐步环境设置

  1. 运行设置脚本:从项目根目录执行:

    bash ./setup_env.sh
    

    这会将要求安装到.venv/子目录中。

  2. 激活环境:完成后,使用以下激活:

    source .venv/bin/activate
    

就这样——你准备好了。请注意,对于完整训练,你需要SCOP和TENOR。对于仅生成图像,TENOR和参考权重就够了。

下载参考权重

项目在Hugging Face上提供权重,用于快速测试。这些是论文中指标使用的。以下是选项表:

模型 链接
FLUX.1-dev https://huggingface.co/blurgy/CoMPaSS-FLUX.1
SD1.4 https://huggingface.co/blurgy/CoMPaSS-SD1.4
SD1.5 https://huggingface.co/blurgy/CoMPaSS-SD1.5
SD2.1 https://huggingface.co/blurgy/CoMPaSS-SD2.1

从FLUX.1-dev开始——它是一个只有50MB的Rank-16 LoRA。

使用SCOP数据集

要自己构建SCOP数据集:

  • 转到SCOP目录。
  • 按照README复制来自COCO的28,028对。
  • 它涉及使用前面描述的引擎处理图像。

使用TENOR进行训练和推理

对于FLUX.1-dev:

  • 查看TENOR/flux/README.md获取细节。

对于SD模型:

  • 查看TENOR/sd/README.md。

这些指南涵盖在SCOP数据上训练和从文本提示生成图像。

CoMPaSS如何融入文本到图像研究的更大图景?

文本到图像扩散模型已经走过了漫长的道路,从早期的像GLIDE和DALLE-2,到最近的像PixArt、SD3和FLUX.1。它们使用大型数据集和像CLIP或T5这样的编码器来连接文本和图像。

但空间控制是一个热门领域。有些方法为特定任务添加训练,或使用像边界框这样的推理技巧。CoMPaSS脱颖而出,因为它专注于数据质量(通过SCOP)和文本处理(通过TENOR),而没有沉重的开销。

它受数据集和编码器问题启发,并在不同架构上工作,而不损害一般能力。

FAQ:关于CoMPaSS的常见问题

在这里,我将回答你可能有的问题,基于人们经常问的类似项目问题。

CoMPaSS是什么,以及它如何改进文本到图像模型?
CoMPaSS是一个框架,提升扩散模型的空间理解。它使用SCOP创建清晰的空间数据和TENOR保留文本顺序,导致提示和生成图像之间更好的对齐。

SCOP如何处理模糊的空间描述?
SCOP使用像视觉显著性、语义区分、空间清晰度、最小重叠和尺寸平衡这样的约束过滤配对。这确保只使用清晰的关系。

SCOP中的空间约束是什么?

  • 视觉显著性:联合面积 / 图像面积 > τ_v
  • 语义区分:不同类别
  • 空间清晰度:距离 / 特征长度 < τ_u
  • 最小重叠:交集 / 最小面积 < τ_o
  • 尺寸平衡:最小面积 / 最大面积 > τ_s

为什么TENOR对空间关系重要?
文本编码器往往忽略令牌顺序,所以“A在B的左边”可能看起来像“B在A的左边”。TENOR向注意力添加顺序信息,帮助模型正确处理。

我能将CoMPaSS用于自己的扩散模型吗?
是的,它兼容UNet(SD1.4/1.5/2.1)和MMDiT(FLUX.1)架构。按照TENOR说明集成。

SCOP数据集有多大,以及它来自哪里?
它是来自15,426张COCO图像的28,028对。你可以使用SCOP README复制它。

哪些基准显示CoMPaSS的改进?
它在VISOR (+98%)、T2I-CompBench Spatial (+67%) 和 GenEval Position (+131%) 上表现出色。

训练需要特殊硬件吗?
README没有指定,但由于基于现有模型,扩散训练的标准GPU设置应该有效。从推理开始测试。

如果我在工作中使用CoMPaSS,如何引用?
使用这个BibTeX:

@inproceedings{zhang2025compass,
  title={CoMPaSS: Enhancing Spatial Understanding in Text-to-Image Diffusion Models},
  author={Zhang, Gaoyang and Fu, Bingtao and Fan, Qingnan and Zhang, Qi and Liu, Runxing and Gu, Hong and Zhang, Huaqi and Liu, Xinguo},
  booktitle={ICCV},
  year={2025}
}

CoMPaSS只用于空间关系,还是有助于其他事情?
它专注于空间,但它维持或改进图像保真度,而不损害一般生成。

如何指南:使用CoMPaSS生成图像

如果你急于生成自己的图像,这里是一个基于项目设置的简单指南。

步骤1:设置环境

如前所述:

  • 运行 bash ./setup_env.sh
  • 使用 source .venv/bin/activate 激活

步骤2:下载权重

从上面的表中选择一个模型,比如FLUX.1-dev。从Hugging Face下载并放入你的项目。

步骤3:准备TENOR

  • 对于FLUX:按照TENOR/flux/README.md加载模块。
  • 输入像“摩托车在熊的右边”这样的提示。
  • 运行推理——模型现在应该更好地处理空间部分。

步骤4:如果训练,使用SCOP

  • 按照SCOP/README.md构建数据集。
  • 按照模型特定指南在它上训练TENOR。

这个过程让你亲眼看到差异。例如,没有CoMPaSS,位置可能翻转;有了它,它们会坚持提示。

深入探讨:TENOR背后的分析

你可能会想,“他们如何发现文本编码器是问题?”他们运行了一个代理任务:取一个基本提示如“A在B的左边”,创建变体(改写、否定、交换),并查看编码器是否通过相似度选择正确的匹配。

结果表:

文本编码器 正确 (%) 最相似:改写 否定关系 交换
CLIP ViT-L 0.02% 1 5088 1231
OpenCLIP ViT-H 0% 0 6054 266
OpenCLIP ViT-bigG 0.03% 2 6067 251
T5-XXL 4.84% 306 4777 1237

即使大编码器大多数时间失败。TENOR介入保留那个顺序。

扩散模型中的相关概念

如果你熟悉扩散模型,CoMPaSS建立在使用预训练编码器和为任务微调的想法上。它避免沉重添加,不像一些需要额外监督或优化的空间控制方法。

例如,基于训练的方法适应权重但可能成本高。仅推理的方法使用框但需要手动输入。CoMPaSS通过 curation 数据和轻微调整注意力来平衡。

总结:为什么CoMPaSS对你的项目重要

在使用文本到图像模型时,我发现空间准确性是一个真正的痛点——特别是对于像设计或讲故事这样的应用,其中位置很重要。CoMPaSS让它更容易,而不复杂化事情。它高效、以数据为中心,并且易于集成。

如果你尝试它,从FLUX.1-dev和小提示开始。看看它如何处理“鸟在滑板下方”与基础模型相比。项目页面 (https://compass.blurgy.xyz) 和 arXiv (https://arxiv.org/abs/2412.13195) 有更多视觉和细节。

作者包括Gaoyang Zhang (https://github.com/blurgyy)、Qingnan Fan (https://fqnchina.github.io)、Qi Zhang (https://qzhang-cv.github.io),以及来自浙江大学、vivo和蚂蚁集团的其他人。

这个框架不是关于华丽的新模型;它是关于深思熟虑地修复核心问题。试试看,并告诉我它如何——空间生成刚刚变得聪明多了。