n4ze3m's picture
yatm v2: 60000 steps, 1.93M params
288e5aa verified
|
Raw History Blame Contribute Delete
3.15 kB
---
license: cc-by-4.0
tags:
- diffusion
- ddpm
- ddim
- onnx
- quickdraw
- image-generation
library_name: onnx
pipeline_tag: unconditional-image-generation
datasets:
- quickdraw
---
# You Are the Model - Quick, Draw! diffusion
A tiny class-conditional diffusion model that draws 32x32 doodles, small enough
to run a full 25-step DDIM sample in the browser.
It powers **You Are the Model**, a daily drawing puzzle where the player takes
over the denoising loop: at each round you pick which noise prediction to apply,
your choice is fed back into the real sampler, and a bad pick genuinely derails
the drawing.
## Model
| | |
|---|---|
| Architecture | class-conditional U-Net, epsilon prediction |
| Parameters | 1,929,313 (7.7 MB fp32) |
| Resolution | 32x32 grayscale, values in [-1, 1] |
| Classes | 24 (+1 null class for classifier-free guidance) |
| Noise schedule | cosine, 1000 train timesteps |
| Sampler | DDIM, 25 steps, guidance 3.0 |
| Trained | 60,000 steps, batch 256, AdamW, EMA 0.9995, bf16 |
| Hardware | NVIDIA GeForce RTX 3090, 1.23 h, about $0.167 |
### Classes
`fish`, `flower`, `house`, `sailboat`, `smiley face`, `star`, `umbrella`, `envelope`, `t-shirt`, `ice cream`, `apple`, `banana`, `ladder`, `lightning`, `mountain`, `pants`, `wine glass`, `eyeglasses`, `snowman`, `car`, `hand`, `crown`, `donut`, `camera`
## Files
| File | Purpose |
|---|---|
| `yatm_v2.onnx` | the browser asset - opset 17, dynamic batch |
| `yatm_v2.meta.json` | class list, sampler settings, parity numbers |
| `yatm_v2.abar.json` | cosine alpha-bar table, so the JS sampler matches exactly |
| `ema.pt` | EMA weights (PyTorch) |
| `samples.png` | fixed-seed sample sheet, one row per class |
| `eval.json` | classifier gate and guidance sweep |
| `metrics.jsonl` | training and validation curves |
| `config.resolved.json` | the exact resolved config and environment |
## Inputs and outputs
```
x: float32 [batch, 1, 32, 32] noisy latent
t: int64 [batch] timestep, 0..999
y: int64 [batch] class index, or 24 for unconditional
-> eps: float32 [batch, 1, 32, 32]
```
Classifier-free guidance: run the batch twice (class and null) and combine with
`eps = eps_null + w * (eps_class - eps_null)`.
## Evaluation
A held-out CNN classifier (95.9% accurate on real test drawings) labels **100.0%** of fixed-seed samples as the class they were conditioned on, at the best guidance scale of 3.0. Weakest class: `fish` at 100.0%.
Python and ONNX Runtime agree to `8.3e-02` maximum absolute difference over
a full 25-step sample, so the browser and the training code produce the
same picture from the same seed.
## Dataset and attribution
Trained on the [Google Quick, Draw!](https://github.com/googlecreativelab/quickdraw-dataset)
dataset (`numpy_bitmap` 28x28 drawings, padded to 32x32), which is released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) by Google Creative Lab.
12,000 drawings per class were downloaded, filtered for empty and
over-inked drawings and exact duplicates, then split deterministically.
This model is released under the same CC BY 4.0 licence.