本仓库是一个单仓库复现包,包含 eval-aware PosterGen 主流程、Paper2Poster/P2P 外部基线适配、评测管线和本地示例数据。目标是复现“面向读者理解与评测指标的科学海报生成”实验,而不是保存历史生成结果或下载后的 benchmark 数据。
PosterGen/ 主生成管线、eval-aware agents、benchmark wrappers、10 篇本地示例数据
Paper2Poster/ 外部 Paper2Poster baseline 与 PaperQuiz-style 评测代码
P2P/ 外部 P2P/P2PEval checklist 评测代码
PaperX/ related work 参考代码
仓库会提交:
PosterGen/data/:本地 10 篇小规模示例论文数据。Paper2Poster/assets/poster_data/Train/**/*.txt:Paper2Poster tree-split layout 训练需要的轻量 txt 文件。Paper2Poster/assets/h1_example/*.jpg、Paper2Poster/assets/overflow_example_v2/*.jpg:Paper2Poster baseline 运行时使用的少量示例图。
仓库不会提交:
PosterGen/eval_runs/、PosterGen/output/等生成与评测结果。Paper2Poster/Paper2Poster-data/、Paper2Poster/eval_results/等运行时数据。Paper2Poster/assets/poster_data/**/*.pdf等大体积上游 PDF 资产。
推荐 Python 3.11。集成评测可以使用一个环境完成;如果 Paper2Poster 依赖和 PosterGen 主环境冲突,可单独给 Paper2Poster 建环境,但默认命令假设在同一个环境中运行。
conda create -n poster python=3.11
conda activate poster
python -m pip install --upgrade pip setuptools wheel
cd PosterGen
pip install -r requirements.txt
pip install -e .
cd ../P2P
pip install -r requirements.txt
cd ../Paper2Poster
pip install -r requirements.txt系统依赖:
- LibreOffice:将生成的 PPTX 渲染为 PNG。
- Tesseract OCR:Paper2Poster 的
word_count/token_count指标会用到。 - Poppler/PyMuPDF 相关 PDF 工具:部分 PDF/图片转换路径会用到。
- OpenAI-compatible API key:生成、离线 VLM、QA、checklist 生成/评测会用到。
推荐使用 PosterGen/.env,这也是我们实际实验采用的方式:
cd PosterGen
cp .env.example .env然后编辑 PosterGen/.env:
OPENAI_API_KEY=your_api_key
OPENAI_BASE_URL=也可以使用 shell 环境变量:
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=... # optionalWindows PowerShell:
$env:OPENAI_API_KEY="..."
$env:OPENAI_BASE_URL="..." # optional注意:
run_all_evals会显式加载PosterGen/.env。- PosterGen 模型调用使用
load_dotenv(override=True),因此PosterGen/.env可能覆盖 shell 中同名变量。 - 通过
run_all_evals启动的 Paper2Poster/P2P 子进程会继承已加载的环境变量。 - 如果单独进入
Paper2Poster/或P2P/运行上游脚本,需要额外 export 环境变量,或在对应目录准备.env。
从 PosterGen/ 目录运行。
本地示例 smoke generation:
cd PosterGen
python -m evaluation.bench.run_generation \
--run_id demo_gen \
--dataset postergen_local \
--methods eval_aware,postergen_original \
--limit 1 \
--skip_existing标准化后的生成结果会写入:
PosterGen/eval_runs/<run_id>/methods/<method>/<paper_id>/
poster.png
poster.pptx
content/*.json
method_meta.json
常用方法名:
eval_aware:本文的 reader/eval-aware PosterGen 管线。postergen_original:原始 PosterGen-style baseline。eval_aware_no_optimizer、eval_aware_no_repair、eval_aware_no_llm_critic:消融实验。paper2poster:外部 Paper2Poster baseline wrapper。gt_reference:有 GT poster 时导入参考海报。
一条命令会完成:准备本地数据、批量生成、internal deterministic metrics、offline VLM metrics、Paper2Poster QA/count metrics、P2P checklist metrics 和聚合。
从 PosterGen/ 目录运行:
python -m evaluation.bench.run_all_evals \
--run_id final_postergen \
--dataset postergen_enriched \
--methods eval_aware,postergen_original,paper2poster,eval_aware_no_optimizer,eval_aware_no_repair,eval_aware_no_llm_critic,gt_reference \
--model_name gpt-4.1-2025-04-14 \
--qa_model_name gpt-4.1 \
--checklist_model_name gpt-4.1-2025-04-14 \
--paper2poster_qa_model_names gpt-4.1 \
--skip_hf_match \
--generate_missing_qa \
--generate_missing_checklist \
--download_known_gt_posters \
--paper2poster_metrics qa,word_count,token_count \
--p2p_mode checklist \
--eval_workers 8 \
--api_workers 32 \
--vlm_workers 8 \
--paper2poster_workers 8 \
--p2p_outer_workers 3 \
--p2p_checklist_workers 10 \
--limit 10 \
--skip_existing重要说明:
--skip_existing支持断点续跑,已有 poster 和已有指标文件会跳过。- VLM 评测在生成完成后离线统一进行,保证所有方法被同一 judge 条件评估。
- Paper2Poster 上游
stats/judge/aesthetic_judge默认不跑,因为它们依赖本地/HuggingFace 大模型或 hard-coded GPT-4o。推荐指标是qa,word_count,token_count。 - LLM 生成的 checklist 是 diagnostic,不应称为官方 P2P ground truth。
评测聚合输出:
PosterGen/eval_runs/<run_id>/aggregate/
per_paper.csv
summary.csv
pairwise_winrate.csv
latex_tables.json
failed_artifacts.json
将 latex_tables.json 转成按指标组织的 JSON 报告:
python -m evaluation.bench.report \
eval_runs/final_postergen/aggregate/latex_tables.json \
eval_runs/final_postergen/aggregate/report.json更细的 benchmark 命令见 PosterGen/evaluation/bench/README.md。
paper2poster baseline 生成会间接调用:
Paper2Poster/PosterAgent/new_pipeline.py
-> PosterAgent/tree_split_layout.py::main_train()
该路径需要:
Paper2Poster/assets/poster_data/Train/**/*.txt
Paper2Poster/assets/h1_example/h1_pos.jpg
Paper2Poster/assets/h1_example/h1_neg.jpg
Paper2Poster/assets/overflow_example_v2/neg.jpg
Paper2Poster/assets/overflow_example_v2/pos.jpg
这些轻量资源会随仓库提交。完整 poster_data/Train PDF 资产很大,不会提交。若只运行 eval_aware/postergen_original/ablations,不需要 Paper2Poster assets;若运行 paper2poster baseline,preflight 会检查这些资源是否存在,缺失时会跳过该 baseline 并给出清晰错误。
修改某个方法后,只删除该方法目录,再用同一命令 --skip_existing 续跑:
rm -rf eval_runs/final_postergen/methods/eval_aware
python -m evaluation.bench.run_all_evals \
--run_id final_postergen \
--dataset postergen_enriched \
--methods eval_aware \
--model_name gpt-4.1-2025-04-14 \
--skip_existing只强制重跑 VLM,不重新生成 poster:
python -m evaluation.bench.run_all_evals \
--run_id final_postergen \
--dataset postergen_enriched \
--methods eval_aware,postergen_original,paper2poster,eval_aware_no_optimizer,eval_aware_no_repair,eval_aware_no_llm_critic,gt_reference \
--metrics vlm,aggregate \
--model_name gpt-4.1-2025-04-14 \
--force_eval vlm \
--vlm_workers 8 \
--skip_existing运行审计脚本:
cd PosterGen
python -m evaluation.bench.audit_repo_release它会检查:
- 必需源码是否存在且未被 ignore。
- Paper2Poster 轻量运行时 assets 是否存在且未被 ignore。
- 生成/评测产物和大文件 probe 是否被 ignore。
也可以手动检查:
git check-ignore -v PosterGen/eval_runs/final_postergen/aggregate/report.json
git check-ignore -v Paper2Poster/assets/poster_data/Train/<sample>/<sample>.pdf
git check-ignore -v Paper2Poster/Paper2Poster-data/example/poster.png
git check-ignore -v P2P/eval/temp-v2/example/poster.png这些应被忽略。
git check-ignore -v PosterGen/evaluation/bench/run_all_evals.py
git check-ignore -v Paper2Poster/assets/h1_example/h1_pos.jpg
git check-ignore -v Paper2Poster/assets/overflow_example_v2/neg.jpg
git check-ignore -v Paper2Poster/assets/poster_data/Train/<sample>/<sample>.txt
git check-ignore -v P2P/eval/common.yaml这些不应被忽略;没有输出就是正常。
本项目准备作为一个单一根仓库发布。PosterGen/、Paper2Poster/、P2P/、PaperX/ 原本各自带 .git/,最终根仓库提交前需要把这些嵌套 .git/ 移出仓库或备份到仓库外。否则 GitHub 上只会记录 embedded repo/submodule-like 指针,而不是实际代码内容。
推荐流程:
cd G:/code/CG/project3
mkdir ../project3_nested_git_backup
mv PosterGen/.git ../project3_nested_git_backup/PosterGen.git
mv Paper2Poster/.git ../project3_nested_git_backup/Paper2Poster.git
mv P2P/.git ../project3_nested_git_backup/P2P.git
mv PaperX/.git ../project3_nested_git_backup/PaperX.git
git rm --cached -r PosterGen Paper2Poster P2P PaperX
git add .
git commit -m "Add eval-aware poster generation and benchmark pipeline"
git remote add origin https://github.com/EvalAwarePosterGen/Eval_Aware_Poster_Gen.git
git branch -M main
git push -u origin main如果远端已存在:
git remote set-url origin https://github.com/EvalAwarePosterGen/Eval_Aware_Poster_Gen.git