Ephemeral182 commited on
Commit
e61d1d5
Β·
verified Β·
1 Parent(s): 22de288

Add model card README + figures

Browse files
.gitattributes CHANGED
@@ -33,3 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ assets/logo_genevolve.png filter=lfs diff=lfs merge=lfs -text
37
+ assets/overview.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/teaser.jpg filter=lfs diff=lfs merge=lfs -text
39
+ assets/visual_comparison.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,3 +1,261 @@
1
  ---
2
  license: apache-2.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  license: apache-2.0
3
+ language:
4
+ - en
5
+ library_name: transformers
6
+ pipeline_tag: image-text-to-text
7
+ base_model: Qwen/Qwen3-VL-8B-Instruct
8
+ tags:
9
+ - agent
10
+ - image-generation
11
+ - tool-use
12
+ - visual-reasoning
13
+ - self-distillation
14
+ - grpo
15
+ - reinforcement-learning
16
+ - multimodal
17
+ - qwen3-vl
18
+ datasets:
19
+ - MeiGen-AI/GenEvolve-Data
20
  ---
21
+
22
+ <div align="center">
23
+
24
+ <img src="assets/logo_genevolve.png" alt="GenEvolve" width="160">
25
+
26
+ <h1>GenEvolve</h1>
27
+
28
+ <p><strong><em>Self-Evolving Image Generation Agents via Tool-Orchestrated Visual Experience Distillation</em></strong></p>
29
+
30
+ <p>
31
+ <a href="https://ephemeral182.github.io/GenEvolve/">
32
+ <img alt="Project Page" src="https://img.shields.io/badge/🌐_Project-Page-1f6feb"></a>
33
+ <a href="https://arxiv.org/abs/XXXX.XXXXX">
34
+ <img alt="arXiv" src="https://img.shields.io/badge/πŸ“„_arXiv-XXXX.XXXXX-b31b1b"></a>
35
+ <a href="https://github.com/Ephemeral182/GenEvolve">
36
+ <img alt="Code" src="https://img.shields.io/badge/πŸ’Ύ_GitHub-Code-181717"></a>
37
+ <a href="https://huggingface.co/datasets/MeiGen-AI/GenEvolve-Data">
38
+ <img alt="Dataset" src="https://img.shields.io/badge/πŸ€—_Dataset-GenEvolve--Data-FFD21E"></a>
39
+ </p>
40
+
41
+ <p>
42
+ <img alt="python" src="https://img.shields.io/badge/python-3.11-3776AB?logo=python&logoColor=white">
43
+ <img alt="pytorch" src="https://img.shields.io/badge/pytorch-2.8-EE4C2C?logo=pytorch&logoColor=white">
44
+ <img alt="vllm" src="https://img.shields.io/badge/vLLM-0.11-30A14E">
45
+ <img alt="cuda" src="https://img.shields.io/badge/CUDA-12.x-76B900?logo=nvidia&logoColor=white">
46
+ <img alt="license" src="https://img.shields.io/badge/license-Apache%202.0-green">
47
+ <img alt="status" src="https://img.shields.io/badge/status-active-brightgreen">
48
+ </p>
49
+
50
+ </div>
51
+
52
+ > **GenEvolve: Self-Evolving Image Generation Agents via Tool-Orchestrated Visual Experience Distillation**
53
+ > Sixiang Chen, Zhaohu Xing, Tian Ye, Xinyu Geng, Yunlong Lin, Jianyu Lai, Xuanhua He, Fuxiang Zhai, Jialin Gao, Lei Zhu
54
+ > *Submitted to NeurIPS 2026*
55
+
56
+ This repository hosts the **GenEvolve agent policy** β€” a Qwen3-VL-8B-Instruct backbone fine-tuned and self-evolved into a tool-orchestrated image-generation agent. Given a user request, the agent issues web/image searches, retrieves visual references, activates internal generation knowledge, and emits an executable **prompt-reference program** `z = (gen_prompt, reference_images)` that drives any reference-conditioned downstream generator (Qwen-Image-Edit, Nano Banana Pro, ...).
57
+
58
+ <div align="center">
59
+ <img src="assets/teaser.jpg" alt="GenEvolve teaser" width="100%">
60
+
61
+ <p><em>The same trained agent policy paired with two reference-conditioned generators ⟢<br>
62
+ <strong>Qwen-Image-Edit (open)</strong> &nbsp;Β·&nbsp; <strong>Nano Banana Pro (strong)</strong></em></p>
63
+ </div>
64
+
65
+ ---
66
+
67
+ ## ✨ TL;DR
68
+
69
+ - **Tool-orchestrated trajectories.** The agent calls `search`, `image_search`, and `query_knowledge` (8 callable generation skills) before producing a final program `z = (gen_prompt, reference_images)`.
70
+ - **Self-evolution = GRPO + Visual Experience Distillation.** Best-vs-worst trajectory pairs are summarized into a *decision guide* (retrieval-key + 6 imperative bullet lists). The teacher view sees the retrieved guide, the student does not β€” SDL distills the teacher's token-level preferences back into the deployed student. **No runtime memory at inference.**
71
+ - **Generator-transferable.** The same trained policy improves both an open-source generator (Qwen-Image-Edit-2511, KScore 0.299 β†’ 0.366) and a strong proprietary generator (Nano Banana Pro, 0.530 β†’ **0.574**).
72
+ - **Strong external generalization.** Achieves **0.82** WiScore on the WISE knowledge-intensive benchmark, beating GPT-4o (0.80) and all agentic baselines.
73
+
74
+ ---
75
+
76
+ ## πŸ“Š Headline Results
77
+
78
+ ### GenEvolve-Bench (KScore on the held-out split)
79
+
80
+ | Method | Generator | KScore | Knowledge-Anch. | Quality-Anch. |
81
+ |---|---|---:|---:|---:|
82
+ | Qwen-Image (raw) | Qwen-Image | 0.2987 | 0.2384 | 0.3768 |
83
+ | Nano Banana Pro (raw) | Nano Banana Pro | 0.5298 | 0.5160 | 0.5477 |
84
+ | Gen-Searcher 8B | Qwen-Image-Edit-2511 | 0.3493 | 0.3293 | 0.3745 |
85
+ | Gen-Searcher 8B | Nano Banana Pro | 0.5481 | 0.5472 | 0.5492 |
86
+ | **GenEvolve (Ours)** | Qwen-Image-Edit-2511 | **0.3663** | **0.3410** | **0.3990** |
87
+ | **GenEvolve (Ours)** | Nano Banana Pro | **0.5739** | **0.5669** | **0.5830** |
88
+
89
+ ### WISE Benchmark (WiScore, six knowledge categories)
90
+
91
+ | Model | Cultural | Time | Space | Biology | Physics | Chemistry | **Overall** |
92
+ |---|---:|---:|---:|---:|---:|---:|---:|
93
+ | GPT-4o | 0.81 | 0.71 | **0.89** | **0.83** | 0.79 | 0.74 | 0.80 |
94
+ | Gen-Searcher-8B + Qwen-Image | 0.80 | 0.71 | 0.82 | 0.76 | 0.74 | 0.75 | 0.77 |
95
+ | Mind-Brush | 0.83 | 0.69 | 0.84 | 0.71 | **0.85** | 0.68 | 0.78 |
96
+ | **GenEvolve + Qwen-Image-Edit** | **0.84** | 0.74 | 0.87 | **0.83** | 0.81 | **0.83** | **0.82** |
97
+
98
+ <div align="center">
99
+ <img src="assets/visual_comparison.png" alt="Visual comparison vs strong baselines" width="100%">
100
+
101
+ <p><em>Visual comparison on representative GenEvolve-Bench cases; <span style="color:#ea580c">orange</span> marks external/uncommon knowledge; <span style="color:#1f6feb">blue</span> marks internal generation-knowledge requirements.</em></p>
102
+ </div>
103
+
104
+ ---
105
+
106
+ ## 🧠 Method Overview
107
+
108
+ <p align="center"><img src="assets/overview.png" alt="GenEvolve method overview" width="92%"></p>
109
+
110
+ For a user request $x$, the agent samples a multi-turn trajectory
111
+
112
+ $$\tau = (a_1, o_1, \ldots, a_T, o_T, z), \qquad z = (g, R),$$
113
+
114
+ where each $a_t$ is one of three actions and $o_t$ is the corresponding observation. The downstream generator renders $\hat{y} = G(g, R)$.
115
+
116
+ | Tool | Role | Output |
117
+ |---|---|---|
118
+ | `search(queries)` | External textual evidence β€” entities, dates, facts | Markdown digest |
119
+ | `image_search(query)` | Visual references; each result is given a unique `IMG_###` id | Image list with local paths |
120
+ | `query_knowledge(skill_name)` | Internal generation knowledge β€” `spatial_layout`, `text_rendering`, `quantity_counting`, `attribute_binding`, `anatomy_body_coherence`, `physical_material_consistency`, `creative_drawing`, `aesthetic_drawing` | Skill markdown |
121
+
122
+ **Self-evolution (training-only).** For each prompt the agent samples 6 rollouts. The best/worst pair (with a sufficient reward gap) is summarized by a Gemini-3.1-Pro judge into a single bundle:
123
+
124
+ ```
125
+ retrieval_key: { trigger, source_prompt_summary }
126
+ decision_guidance:
127
+ decision_focus
128
+ recommended_tool_plan (1–4 imperative bullets)
129
+ search_query_guidance (1–3 bullets)
130
+ skill_routing_guidance (1–4 bullets)
131
+ reference_selection_guidance (1–3 bullets)
132
+ prompt_program_guidance (1–3 bullets)
133
+ failure_guards (1–3 bullets)
134
+ ```
135
+
136
+ Bundles are stored in a 500-entry rolling buffer keyed by `embed(trigger + source_prompt_summary)` (Qwen3-Embedding-0.6B) with a cosine retrieval gate of `0.84`. **Only the privileged teacher branch sees the retrieved guide** β€” the student is regularised toward that teacher with an importance-weighted reverse-KL on the same on-policy tokens (see paper Sec. 5 for the exact loss).
137
+
138
+ ---
139
+
140
+ ## πŸš€ Quick Start
141
+
142
+ The deployed checkpoint is the **student policy** β€” it consumes a user prompt and returns a JSON `gen_prompt + reference_images` program through a normal `<think>/<tool_call>/<answer>` loop.
143
+
144
+ ### Option 1 β€” full GenEvolve runtime (recommended)
145
+
146
+ The end-to-end runtime (vLLM/SGLang server + agent loop + tools + Qwen/Nano renderers) lives in the [GitHub repo](https://github.com/Ephemeral182/GenEvolve).
147
+
148
+ ```bash
149
+ git clone https://github.com/Ephemeral182/GenEvolve.git
150
+ cd GenEvolve
151
+ conda create -n genevolve python=3.11 -y && conda activate genevolve
152
+ pip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128
153
+ pip install --no-build-isolation -r requirements.txt && pip install -e .
154
+
155
+ # serve the policy (TP/DP knobs scale across GPUs)
156
+ MODEL_PATH=MeiGen-AI/GenEvolve PORT=8000 TP=1 DP=8 bash scripts/serve_vllm.sh
157
+
158
+ # end-to-end example
159
+ export SERPER_API_KEY=<your_key> # required for search / image_search
160
+ export GOOGLE_API_KEY=<your_key> # only for the Nano Banana Pro backend
161
+ python examples/quickstart.py \
162
+ --backend nano-banana-pro \
163
+ --base-url http://localhost:8000/v1 \
164
+ --model GenEvolve \
165
+ --prompt "A 1990s travel-magazine cover of two backpackers in front of the Eiffel Tower at golden hour, the title \"PARIS\" in bold serif." \
166
+ --output paris.png
167
+ ```
168
+
169
+ ### Option 2 β€” direct Transformers loading
170
+
171
+ ```python
172
+ from transformers import AutoModelForCausalLM, AutoProcessor
173
+ import torch
174
+
175
+ repo = "MeiGen-AI/GenEvolve"
176
+ model = AutoModelForCausalLM.from_pretrained(
177
+ repo, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True,
178
+ )
179
+ processor = AutoProcessor.from_pretrained(repo, trust_remote_code=True)
180
+
181
+ messages = [
182
+ {"role": "system", "content": SYSTEM_PROMPT}, # see GitHub repo
183
+ {"role": "user", "content": "A vintage diner sign that says 'BLUE SKY DINER' in red neon."},
184
+ ]
185
+ prompt_ids = processor.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
186
+ out = model.generate(prompt_ids, max_new_tokens=4096, temperature=0.7, top_p=0.95)
187
+ print(processor.decode(out[0], skip_special_tokens=True))
188
+ ```
189
+
190
+ ### Final-answer JSON
191
+
192
+ ```json
193
+ {
194
+ "gen_prompt": "...natural-language prompt that refers to images by 'the first reference image', ...",
195
+ "reference_images": [
196
+ {"img_id": "IMG_001", "note": "what to copy from this image"},
197
+ {"img_id": "IMG_004", "note": "what to copy from this image"}
198
+ ]
199
+ }
200
+ ```
201
+
202
+ `gen_prompt` MUST refer to selected images using ordinal phrases (`"the first reference image"`) β€” never raw `IMG_###` ids or URLs. `reference_images` is sorted by `img_id` ascending so that ordinals resolve unambiguously.
203
+
204
+ Pass `(gen_prompt, [r["local_path"] for r in reference_images])` to your favourite reference-conditioned generator (Qwen-Image-Edit, Nano Banana Pro, ...) to obtain the final image.
205
+
206
+ ---
207
+
208
+ ## πŸ—‚οΈ Related Artifacts
209
+
210
+ | Artifact | Link |
211
+ |---|---|
212
+ | Project page | https://ephemeral182.github.io/GenEvolve/ |
213
+ | Paper (arXiv) | https://arxiv.org/abs/XXXX.XXXXX |
214
+ | Code | https://github.com/Ephemeral182/GenEvolve |
215
+ | Training data + benchmark | [MeiGen-AI/GenEvolve-Data](https://huggingface.co/datasets/MeiGen-AI/GenEvolve-Data) |
216
+ | Base model | [Qwen/Qwen3-VL-8B-Instruct](https://huggingface.co/Qwen/Qwen3-VL-8B-Instruct) |
217
+
218
+ ---
219
+
220
+ ## 🧾 Training Recipe
221
+
222
+ | Stage | Recipe |
223
+ |---|---|
224
+ | **SFT cold start** | LLaMA-Factory, 2 epochs, 16 GPUs, micro-bsz=2, lr=1e-5 (cosine, warmup 0.02), bf16 + FlashAttention-2, ZeRO-3, vision tower frozen. |
225
+ | **Self-evolution** | rLLM/verl, GRPO + experience-conditioned SDL on 8 prompts Γ— 6 rollouts/step, lr=1e-6, Ξ΅_β„“=0.20, Ξ΅_h=0.28, 5 epochs over the RL split. |
226
+ | **Reward** | KScore image judge (Faithfulness 0.1 / Visual 0.4 / Text 0.4 / Aesthetics 0.1, Gemini 3.1 Pro Preview) + program-sufficiency text judge, weighted 0.5 / 0.5. |
227
+ | **SDL** | λ_SDL = 2.0, decision-only mask (`<tool_call>`/`<answer>`), top-10% logp-delta filter (`SDL_TOP_K_FRAC=0.1`), IS-cap ρ_max = 2, per-token clip disabled, `seq-mean-token-sum` aggregation. |
228
+ | **Visual experience memory** | 1 bundle / comparison (decision guide); cosine retrieval gate β‰₯ 0.84; buffer cap 500; Qwen3-Embedding-0.6B keys; teacher-only (no inference-time memory). |
229
+
230
+ Full hyper-parameters and ablations are in the appendix tables of the paper.
231
+
232
+ ---
233
+
234
+ ## βš–οΈ Intended Use, Limits, Bias
235
+
236
+ - **Intended use.** Research on tool-using image-generation agents, agentic prompt-program synthesis, and self-distillation from generated outcomes.
237
+ - **Out of scope.** The model produces a *prompt + reference list*, not pixels. Final image quality and safety are inherited from the downstream generator you pair it with. Do not use the agent to fabricate likenesses, infringing logos, or misleading factual imagery β€” apply your own content-safety filter on the generator side.
238
+ - **Search dependency.** The agent issues live web/image queries through user-provided tool wrappers. Quality of grounded facts depends on the search backend you plug in.
239
+ - **Bias.** Tool outputs and reference images come from public web search, which carries demographic, cultural, and geographic biases. The reward judges (Gemini 3.1 Pro Preview) are themselves models with their own biases, which may shape the post-RL policy.
240
+
241
+ ---
242
+
243
+ ## πŸ“‘ Citation
244
+
245
+ ```bibtex
246
+ @inproceedings{chen2026genevolve,
247
+ title = {GenEvolve: Self-Evolving Image Generation Agents via Tool-Orchestrated Visual Experience Distillation},
248
+ author = {Chen, Sixiang and Xing, Zhaohu and Ye, Tian and Geng, Xinyu and Lin, Yunlong
249
+ and Lai, Jianyu and He, Xuanhua and Zhai, Fuxiang and Gao, Jialin and Zhu, Lei},
250
+ booktitle = {Submitted to Conference on Neural Information Processing Systems (NeurIPS)},
251
+ year = {2026}
252
+ }
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 🀝 Acknowledgements
258
+
259
+ We thank the Qwen, Gemini, FLUX, Z-Image, and BAGEL teams for the underlying generators we evaluate against, and the Skill-SD / Gen-Searcher / KnowGen / WISE authors for the open recipes and benchmarks our work builds on.
260
+
261
+ For questions or collaboration, please reach out to [Sixiang Chen](mailto:ephemeral182@gmail.com) or open an issue on the [GitHub repo](https://github.com/Ephemeral182/GenEvolve/issues).
assets/logo_genevolve.png ADDED

Git LFS Details

  • SHA256: 937af6d53037398be182085542b6f4efb5adb49a2081f8e887b31e95021875e0
  • Pointer size: 131 Bytes
  • Size of remote file: 756 kB
assets/overview.png ADDED

Git LFS Details

  • SHA256: 1179b59f6ad60bec0db7fb10b6e1d63757a4348fcdbb63b1f4aa722bcb482e86
  • Pointer size: 131 Bytes
  • Size of remote file: 312 kB
assets/teaser.jpg ADDED

Git LFS Details

  • SHA256: 8dbaa1a01e86af20c5d56db60ca4e438302bfd919e45aac66e14d586a316b1dc
  • Pointer size: 132 Bytes
  • Size of remote file: 2.04 MB
assets/visual_comparison.png ADDED

Git LFS Details

  • SHA256: 953413f9e05cb90e5ff6b616896e0a6f8e2fbb4cb03d3c288f5c72af336da4db
  • Pointer size: 132 Bytes
  • Size of remote file: 9.86 MB