File size: 8,729 Bytes
7c08dc3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# 🎓Paper2Poster: Multimodal Poster Automation from Scientific Papers
# 从学术论文自动生成学术海报
<p align="center">
<a href="https://arxiv.org/abs/2505.21497" target="_blank"><img src="https://img.shields.io/badge/arXiv-2505.21497-red"></a>
<a href="https://paper2poster.github.io/" target="_blank"><img src="https://img.shields.io/badge/Project-Page-brightgreen"></a>
<a href="https://huggingface.co/datasets/Paper2Poster/Paper2Poster" target="_blank"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Dataset-orange"></a>
<a href="https://huggingface.co/papers/2505.21497" target="_blank"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Daily Papers-red"></a>
<a href="https://x.com/_akhaliq/status/1927721150584390129" target="_blank"><img alt="X (formerly Twitter) URL" src="https://img.shields.io/twitter/url?url=https%3A%2F%2Fx.com%2F_akhaliq%2Fstatus%2F1927721150584390129"></a>
</p>
We address **How to create a poster from a paper** and **How to evaluate poster.**

## 🔥 Update
- [x] [2025.10.13] Added automatic **logo support** for conferences and institutions, **YAML-based style customization**, a new default theme.
- [x] [2025.9.18] Paper2Poster has been accepted to **NeurIPS 2025 Dataset and Benchmark Track**.
- [x] [2025.9.3] We now support generate per section content in **parallel** for faster generation, by simply specifying `--max_workers`.
- [x] [2025.5.27] We release the [arXiv](https://arxiv.org/abs/2505.21497), [code](https://github.com/Paper2Poster/Paper2Poster) and [`dataset`](https://huggingface.co/datasets/Paper2Poster/Paper2Poster)
<!--## 📚 Introduction-->
**PosterAgent** is a top-down, visual-in-the-loop multi-agent system from `paper.pdf` to **editable** `poster.pptx`.

<!--A Top-down, visual-in-the-loop, efficient multi-agent pipeline, which includes (a) Parser distills the paper into a structured asset library; the (b) Planner aligns text–visual pairs into a binary‐tree layout that preserves reading order and spatial balance; and the (c) Painter-Commentor loop refines each panel by executing rendering code and using VLM feedback to eliminate overflow and ensure alignment.-->
<!---->
<!--**Paper2Poster:** A benchmark for paper to poster generation, paired with human generated poster, with a comprehensive evaluation suite, including metrics like **Visual Quality**, **Textual Coherence**, **VLM-as-Judge** and **PaperQuiz**. Notably, PaperQuiz is a novel evaluation which assume A Good poster should convey core paper content visually.-->
## 📋 Table of Contents
<!--- [📚 Introduction](#-introduction)-->
- [🛠️ Installation](#-installation)
- [🚀 Quick Start](#-quick-start)
- [🔮 Evaluation](#-evaluation)
---
## 🛠️ Installation
Our Paper2Poster supports both local deployment (via [vLLM](https://docs.vllm.ai/en/v0.6.6/getting_started/installation.html)) or API-based access (e.g., GPT-4o).
**Python Environment**
```bash
pip install -r requirements.txt
```
**Install Libreoffice**
```bash
sudo apt install libreoffice
```
or, if you do **not** have sudo access, download `soffice` executable directly: https://www.libreoffice.org/download/download-libreoffice/, and add the executable directory to your `$PATH`.
**Install poppler**
```bash
conda install -c conda-forge poppler
```
**API Key**
Create a `.env` file in the project root and add your OpenAI API key:
```bash
OPENAI_API_KEY=<your_openai_api_key>
```
**Optional: Google Search API (for logo search)**
To use Google Custom Search for more reliable logo search, add these to your `.env` file:
```bash
GOOGLE_SEARCH_API_KEY=<your_google_search_api_key>
GOOGLE_SEARCH_ENGINE_ID=<your_search_engine_id>
```
---
## 🚀 Quick Start
Create a folder named `{paper_name}` under `{dataset_dir}`, and place your paper inside it as a PDF file named `paper.pdf`.
```
📁 {dataset_dir}/
└── 📁 {paper_name}/
└── 📄 paper.pdf
```
To use open-source models, you need to first deploy them using [vLLM](https://docs.vllm.ai/en/v0.6.6/getting_started/installation.html), ensuring the port is correctly specified in the `get_agent_config()` function in [`utils/wei_utils.py`](utils/wei_utils.py).
- [High Performance] Generate a poster with `GPT-4o`:
```bash
python -m PosterAgent.new_pipeline \
--poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
--model_name_t="4o" \ # LLM
--model_name_v="4o" \ # VLM
--poster_width_inches=48 \
--poster_height_inches=36
```
- [Economic] Generate a poster with `Qwen-2.5-7B-Instruct` and `GPT-4o`:
```bash
python -m PosterAgent.new_pipeline \
--poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
--model_name_t="vllm_qwen" \ # LLM
--model_name_v="4o" \ # VLM
--poster_width_inches=48 \
--poster_height_inches=36 \
--no_blank_detection # An option to disable blank detection
```
- [Local] Generate a poster with `Qwen-2.5-7B-Instruct`:
```bash
python -m PosterAgent.new_pipeline \
--poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
--model_name_t="vllm_qwen" \ # LLM
--model_name_v="vllm_qwen_vl" \ # VLM
--poster_width_inches=48 \
--poster_height_inches=36
```
PosterAgent **supports flexible combination of LLM / VLM**, feel free to try other options, or customize your own settings in `get_agent_config()` in [`utils/wei_utils.py`](utils/wei_utils.py).
### Adding Logos to Posters
You can automatically add institutional and conference logos to your posters:
```bash
python -m PosterAgent.new_pipeline \
--poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
--model_name_t="4o" \
--model_name_v="4o" \
--poster_width_inches=48 \
--poster_height_inches=36 \
--conference_venue="NeurIPS" # Automatically searches for conference logo
```
**Logo Search Strategy:**
1. **Local search**: First checks the provided logo store (`logo_store/institutes/` and `logo_store/conferences/`)
2. **Web search**: If not found locally, performs online search
- By default, uses DuckDuckGo (no API key required)
- For more reliable results, use `--use_google_search` (requires `GOOGLE_SEARCH_API_KEY` and `GOOGLE_SEARCH_ENGINE_ID` in `.env`)
You can also specify custom logo paths to skip auto-detection:
```bash
--institution_logo_path="path/to/institution_logo.png" \
--conference_logo_path="path/to/conference_logo.png"
```
### YAML Style Customization
Customize poster appearance via YAML configuration files:
- **Global defaults**: `config/poster.yaml` (applies to all posters)
- **Per-poster override**: Place `poster.yaml` next to your `paper.pdf` for custom styling
## 🔮 Evaluation
Download Paper2Poster evaluation dataset via:
```bash
python -m PosterAgent.create_dataset
```
In evaluation, papers are stored under a directory called `Paper2Poster-data`.
To evaluate a generated poster with **PaperQuiz**:
```bash
python -m Paper2Poster-eval.eval_poster_pipeline \
--paper_name="${paper_name}" \
--poster_method="${model_t}_${model_v}_generated_posters" \
--metric=qa # PaperQuiz
```
To evaluate a generated poster with **VLM-as-Judge**:
```bash
python -m Paper2Poster-eval.eval_poster_pipeline \
--paper_name="${paper_name}" \
--poster_method="${model_t}_${model_v}_generated_posters" \
--metric=judge # VLM-as-Judge
```
To evaluate a generated poster with other statistical metrics (such as visual similarity, PPL, etc):
```bash
python -m Paper2Poster-eval.eval_poster_pipeline \
--paper_name="${paper_name}" \
--poster_method="${model_t}_${model_v}_generated_posters" \
--metric=stats # statistical measures
```
If you want to create a PaperQuiz for your own paper:
```bash
python -m Paper2Poster-eval.create_paper_questions \
--paper_folder="Paper2Poster-data/${paper_name}"
```
## ❤ Acknowledgement
We extend our gratitude to [🐫CAMEL](https://github.com/camel-ai/camel), [🦉OWL](https://github.com/camel-ai/owl), [Docling](https://github.com/docling-project/docling), [PPTAgent](https://github.com/icip-cas/PPTAgent) for providing their codebases.
## 📖 Citation
Please kindly cite our paper if you find this project helpful.
```bibtex
@misc{paper2poster,
title={Paper2Poster: Towards Multimodal Poster Automation from Scientific Papers},
author={Wei Pang and Kevin Qinghong Lin and Xiangru Jian and Xi He and Philip Torr},
year={2025},
eprint={2505.21497},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2505.21497},
}
```
|