Image-Text-to-Text
Transformers
Safetensors
English
qwen3_vl
agent
image-generation
tool-use
visual-reasoning
self-distillation
grpo
reinforcement-learning
multimodal
qwen3-vl
conversational
Instructions to use MeiGen-AI/GenEvolve with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use MeiGen-AI/GenEvolve with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="MeiGen-AI/GenEvolve") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForImageTextToText processor = AutoProcessor.from_pretrained("MeiGen-AI/GenEvolve") model = AutoModelForImageTextToText.from_pretrained("MeiGen-AI/GenEvolve") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps
- vLLM
How to use MeiGen-AI/GenEvolve with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "MeiGen-AI/GenEvolve" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "MeiGen-AI/GenEvolve", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/MeiGen-AI/GenEvolve
- SGLang
How to use MeiGen-AI/GenEvolve with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "MeiGen-AI/GenEvolve" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "MeiGen-AI/GenEvolve", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "MeiGen-AI/GenEvolve" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "MeiGen-AI/GenEvolve", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use MeiGen-AI/GenEvolve with Docker Model Runner:
docker model run hf.co/MeiGen-AI/GenEvolve
Add model card README + figures
Browse files- .gitattributes +4 -0
- README.md +258 -0
- assets/logo_genevolve.png +3 -0
- assets/overview.png +3 -0
- assets/teaser.jpg +3 -0
- assets/visual_comparison.png +3 -0
.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> Β· <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
|
assets/overview.png
ADDED
|
Git LFS Details
|
assets/teaser.jpg
ADDED
|
Git LFS Details
|
assets/visual_comparison.png
ADDED
|
Git LFS Details
|