OcclusionFormer: Arranging Z-Order for Layout-Grounded Image Generation¶
会议: ICML2026
arXiv: 2605.21343
代码: https://henghuiding.com/OcclusionFormer/ (项目页)
领域: 图像生成 / 布局到图像 / 扩散模型
关键词: 布局到图像, Z-order 遮挡, 体渲染, 实例解耦, DiT
一句话总结¶
针对布局到图像生成在重叠区域出现纹理纠缠和层级混乱的问题,作者构建了带显式 Z-order 与 amodal 标注的大规模数据集 SA-Z,并提出 OcclusionFormer:通过实例解耦 + 体渲染显式建模遮挡优先级,再用查询对齐损失强化空间一致性,在 OverLayBench 复杂子集与自建 SA-Z Eval 上的遮挡感知指标全面超过 Eligen、Creatilayout、InstanceAssemble 等强基线。
研究背景与动机¶
领域现状:布局到图像(layout-to-image)生成通过给扩散模型注入 2D/3D 边界框作为空间条件,在 GLIGEN、Eligen、Creatilayout 等工作推动下已经在单实例的空间可控性上做得不错,是复杂场景合成、视觉故事生成等任务的基础设施。
现有痛点:一旦多个 bounding box 出现重叠,主流方法就开始"翻车"——交叠区里的物体会出现纹理纠缠、层级颠倒、甚至被强制缩进只覆盖可见部分。原因是这些方法把布局当作 2D 平面条件,对"谁挡谁"完全没有概念。用户其实是按 amodal(完整范围)画框的,并默认有一个深度顺序,但模型读不出来。
核心矛盾:图形学里早就有 Z-buffer 来解决遮挡,但扩散模型的注意力机制天生在 2D 平面上"无差别混合"特征,没有显式的 Z 轴维度。LaRender 用 training-free 的体渲染做了一次尝试,但它把 cross-attention 空间挪用来做遮挡控制,既丢了 global prompt,也对超参敏感、在复杂场景下容易跑偏。
本文目标:(1) 提供一个开放词表、带 Z-order 与 amodal 标注、规模够大的训练集;(2) 设计一个能在 DiT 框架里显式建模 Z-order 的训练式方案,既不破坏预训练能力,又能在重叠区给出物理一致的层级。
切入角度:作者认为 training-free 启发式不够,必须靠"数据驱动 + 显式监督"。具体做法是把每个实例先"解耦"到独立层,再用体渲染按用户指定的遮挡顺序把它们"合成"回来,最后用 mask 监督拉住空间几何。
核心 idea:把图像生成看成沿正交相机射线的体渲染过程——每个实例在自己框内独立做 MM-Attention 得到 "层",再用学到的密度 \(\sigma_i\) 计算透射率 \(T_i\) 与不透明度 \(\alpha_i\),按 Z-order 加权合成;同时引入查询对齐损失把每个实例的特征几何"焊"到 GT mask 上。
方法详解¶
OcclusionFormer 建立在 Flux.1-dev(DiT + Rectified Flow)之上,只在原 MM-Attention 块后插入一个串行的"实例解耦—体渲染合成—查询对齐"模块,并通过 LoRA(rank=4)微调,保留预训练骨干能力。
整体框架¶
输入是一组实例条件 \((M_i, B_i, \mathcal{O}_i, C_i, P)\)(mask、bounding box、遮挡集合、实例 caption、全局 prompt)。每个 DiT block 先跑一次冻结的全局 MM-Attention 得到视觉特征 \(\mathbf{Z}\in\mathbb{R}^{L\times D}\),然后:(1) 按每个实例 \(i\) 的 box 抽出局部 token 子集 \(\mathbf{Z}_{\Omega_i}\),与该实例的 caption embedding \(\mathbf{C}_i'\) 单独做 MM-Attention,得到"独立层" \(\hat{\mathbf{Z}}_i\);(2) 用体渲染按 \(\mathcal{O}_i\) 指定的 Z-order 把所有 \(\hat{\mathbf{Z}}_i\) 合成成 \(\mathbf{Z}_{out}\),残差加回主干;(3) 用 query 向量从每个 \(\hat{\mathbf{Z}}_i\) 中读出空间相似度图,经轻量 CNN 预测前景概率,用 SA-Z 的 GT mask 做交叉熵监督。训练目标为 \(\mathcal{L}_{total} = \mathcal{L}_{flow} + \lambda \mathcal{L}_{align}\),\(\lambda=0.5\)。
关键设计¶
-
实例解耦的局部 MM-Attention:
- 功能:把"全局 2D 平面注意力"切成每实例独立的"层",让 Z 轴有可解耦的对象。
- 核心思路:对每个实例 \(i\),先用 \(\Omega_i = \{u \mid \text{Coord}(u) \in B_i\}\) 选出其 bounding box 内的 token 索引,只在这个子集 \(\mathbf{Z}_{\Omega_i}\) 和该实例的 caption embedding \(\mathbf{C}_i'\) 之间复用原 MM-Attention 模块计算更新:\(\hat{\mathbf{Z}}_{\Omega_i}, \hat{\mathbf{C}_i} = \text{MM-Attention}(\mathbf{Z}_{\Omega_i}, \mathbf{C}_i')\),框外补零。原 attention 参数冻结,只在投影矩阵上加 LoRA 微调。
- 设计动机:Eligen/Creatilayout 把布局当成全局条件,所有实例和背景 token 在一个大注意力里"无差别"交互,根本没有"层"的概念,无法表达 Z 轴优先级。先把实例特征算干净再合成,是后续显式 Z-order 建模的前提;用 LoRA 而不是全量微调,保留了 Flux 的生成能力。
-
基于体渲染的 Z-order 显式建模:
- 功能:按用户给的遮挡集合 \(\mathcal{O}_i\) 计算每个像素上谁挡谁,把各"层"按物理一致的方式合成回一张 feature map。
- 核心思路:借鉴 NeRF,把图像平面视为正交相机的成像面。每个实例的密度 \(\sigma_i \in \mathbb{R}^D\) 不是固定值,而是由扩散时间步 \(t\) 和实例文本池化向量 \(y_i\) 经一个 time-text embedding 模块预测出来:\(\mathbf{e}_{temb}^i = \text{TimeTextEmbed}(t, y_i) \to \sigma_i\)。在像素 \(\mathbf{p}\) 处,不透明度 \(\alpha_i(\mathbf{p}) = (1 - \exp(-\sigma_i)) \cdot \mathbb{I}(\mathbf{p} \in B_i)\),透射率 \(T_i(\mathbf{p}) = \exp(-\sum_{j \in \mathcal{O}_i} \sigma_j \cdot \mathbb{I}(\mathbf{p} \in B_j))\),合成权重 \(w_i = T_i \cdot \alpha_i\)。最终合成在"有遮挡约束"的像素上做归一化加权平均 \(\mathbf{Z}_{out}(\mathbf{p}) = \sum_i w_i \hat{\mathbf{Z}}_i / (\sum_i w_i + \epsilon)\),对"框相交但没有遮挡声明"的像素则退回简单平均(hybrid 策略),最后残差加回 \(\mathbf{Z}\)。
- 设计动机:LaRender 用 training-free 的方式做体渲染,密度是手工启发式且对超参敏感;这里把 \(\sigma_i\) 做成"随扩散状态自适应"的可学习量,扩散早期低频阶段和后期细节阶段的"实心程度"可以不同,能更稳地处理复杂遮挡。hybrid 聚合则解决了"框重叠但物体并不真的互相挡"这种边界情形,避免被强行加权后纹理崩坏。
-
查询对齐损失(Queried Alignment Loss):
- 功能:补强体渲染对"几何形状"的监督缺口,让每个实例的特征真正聚焦在 GT mask 区域内,而不是在 box 里随意涂抹。
- 核心思路:对每个实例从 \(\mathbf{e}_{temb}^i\) 派生一个可学习 query \(\mathbf{q}_i \in \mathbb{R}^D\),在 \(\hat{\mathbf{Z}}_i\) 上做逐像素余弦相似度得到空间相似图 \(\mathbf{S}_i(\mathbf{p}) = \hat{\mathbf{Z}}_i(\mathbf{p}) \cdot \mathbf{q}_i / ((\|\hat{\mathbf{Z}}_i(\mathbf{p})\| + \epsilon)\|\mathbf{q}_i\|)\),再喂入轻量 CNN \(\mathcal{F}_\theta\) 输出前景/背景概率图 \(\hat{\mathbf{M}}_i\),对 SA-Z 中提供的 mask \(M_i\) 用交叉熵监督 \(\mathcal{L}_{align}\)。
- 设计动机:体渲染解决"谁在前谁在后"的合成顺序,但合成的前提是每"层"特征本身要有连贯的几何形状。如果不显式约束,模型很容易让特征在 box 内乱飘、导致重叠区轮廓断裂;用 query + CNN 读出的方式监督比直接在 attention map 上加 mask 损失更稳(见消融)。
损失函数 / 训练策略¶
总目标 \(\mathcal{L}_{total} = \mathcal{L}_{flow} + \lambda \mathcal{L}_{align}\),\(\lambda=0.5\)。\(\mathcal{L}_{flow}\) 为 Flux 的 rectified flow matching:\(\mathcal{L}_{flow} = \mathbb{E}_{t,\mathbf{z}_t,\mathbf{c}}[\|v_\theta(\mathbf{z}_t,t,\mathbf{c}) - \mathbf{v}_{target}\|_2^2]\),\(\mathbf{v}_{target} = \mathbf{x}_1 - \mathbf{x}_0\)。骨干 Flux.1-dev,LoRA rank=4,200K 步,batch 16,lr=1e-4。配套数据集 SA-Z 由 SACap-1M 派生:用 DescribeAnything 生成像素级 caption,用 InstaOrder 预测两两遮挡顺序,用 SAM-3D 重建 3D 几何再投影回图像平面得到 amodal mask 与 box,共 1M 高分辨率图、5.69M 实例,首个开放词表、带 amodal + Z-order 的大规模布局生成数据集。
实验关键数据¶
主实验¶
评测在 OverLayBench(Simple/Regular/Complex)+ 自建 SA-Z Eval(1K 真实图片)。指标分三组:空间精度(mIoU / O-mIoU)、语义一致性(SR\(_E\) / SR\(_R\) / CLIP-G/L)、图像质量(FID),外加 InstaOrder 风格的遮挡指标 Occ.(F1)与 Dep.(WHDR)。
| 子集 | 指标 | OcclusionFormer | 前 SOTA (InstanceAssemble) | Creatilayout | Eligen | LaRender |
|---|---|---|---|---|---|---|
| OverLay-Simple | mIoU ↑ | 0.7405 | 0.7279 | 0.6998 | 0.6673 | 0.6604 |
| OverLay-Simple | O-mIoU ↑ | 0.5456 | 0.5152 | 0.4725 | 0.4151 | 0.4136 |
| OverLay-Simple | Occ. ↑ | 0.8051 | 0.7852 | 0.7559 | 0.6823 | 0.6294 |
| OverLay-Regular | mIoU ↑ | 0.6487 | 0.6299 | 0.5997 | 0.5680 | 0.5721 |
| OverLay-Regular | O-mIoU ↑ | 0.4161 | 0.3861 | 0.3517 | 0.3075 | 0.3006 |
| OverLay-Complex | mIoU ↑ | 0.6037 | 0.5706 | 0.5584 | 0.5195 | 0.5227 |
| OverLay-Complex | O-mIoU ↑ | 0.3468 | 0.3189 | 0.3006 | 0.2569 | 0.2507 |
| OverLay-Complex | Occ. ↑ | 0.7797 | 0.6987 | 0.7142 | 0.5994 | 0.6026 |
| OverLay-Complex | Dep. ↓ | 0.1602 | 0.1791 | 0.1907 | 0.2378 | 0.2374 |
| SA-Z Eval | mIoU ↑ | 0.4509 | 0.4292 | 0.4216 | 0.3007 | 0.4053 |
| SA-Z Eval | O-mIoU ↑ | 0.2231 | 0.2021 | 0.1904 | 0.1016 | 0.1709 |
| SA-Z Eval | Occ. ↑ | 0.7568 | 0.6947 | 0.6921 | 0.6095 | 0.6833 |
| SA-Z Eval | FID ↓ | 62.79 | 63.65 | 64.66 | 69.91 | 77.98 |
亮点:场景越复杂(Simple→Complex)相对优势越大,O-mIoU 与 Occ. 这两个直接衡量重叠区域的指标提升最明显(Complex 子集 Occ. +0.08,Dep. -0.019)。
消融实验(OverLay-Complex)¶
| 配置 | mIoU ↑ | O-mIoU ↑ | Occ. ↑ | Dep. ↓ | 说明 |
|---|---|---|---|---|---|
| OcclusionFormer (full) | 0.6037 | 0.3468 | 0.7797 | 0.1602 | 完整模型 |
| w/o Learned Sigma | 0.5911 | 0.3276 | 0.7530 | 0.1694 | 把动态密度换成静态值,遮挡 F1 掉 ~2.7 点 |
| w/o Queried Loss | 0.5922 | 0.3319 | 0.7659 | 0.1666 | 去掉对齐损失,O-mIoU 掉 ~1.5 点 |
| w Attn. Map Loss | 0.5753 | 0.3207 | 0.7510 | 0.1695 | 改用 attention map 上的 mask 损失,反而比 w/o 更差 |
| w/o Amodal Data | 0.6004 | 0.3411 | 0.7703 | 0.1644 | 不用 SA-Z 的 amodal 标注(只用可见 mask),各项小幅下降 |
关键发现¶
- 动态密度是收益最大的设计:去掉 learned \(\sigma\) 后 Occ. 掉 0.027、Dep. 涨 0.009,证明"密度随扩散时间步与文本自适应"比固定密度更能稳定刻画不同扩散阶段的层级权重。
- 查询对齐损失优于 attention-map mask loss:直接在 attention map 上加 mask 监督会与 MM-Attention 的全局语义产生冲突,反而劣于 w/o Queried Loss 的设置,说明"query 引导 + 独立 CNN 头读出"是更解耦的监督路径。
- amodal 标注虽小但稳定有用:相比 only-visible mask,amodal 数据给了"被遮挡部分"的监督信号,对复杂遮挡的几何完整性有持续帮助,是 SA-Z 数据集相对此前 LayoutSAM/SACap-1M 的独有价值点。
- 真实图片域差距明显:所有方法在 SA-Z Eval 上的 mIoU/O-mIoU 都显著低于 OverLayBench(后者由 Flux 合成);OcclusionFormer 在真实域的相对优势同样存在,说明改进不依赖于合成图分布。
亮点与洞察¶
- 把图形学 Z-buffer 思想搬进 DiT 的可微版本:用 NeRF 体渲染公式做"层"的合成,让"显式 Z-order"以可微、可端到端训练的形式回到扩散模型里,思路干净;相比 LaRender 的 training-free 启发式更稳,相比 GLIGEN/Eligen 的"全局加条件"更物理一致。
- "实例解耦 → 显式 Z-order 合成 → 几何对齐"的三段式可复用:这个流程不局限于布局生成——任何需要"按用户给定顺序"合成多源 token 的任务(视频图层、3D 场景编辑、可控扩散)都可以套这个骨架:先 box-mask 出局部、独立 MM-Attention、用 learned density + transmittance 做有序合成、用 query 头拉几何监督。
- 数据策略给"开放词表 + amodal"打了样:用 SAM-3D 重建 3D 再投影来"白嫖" amodal 标注,规避了 COCOA 那种依赖人工标 amodal mask 的小规模困境,可以推广到任何已有可见 mask 的数据集,是有迁移价值的标注思路。
局限与展望¶
- 依赖输入正确的 Z-order:方法把遮挡集合 \(\mathcal{O}_i\) 当成已知条件,但用户提供的 Z-order 可能有歧义甚至错误(尤其是三个以上物体形成循环遮挡时),论文没有讨论模型在错误 Z-order 下的鲁棒性。
- 复杂场景下绝对 FID 仍偏高:SA-Z Eval 上 FID=62.79 虽然是 SOTA,但绝对值仍远高于 OverLay-Simple 的 24.6,说明在真实复杂多实例场景下整体保真度还有相当大的空间。
- 正交相机假设较强:体渲染建立在虚拟正交相机+轴对齐 box 的假设上,对透视失真大、box 远小近大、或者需要倾斜 amodal box 的场景适配性不明。
- 训练成本:基于 Flux.1-dev + 200K 步 + 1M 高分辨率数据,复现门槛较高,论文未给推理时延对比,串行的每实例局部 attention 在实例数很多时(论文表上 SA-Z 平均 5.7 实例)可能成为瓶颈。
相关工作与启发¶
- vs LaRender:同样借了 NeRF 体渲染,但 LaRender 是 training-free + 启发式 + 复用 cross-attention 空间(因此丢全局 prompt),本文是 training + learned density + 独立合成模块,复杂场景 Occ. 高 0.18、O-mIoU 高 0.10,显示"学一点比手工调要稳很多"。
- vs Eligen / Creatilayout:同样基于 Flux/DiT,但它们把布局当全局 2D 条件,本文额外加了 Z 轴维度并用 box 范围限制 attention 范围,O-mIoU 在所有子集上稳定领先 0.04~0.05;启示是"把空间约束从'加条件'升级为'切 attention 子空间'"是个比堆条件更直接的可控性手段。
- vs InstanceAssemble:当前最强 baseline,差距在复杂子集明显更大(Complex 上 mIoU +0.033、O-mIoU +0.028、Occ. +0.081),说明显式 Z-order 建模比单纯改进实例组装更能撬动重叠区性能。
- vs InstaOrder / COCOA:这些数据集首次提供 Z-order/amodal,但被困在 COCO 的低分辨率 + 闭集词表里;SA-Z 把同样的标注思路扩展到 SA-1B 规模 + 开放词表 + amodal,把"显式遮挡"从分析任务带回到了开放词表生成任务的视野中。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把可微体渲染 + 实例解耦组合用于显式 Z-order 控制是 layout-to-image 方向的清晰新设定,但单看模块(NeRF 渲染、LoRA、query-mask 监督)都是已有部件的重组。
- 实验充分度: ⭐⭐⭐⭐ 三难度 + 真实评测 + 6 个基线 + 9 个指标 + 4 个消融维度,覆盖到位;缺推理时延与对错误 Z-order 的鲁棒性分析。
- 写作质量: ⭐⭐⭐⭐ 动机、模块设计、公式串讲清晰,图 1/3/4/5/6 配合得当,符号统一。
- 价值: ⭐⭐⭐⭐ SA-Z 数据集 + 显式 Z-order 框架对后续可控扩散生成是可复用的基础设施,对"用户自然给 amodal box + 期待遮挡正确"这一痛点给出第一个系统化方案。