Card: plan-then-paint concept figure with real thinker plans, full benchmark for 5 models, references, energy update
Browse files- .gitattributes +1 -0
- README.md +67 -7
- assets/concept.png +3 -0
- assets/judge_detail.png +2 -2
- assets/pareto.png +2 -2
- assets/qib.png +2 -2
.gitattributes
CHANGED
|
@@ -48,3 +48,4 @@ assets/pareto.png filter=lfs diff=lfs merge=lfs -text
|
|
| 48 |
assets/dashboard.png filter=lfs diff=lfs merge=lfs -text
|
| 49 |
assets/loss.png filter=lfs diff=lfs merge=lfs -text
|
| 50 |
assets/hero_samples.png filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 48 |
assets/dashboard.png filter=lfs diff=lfs merge=lfs -text
|
| 49 |
assets/loss.png filter=lfs diff=lfs merge=lfs -text
|
| 50 |
assets/hero_samples.png filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
assets/concept.png filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -37,7 +37,7 @@ Built by [LogoLabs](https://logolabs.org), which makes AI logo generation, as a
|
|
| 37 |
| **What** | Text-to-image, 256 × 256, English prompts |
|
| 38 |
| **Size** | 260M parameters with TAESD, 308.5M with SD-VAE: 190.9M generator + 68.1M text encoder + decoder |
|
| 39 |
| **Training** | From scratch, 144.7 GH200-hours, under 13 h wall-clock, 146.9M images seen (≈26 epochs) |
|
| 40 |
-
| **Energy** | 81.8 kWh and 2.45 kg CO₂e for Agate;
|
| 41 |
| **GenEval** (official) | **0.550**. SDXL 0.55, SD 2.1 0.50, PixArt-α 0.48, SD 1.5 0.43 (published) |
|
| 42 |
| **Qwen-Image-Bench** (1,000 prompts) | **28.2**, against SD 1.5's 29.1; on the Pareto frontier among open models of similar size |
|
| 43 |
| **Speed** | 1.9 s per image on an RTX 4060 (50 steps); also runs in the browser: [WebGPU demo](https://huggingface.co/spaces/Logolabs/agate-webgpu) |
|
|
@@ -61,11 +61,37 @@ Built by [LogoLabs](https://logolabs.org), which makes AI logo generation, as a
|
|
| 61 |
- **Licence:** MIT, for the code and the weights.
|
| 62 |
|
| 63 |
|
| 64 |
-
**Jump to:** [Quick start](#quick-start) · [Why Agate](#why-agate) · [Results](#results) ·
|
| 65 |
[Side by side](#side-by-side) · [Test battery](#manual-test-battery) · [How it works](#how-agate-works) ·
|
| 66 |
[Training](#training) · [Safety](#training-data-and-safety) · [Energy](#compute-and-energy) ·
|
| 67 |
[Failures](#what-went-wrong-along-the-way) · [Acknowledgements](#acknowledgements)
|
| 68 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
## Quick start
|
| 70 |
|
| 71 |
```bash
|
|
@@ -153,8 +179,9 @@ its native 512 px; Agate and Supra2-IMG render at 256 px.
|
|
| 153 |
<p align="center"><img src="assets/geneval_lineage.png" alt="GenEval overall for every model in the lineage" width="100%"></p>
|
| 154 |
|
| 155 |
The official [GenEval](https://github.com/djghosh13/geneval) pipeline (Mask2Former object detector + CLIP colour
|
| 156 |
-
classifier) on all 553 prompts.
|
| 157 |
-
benchmark's full four images per
|
|
|
|
| 158 |
|
| 159 |
| | Single | Two obj. | Counting | Colours | Position | Colour attr. | **Overall** |
|
| 160 |
|---|---|---|---|---|---|---|---|
|
|
@@ -217,6 +244,9 @@ and aggregation code, greedy decoding, thinking on.
|
|
| 217 |
|---|---|---|---|---|---|---|---|---|---|
|
| 218 |
| [**Agate**](https://huggingface.co/Logolabs/agate-preview-001) | 191M + 68M text enc. | 256 px | MIT | **28.2** | 25.9 | 33.8 | 28.2 | 36.6 | 14.7 |
|
| 219 |
| [Stable Diffusion 1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) | 860M UNet + 123M CLIP | 512 px | CreativeML OpenRAIL-M | **29.1** | 36.7 | 28.0 | 25.7 | 38.9 | 15.5 |
|
|
|
|
|
|
|
|
|
|
| 220 |
|
| 221 |
**Every model, 300 evenly spaced prompts:**
|
| 222 |
|
|
@@ -443,12 +473,12 @@ so the totals are a floor.
|
|
| 443 |
| **T40r phase 2 (joint Ettin training, to epoch 16)** | 1 | 37.1 | 18.8 | 0.56 |
|
| 444 |
| **T40r caption phase (2 nodes, 8 h, cosine anneal)** | 1 | 60.3 | 35.2 | 1.06 |
|
| 445 |
| T40r caption phase, two failed starts | 2 | 3.5 | 0.5 | 0.02 |
|
| 446 |
-
| Evaluations, smoke tests, benchmarks |
|
| 447 |
-
| **Whole text-to-image project** |
|
| 448 |
|
| 449 |
Agate itself cost **144.7 GH200-hours, 81.8 kWh and 2.45 kg CO₂e**, or 156.0 GPU-hours counting its
|
| 450 |
diverged first try and two failed starts. The whole project, dead ends, evaluations and benchmarks included, cost
|
| 451 |
-
|
| 452 |
|
| 453 |
## What went wrong along the way
|
| 454 |
|
|
@@ -524,6 +554,36 @@ Thanks also to:
|
|
| 524 |
| [**Inkvec Super-Resolution**](https://huggingface.co/Logolabs/inkvec-sr-001) | 4× upscaling for logos and icons, fine-tuned MambaIRv2-Small. |
|
| 525 |
| [**LogoBrief-10K**](https://huggingface.co/datasets/Logolabs/LogoBrief-10K) | 10,000 brand logos with SVGs, design briefs and style tags, opt-out audited before publication. |
|
| 526 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 527 |
## Citation
|
| 528 |
|
| 529 |
```bibtex
|
|
|
|
| 37 |
| **What** | Text-to-image, 256 × 256, English prompts |
|
| 38 |
| **Size** | 260M parameters with TAESD, 308.5M with SD-VAE: 190.9M generator + 68.1M text encoder + decoder |
|
| 39 |
| **Training** | From scratch, 144.7 GH200-hours, under 13 h wall-clock, 146.9M images seen (≈26 epochs) |
|
| 40 |
+
| **Energy** | 81.8 kWh and 2.45 kg CO₂e for Agate; 176.7 kWh for the whole project, measured with perun |
|
| 41 |
| **GenEval** (official) | **0.550**. SDXL 0.55, SD 2.1 0.50, PixArt-α 0.48, SD 1.5 0.43 (published) |
|
| 42 |
| **Qwen-Image-Bench** (1,000 prompts) | **28.2**, against SD 1.5's 29.1; on the Pareto frontier among open models of similar size |
|
| 43 |
| **Speed** | 1.9 s per image on an RTX 4060 (50 steps); also runs in the browser: [WebGPU demo](https://huggingface.co/spaces/Logolabs/agate-webgpu) |
|
|
|
|
| 61 |
- **Licence:** MIT, for the code and the weights.
|
| 62 |
|
| 63 |
|
| 64 |
+
**Jump to:** [The idea](#the-idea-plan-then-paint) · [Quick start](#quick-start) · [Why Agate](#why-agate) · [Results](#results) ·
|
| 65 |
[Side by side](#side-by-side) · [Test battery](#manual-test-battery) · [How it works](#how-agate-works) ·
|
| 66 |
[Training](#training) · [Safety](#training-data-and-safety) · [Energy](#compute-and-energy) ·
|
| 67 |
[Failures](#what-went-wrong-along-the-way) · [Acknowledgements](#acknowledgements)
|
| 68 |
|
| 69 |
+
## The idea: plan, then paint
|
| 70 |
+
|
| 71 |
+
<p align="center"><img src="assets/concept.png" alt="Plan, then paint: the thinker plans the layout on a 16 by 16 grid, the convolutional renderer paints it; real captured plans and the evidence that the split works" width="100%"></p>
|
| 72 |
+
|
| 73 |
+
Agate's central design choice is to split image generation between two specialists.
|
| 74 |
+
|
| 75 |
+
- **The thinker is a transformer.** It sees the whole noisy canvas at once. It is told how far denoising has
|
| 76 |
+
come, and it cross-attends to up to 512 text tokens, so it can pick out what matters in a long prompt. It knows
|
| 77 |
+
2D positions, so "left of" and "above" are real relations. It thinks in four loops, then writes a 16 × 16
|
| 78 |
+
*plan* of regions in latent space.
|
| 79 |
+
- **The renderer is a convolutional U-Net built on FCDM.** Its 7 × 7 convolutions carry strong image priors:
|
| 80 |
+
edges, textures, light. It stays cheap at full resolution. It has no attention and never sees the text. It
|
| 81 |
+
only follows the plan.
|
| 82 |
+
|
| 83 |
+
Convolutions paint well but cannot reason about a sentence or relate one side of the image to the other.
|
| 84 |
+
Transformers reason well but are expensive and prior-poor at pixel level. So Agate plans with attention where
|
| 85 |
+
planning happens, on a coarse grid, and paints with convolutions.
|
| 86 |
+
|
| 87 |
+
The hypothesis held, and the figure shows the evidence:
|
| 88 |
+
- At the same size and epoch, adding the thinker raised GenEval and Qwen-Image-Bench and lowered the loss.
|
| 89 |
+
- Making the planner recurrent and 2D-aware lifted position and colour binding.
|
| 90 |
+
- The finished model binds colours to objects far better than a 1B model whose renderer reads the text directly.
|
| 91 |
+
|
| 92 |
+
The plans above are real: we captured the thinker's output while Agate generated. The layout is already visible
|
| 93 |
+
at step 5 of 50.
|
| 94 |
+
|
| 95 |
## Quick start
|
| 96 |
|
| 97 |
```bash
|
|
|
|
| 179 |
<p align="center"><img src="assets/geneval_lineage.png" alt="GenEval overall for every model in the lineage" width="100%"></p>
|
| 180 |
|
| 181 |
The official [GenEval](https://github.com/djghosh13/geneval) pipeline (Mask2Former object detector + CLIP colour
|
| 182 |
+
classifier) on all 553 prompts. We scored **every model**: all our checkpoints, SD 1.5 and Supra2-IMG, one image per
|
| 183 |
+
prompt (the chart above and the table below). Agate's headline number uses the benchmark's full four images per
|
| 184 |
+
prompt (2,212 images). The four-image run for every other model is in progress and will be added here:
|
| 185 |
|
| 186 |
| | Single | Two obj. | Counting | Colours | Position | Colour attr. | **Overall** |
|
| 187 |
|---|---|---|---|---|---|---|---|
|
|
|
|
| 244 |
|---|---|---|---|---|---|---|---|---|---|
|
| 245 |
| [**Agate**](https://huggingface.co/Logolabs/agate-preview-001) | 191M + 68M text enc. | 256 px | MIT | **28.2** | 25.9 | 33.8 | 28.2 | 36.6 | 14.7 |
|
| 246 |
| [Stable Diffusion 1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) | 860M UNet + 123M CLIP | 512 px | CreativeML OpenRAIL-M | **29.1** | 36.7 | 28.0 | 25.7 | 38.9 | 15.5 |
|
| 247 |
+
| [HobbyLM-Image](https://huggingface.co/rootxhacker/HobbyLM-Image) | 334M DiT + CLIP-L | 1024 px | Apache-2.0 | **24.0** | 31.5 | 26.0 | 18.1 | 34.7 | 8.7 |
|
| 248 |
+
| [TinyDiT-256](https://huggingface.co/ivanmikhnenkov/tinydit-256) | 209M DiT + Flan-T5-base | 256 px | CC BY-NC 4.0 | **26.0** | 22.3 | 30.2 | 27.8 | 37.2 | 12.7 |
|
| 249 |
+
| [Supra2-IMG](https://huggingface.co/SupraLabs/Supra2-IMG) | 104M DiT + Flan-T5-base | 256 px | Apache-2.0 | **17.8** | 12.7 | 23.5 | 16.5 | 33.3 | 5.9 |
|
| 250 |
|
| 251 |
**Every model, 300 evenly spaced prompts:**
|
| 252 |
|
|
|
|
| 473 |
| **T40r phase 2 (joint Ettin training, to epoch 16)** | 1 | 37.1 | 18.8 | 0.56 |
|
| 474 |
| **T40r caption phase (2 nodes, 8 h, cosine anneal)** | 1 | 60.3 | 35.2 | 1.06 |
|
| 475 |
| T40r caption phase, two failed starts | 2 | 3.5 | 0.5 | 0.02 |
|
| 476 |
+
| Evaluations, smoke tests, benchmarks | 44 | 30.4 | 11.4 | 0.34 |
|
| 477 |
+
| **Whole text-to-image project** | 80 | **325.0** | **176.7** | **5.30** |
|
| 478 |
|
| 479 |
Agate itself cost **144.7 GH200-hours, 81.8 kWh and 2.45 kg CO₂e**, or 156.0 GPU-hours counting its
|
| 480 |
diverged first try and two failed starts. The whole project, dead ends, evaluations and benchmarks included, cost
|
| 481 |
+
325.0 GPU-hours and 5.30 kg CO₂e.
|
| 482 |
|
| 483 |
## What went wrong along the way
|
| 484 |
|
|
|
|
| 554 |
| [**Inkvec Super-Resolution**](https://huggingface.co/Logolabs/inkvec-sr-001) | 4× upscaling for logos and icons, fine-tuned MambaIRv2-Small. |
|
| 555 |
| [**LogoBrief-10K**](https://huggingface.co/datasets/Logolabs/LogoBrief-10K) | 10,000 brand logos with SVGs, design briefs and style tags, opt-out audited before publication. |
|
| 556 |
|
| 557 |
+
## References
|
| 558 |
+
|
| 559 |
+
Architecture and training:
|
| 560 |
+
- Kwon et al., *Reviving ConvNeXt for Efficient Convolutional Diffusion Models* (FCDM), [arXiv:2603.09408](https://arxiv.org/abs/2603.09408): the renderer's block and U-Net.
|
| 561 |
+
- Liu et al., *A ConvNet for the 2020s*, [arXiv:2201.03545](https://arxiv.org/abs/2201.03545); Woo et al., *ConvNeXt V2* (GRN), [arXiv:2301.00808](https://arxiv.org/abs/2301.00808).
|
| 562 |
+
- Jabri et al., *Scalable Adaptive Computation for Iterative Generation* (RIN), [arXiv:2212.11972](https://arxiv.org/abs/2212.11972); Jaegle et al., *Perceiver* / *Perceiver IO*, [arXiv:2103.03206](https://arxiv.org/abs/2103.03206), [arXiv:2107.14795](https://arxiv.org/abs/2107.14795): latent cells that read the image.
|
| 563 |
+
- Geiping et al., *Scaling up Test-Time Compute with Latent Reasoning: A Recurrent Depth Approach*, [arXiv:2502.05171](https://arxiv.org/abs/2502.05171): the thinker's looped core.
|
| 564 |
+
- Su et al., *RoFormer* (RoPE), [arXiv:2104.09864](https://arxiv.org/abs/2104.09864); Henry et al., *Query-Key Normalization*, [arXiv:2010.04245](https://arxiv.org/abs/2010.04245); Wortsman et al., *Small-scale proxies for large-scale Transformer training instabilities*, [arXiv:2309.14322](https://arxiv.org/abs/2309.14322).
|
| 565 |
+
- Perez et al., *FiLM*, [arXiv:1709.07871](https://arxiv.org/abs/1709.07871); Park et al., *SPADE*, [arXiv:1903.07291](https://arxiv.org/abs/1903.07291): per-region steering.
|
| 566 |
+
- Zhang et al., *ControlNet*, [arXiv:2302.05543](https://arxiv.org/abs/2302.05543): zero-initialised growth.
|
| 567 |
+
- Liu et al., *Rectified Flow*, [arXiv:2209.03003](https://arxiv.org/abs/2209.03003); Lipman et al., *Flow Matching*, [arXiv:2210.02747](https://arxiv.org/abs/2210.02747); Esser et al., *SD3*, [arXiv:2403.03206](https://arxiv.org/abs/2403.03206).
|
| 568 |
+
- Ho & Salimans, *Classifier-Free Guidance*, [arXiv:2207.12598](https://arxiv.org/abs/2207.12598); Karras et al., *Guiding a Diffusion Model with a Bad Version of Itself* (autoguidance), [arXiv:2406.02507](https://arxiv.org/abs/2406.02507).
|
| 569 |
+
- Weller et al., *Ettin* (Seq vs Seq), [arXiv:2507.11412](https://arxiv.org/abs/2507.11412); Warner et al., *ModernBERT*, [arXiv:2412.13663](https://arxiv.org/abs/2412.13663).
|
| 570 |
+
- Rombach et al., *Latent Diffusion*, [arXiv:2112.10752](https://arxiv.org/abs/2112.10752); SD-VAE-ft-MSE; TAESD.
|
| 571 |
+
- Loshchilov & Hutter, *AdamW*, [arXiv:1711.05101](https://arxiv.org/abs/1711.05101); Kumar et al., *Fine-Tuning can Distort Pretrained Features* (LP-FT), [arXiv:2202.10054](https://arxiv.org/abs/2202.10054).
|
| 572 |
+
|
| 573 |
+
Data and evaluation:
|
| 574 |
+
- Fang et al., *FLUX-Reason-6M & PRISM-Bench*, [arXiv:2509.09680](https://arxiv.org/abs/2509.09680).
|
| 575 |
+
- Ghosh et al., *GenEval*, [arXiv:2310.11513](https://arxiv.org/abs/2310.11513); Cheng et al., *Mask2Former*, [arXiv:2112.01527](https://arxiv.org/abs/2112.01527); Radford et al., *CLIP*, [arXiv:2103.00020](https://arxiv.org/abs/2103.00020).
|
| 576 |
+
- Li et al., *Qwen-Image-Bench*, [arXiv:2605.28091](https://arxiv.org/abs/2605.28091); Kwon et al., *vLLM*, [arXiv:2309.06180](https://arxiv.org/abs/2309.06180).
|
| 577 |
+
- Heusel et al., *FID*, [arXiv:1706.08500](https://arxiv.org/abs/1706.08500); Stein et al., *FD-DINOv2*, [arXiv:2306.04675](https://arxiv.org/abs/2306.04675); Oquab et al., *DINOv2*, [arXiv:2304.07193](https://arxiv.org/abs/2304.07193).
|
| 578 |
+
- Gutiérrez Hermosillo Muriedas et al., *perun*, Euro-Par 2023.
|
| 579 |
+
|
| 580 |
+
Compared and related models:
|
| 581 |
+
- Podell et al., *SDXL*, [arXiv:2307.01952](https://arxiv.org/abs/2307.01952); Chen et al., *PixArt-α*, [arXiv:2310.00426](https://arxiv.org/abs/2310.00426) and *PixArt-Σ*, [arXiv:2403.04692](https://arxiv.org/abs/2403.04692); Bai et al., *Meissonic*, [arXiv:2410.08261](https://arxiv.org/abs/2410.08261).
|
| 582 |
+
- Xie et al., *SANA*, [arXiv:2410.10629](https://arxiv.org/abs/2410.10629); Sehwag et al., *MicroDiT*, [arXiv:2407.15811](https://arxiv.org/abs/2407.15811); Pernias et al., *Würstchen*, [arXiv:2306.00637](https://arxiv.org/abs/2306.00637); Hu et al., *SnapGen*, [arXiv:2412.09619](https://arxiv.org/abs/2412.09619).
|
| 583 |
+
- [Supra2-IMG](https://huggingface.co/SupraLabs/Supra2-IMG), [TinyDiT-256](https://huggingface.co/ivanmikhnenkov/tinydit-256), [HobbyLM-Image](https://huggingface.co/rootxhacker/HobbyLM-Image).
|
| 584 |
+
|
| 585 |
+
The technical report cites 119 works in full.
|
| 586 |
+
|
| 587 |
## Citation
|
| 588 |
|
| 589 |
```bibtex
|
assets/concept.png
ADDED
|
Git LFS Details
|
assets/judge_detail.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
assets/pareto.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
assets/qib.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|