PosterReward: Unlocking Accurate Evaluation for High-Quality Graphic Design Generation
Paper โข 2603.29855 โข Published
PosterReward is a dedicated reward modeling framework for poster assessment. It builds a 70k poster preference dataset from multi-MLLM consensus and introduces specialized models for poster quality evaluation across five dimensions:
This repository contains three model variants, all built on Qwen3-VL-8B:
| Model | Path | Type | Description |
|---|---|---|---|
| PosterReward Analyser | PosterReward_analyser/ |
Generative VLM | Generates detailed multi-dimensional analysis of poster images |
| PosterReward Scorer | PosterReward_scorer/ |
Scalar Reward Model | Takes analysis + image and produces a scalar reward score |
| PosterReward-Lite | PosterReward-Lite/ |
Scalar Reward Model | Simplified pointwise scorer that omits the analysis module for faster inference |
The full PosterReward pipeline is a two-stage analysis -> scoring process:
A simplified variant that directly predicts a scalar reward from the image and prompt, without requiring a separate analysis step. Faster inference at the cost of slightly lower accuracy.
This repository also hosts the PosterRewardBench benchmark images:
| File | Description | Size |
|---|---|---|
PRB_basic_images.tar.gz |
PosterRewardBench-Basic images (1,034 images from Flux, Flux-Krea, SD3.5-L) | ~1.1 GB |
PRB_advanced_images.tar.gz |
PosterRewardBench-Advanced images (2,446 images from Seedream-3.0, Seedream-4.0, Qwen-Image-Lightning) | ~736 MB |
Download and extract these archives into the poster_reward_bench/ directory of the code repository.
git clone https://github.com/MeiGen-AI/PosterReward.git
cd PosterReward
cd swift && pip install -e . && cd ..
pip install msgspec "qwen_vl_utils>=0.0.14" torchvision diffusers pillow
from swift.llm import PtEngine, InferRequest
model_path = "path/to/PosterReward-Lite" # or download from this repo
engine = PtEngine(model_path, max_batch_size=64, task_type='seq_cls', num_labels=1)
messages = [
{"role": "user", "content": "<image>Your poster description prompt here."},
{"role": "assistant", "content": ""}
]
request = InferRequest(messages=messages, images=["path/to/poster.png"])
resp_list = engine.infer([request])
score = resp_list[0].choices[0].message.content
print(f"Reward Score: {score}")
# Edit model paths in inference_posterreward.sh, then:
bash inference_posterreward.sh
| Model | MMRB2 โ | HPDv3 โ | PRB-Basic โ | PRB-Ad โ |
|---|---|---|---|---|
| ImageReward | 53.0 | 58.6 | 60.7 | 49.3 |
| PickScore | 57.6 | 65.6 | 66.7 | 44.1 |
| HPSv2 | 55.0 | 65.3 | 70.8 | 43.7 |
| HPSv3 | 58.5 | 76.9 | 72.9 | 41.2 |
| PosterReward-Lite | 60.5 | 77.1 | 83.9 | 85.0 |
| PosterReward | 59.6 | 77.8 | 86.7 | 86.0 |
Coming Soon!