Skip to content

Sirius518/computing-graph-lab3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

组合式文生图框架横向对比(Compositional T2I: a fair-comparison study)

计算机图形学 Project 3 ·「生成式 AI 实践」。 在统一 SD1.5 底座 + 公平对比协议下,横向复现对比三个组合式文生图方法,并用四个受控消融把结论做成机制因果链。 所有分数均为本仓库 harness 同口径重跑,未引用任何论文自报数字。

完整写作素材(机制对比 / 公平协议 / 主结果 / 四个消融 + 数据附录)见 REPORT_MATERIAL.md


1. 一眼看结论

主对比(全量 100 prompt/类 × 4 种子 = 1600 张/方法,BLIP-VQA + CLIPScore):

method color shape texture non_spatial avg
lmd_plus 0.4438 0.5450 0.5378 0.2900 0.4541 🥇
sd15_baseline 0.3662 0.3820 0.4102 0.3118 0.3675 🥈
rpg 0.2558 0.2507 0.2823 0.2818 0.2676 🥉

核心结论:LMD+ > SD1.5 > RPG,且"更复杂的组合机制 ≠ 更好"。 布局接地(LMD+)对属性绑定的提升稳健、由扩散端机制驱动;区域扩散(RPG)在简单场景 + 弱底座上因"丢物体"垫底——四个消融(难度分层 / 显著性 / 规划器消融 / base_ratio 扫描)证明:RPG 规划器越强、旋钮怎么调都救不回来。


2. 研究问题与三个对比对象

我们做的不是"提新方法",而是一份扎实的复现对比:当把"组合机制"作为唯一变量、其余全部钉死时,加进来的机制到底带来了什么?是机制本身,还是规划器/超参/底座等混淆因素?

方法 加入的结构 如何施加 生成方式
SD1.5 无(对照锚点) 全局单遍
LMD+ 每个物体一个 bbox (GLIGEN 接地 + 梯度引导) 全局单遍
RPG 画布矩形分区 (逐区潜在 + 区域注意力) 分区生成

机制差异的详细对比见 REPORT_MATERIAL.md §2。


3. 仓库结构

harness/                 统一对比 harness(与具体框架解耦)
  config.yaml              ★ 所有"钉死的实验变量"集中在此
  common.py                配置 / 路径 / 文件命名约定
  sample_prompts.py        从 T2I-CompBench 确定性抽样 prompt 子集
  generate_baseline.py     纯 SD1.5 baseline 生成
  evaluate.py              调 T2I-CompBench 打分脚本(非并行,保留逐图产物)
  evaluate_parallel.py     图片分片 + 多卡并行评测
  aggregate.py             汇总 → 对比表 results/summary.{md,csv}
  normalize_lmd.py         LMD+ 输出图归一化进统一布局
  perimage.py              逐图分数加载器(分析消融用)
  stratify.py              消融A:难度分层
  significance.py          消融B:排序显著性 + 种子方差
  plot_base_ratio.py       消融D:base_ratio 扫描出图
env/                     环境与一键脚本(见 env/README.md 安装 recipe)
  project_env.sh           统一环境变量(conda / 缓存 / 代理 / pip 源)
  run_phase1.sh            SD1.5 baseline 全流程(生成 + 评测 + 汇总)
  run_lmd_full.sh          LMD+ 全流程(规划 + 生成 + 归一化 + 评测)
  run_rpg_batch.sh         RPG 全流程(并发规划 + 2 卡生成 + 评测)
  run_ablation_finish.sh   消融 C/D 收尾编排(生成 + 评测 + 出图)
  verify_gpu.sh            验收 4 个 conda env 的 CUDA 可用性
methods/                 三套方法 + 评测器代码(含我们的改造,见 §7)
data/prompts/            抽样出的 prompt 子集 <category>.txt(进 Git)
data/images/             生成图与逐图评测产物(★ 不进 Git,见 §5)
results/                 <method>/<cat>.json + summary.{md,csv}
  analysis/              四个消融的数据 + base_ratio_curve.png
REPORT_MATERIAL.md       报告全文素材(中文)

data/images/(~3.4G 生成图)与 Project3说明_2026.pptx 不纳入 Git(见 §5)。


4. 环境准备

硬件:2× NVIDIA H100 80GB(CUDA 12.x)。生成是大头,评测较轻。

四个独立 conda 环境(依赖差异大,互相隔离):

env 用途 关键依赖
compbench 评测器(BLIP-VQA + CLIPScore) spacy(en_core_web_sm)、transformers
sd15 SD1.5 baseline 生成 + 汇总 diffusers、torch
lmd LMD+ 生成 diffusers 严格 0.18.0
rpg RPG 生成 diffusers 0.27.x

逐环境安装 recipe(含踩过的坑)见 env/README.mdenv/SETUP_RESULT.md。 所有路径/缓存约定集中在 env/project_env.sh,运行任何脚本前先 source 它。

两个外部依赖:

  • 规划器 LLM 走 OpenRouter API(LMD+ 与 RPG 共用),运行前需 export OPENAI_API_KEY=<你的 OpenRouter key>;绝不要把 key 写进任何文件(本仓库已确认无 key 泄露)。主结果用 qwen/qwen3.7-max,规划器消融用 qwen/qwen-2.5-7b-instruct
  • 网络/代理是环境相关的:我们的集群上 OpenRouter 仅经代理可达、HF 权重也走代理;不同环境请按 env/project_env.sh 自行调整(http_proxy / HF_ENDPOINT 等)。
bash env/verify_gpu.sh   # 验收:4 个 env 的 torch.cuda 都 True

5. 关于图片数据(为什么不在 Git 里)

data/images/(3.4G 生成图)不入 Git,有两种获取方式:

  • 下载原图:从网盘取(链接见下),解压后放到 data/images/;
  • 自行复现:按 §6 跑生成脚本即可重建全部图片——LLM 规划缓存(methods/RPG-DiffusionMaster/rpg_layout_cache*/methods/LLM-groundedDiffusion/cache/)已随仓库提供,无需重新调用 API

📦 原图网盘链接:(待补)(含 9 个方法的 data/images/,以及 Project3说明_2026.pptx)

不用 Git LFS(免费额度 1G,装不下 3.4G);*.pptx(>100MB)同样不入 Git。


6. 复现步骤

所有命令默认已 cd 到仓库根、source env/project_env.sh、(生成类)export OPENAI_API_KEY=...

Phase 0 · 抽样 prompt 子集(本机,无 GPU)

python -m harness.sample_prompts --phase1   # 写 data/prompts/<cat>.txt(已随仓库提供)

Phase 1 · SD1.5 baseline

bash env/run_phase1.sh                       # 抽样→2卡生成1600张→评测→汇总

Phase 2 · 两个方法

export OPENAI_API_KEY=<openrouter-key>
bash env/run_lmd_full.sh                      # LMD+:规划→生成→归一化→评测
bash env/run_rpg_batch.sh                     # RPG :并发规划→2卡生成→评测

消融 A/B(零额外生成,纯分析,compbench env)

python -m harness.stratify     --phase1       # 难度分层  → results/analysis/stratification.*
python -m harness.significance --phase1       # 显著性    → results/analysis/significance.*

消融 C/D(需重新生成,前 30 条子集)

export OPENAI_API_KEY=<openrouter-key>
bash env/run_ablation_finish.sh               # C 规划器消融 + D base_ratio 扫描 + 出图

随时汇总对比表

python -m harness.aggregate --phase1          # → results/summary.{md,csv}

7. 我们对第三方代码的改造(便于 review)

methods/ 下三套仓库来自开源,我们做了最小、向后兼容的改造(默认行为不变):

  • LMD+(LLM-groundedDiffusion):utils/llm.py 接 OpenRouter 规划器 + gpt-4-weak 弱模型别名;prompt.pycompbench_<cat> prompt-type。
  • RPG(RPG-DiffusionMaster):mllm.py 接 OpenRouter(规划器经 RPG_PLANNER_MODEL 可切);gen_rpg.py/plan_rpg.py 为本项目子集生成 + 加 --base-ratio/--output-method/--cache-dir
  • T2I-CompBench:CLIPScore_eval/CLIP_similarity_hf.py(transformers 后端等价实现 + 逐图映射);BLIPvqa_eval 模型加载 8→1 提速(口径不变)。

第三方代码版权归各自作者;本仓库仅为课程复现用途,建议设为 private


8. 关键原则与局限

公平对比协议(改实验只改 harness/config.yaml):

  • 底座统一锚定 SD1.5;规划器 LLM 三方共用同一个 API 模型;种子 [0,1,2,3];prompt 子集三方同一份;评测器同一套。
  • 绝不引用论文自报数字——全部同口径重跑。

如实声明的局限(详见 REPORT_MATERIAL.md §7):

  1. 底座无法 100% 统一(LMD+ 的 GLIGEN 适配器绑定 SD v1.4);
  2. RPG 用 SD1.5@512 而非其原生 SDXL,可能放大其劣势;
  3. 评测仅覆盖属性绑定 + 非空间关系(空间/数量维度需 detectron2/UniDet,未做);
  4. 消融 C/D 用 30 条子集(生成类消融的算力惯例),主表为全量 100。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors