|
Download README.md from bench-labs/pixelmodel-v1: direct link, hf CLI and curl.
- Browser
- Download file 6.95 kB
-
https://huggingface.co/bench-labs/pixelmodel-v1/resolve/main/README.md
- Command line
-
hf download hf://bench-labs/pixelmodel-v1/README.md
-
curl -L -o README.md https://huggingface.co/bench-labs/pixelmodel-v1/resolve/main/README.md
6.95 kB
| license: mit | |
| pipeline_tag: text-to-image | |
| language: | |
| - en | |
| tags: | |
| - image | |
| - t2i | |
| - text-to-image | |
| - custom-code | |
| - tiny | |
| model-index: | |
| - name: PixelModel-v1 | |
| results: | |
| - task: | |
| type: text-to-image | |
| dataset: | |
| name: fid | |
| type: fid | |
| metrics: | |
| - name: fid | |
| type: fid | |
| value: 439.46 | |
| - task: | |
| type: text-to-image | |
| dataset: | |
| name: clip | |
| type: clip | |
| metrics: | |
| - name: clip | |
| type: clip | |
| value: 0.2002 | |
| new_version: bench-labs/PixelModel-v2 | |
| <table align="center"> | |
| <tr> | |
| <td align="center"> | |
| <a href="https://huggingface.co/spaces/bench-labs/BenchLabs-Leaderboard">π BenchLabs Leaderboard</a> β’ | |
| <a href="https://huggingface.co/spaces/FlameF0X/Tiny-T2I-Leaderboard">π Tiny-T2I Leaderboard</a> β’ | |
| <a href="https://huggingface.co/spaces/bench-labs/blog?post=pixelmodel-v1.html">π Blog Post</a> | |
| </td> | |
| </tr> | |
| </table> | |
| # PixelModel v1 πΌοΈ | |
| <img src="model.png" alt="The entire PixelModel v1: a 160x149 PNG containing all 23,747 weights" style="image-rendering: pixelated; width: 320px; max-width: 100%;"> | |
| A neural network where the weights **are** the image. Now the model is a thumbnail. | |
| ## π What is this? | |
| `model.png` is not a picture β it *is* the model. | |
| Every pixel encodes neural network weights. At inference, the PNG is decoded | |
| into weight matrices, the prompt is hashed into an embedding, and a | |
| coordinate-conditioned decoder paints an image β at **any resolution**. | |
| [v0](https://huggingface.co/bench-labs/pixelmodel) was a 202,752-parameter MLP | |
| welded to 32Γ32 output, trained on 6 color swatches. v1 is **8.5Γ smaller | |
| (23,747 parameters)**, renders at any resolution (native 64Γ64), and is trained | |
| on ~20K real MS-COCO caption/image pairs. | |
| # cherry on top π | |
| The model generates 600 images (cpu) in 5 (five) seconds. | |
| Thats 5000 images in 24 seconds on cpu. | |
| The model trained on cpu for just 30 minutes. | |
| ## π v0 β v1 | |
| | | v0 | v1 | | |
| |---|---|---| | |
| | Parameters | 202,752 | **23,747** | | |
| | `model.png` | 64Γ3200 px | **160Γ149 px** (a thumbnail) | | |
| | Output head | 1 weight row per pixel (196K params, 97% of model) | CPPN decoder on (x, y) β resolution-free | | |
| | Resolution | fixed 32Γ32 | any; native 64Γ64 | | |
| | Prompt embedding | char-sum (order-blind, collision-heavy) | hashed trigrams + words (FNV-1a), still 0 params | | |
| | Biases | none | yes | | |
| | Weight precision | 8-bit (G channel wasted) | **16-bit** (R=high byte, G=low byte) | | |
| | Training data | 6 solid-color swatches | ~20K MS-COCO caption/image pairs | | |
| <img src="pixelmodel-v1-loss.png" alt="Training loss curve crossing below both naive-predictor baselines" style="width: 100%; max-width: 720px;"> | |
| ## π¨ Weight Encoding | |
| Each pixel stores one weight at 16-bit precision, mapped from [-2, 2]: | |
| - **R channel** β high byte | |
| - **G channel** β low byte | |
| - **B channel** β reserved | |
| Round-trip quantization error β 3Γ10β»β΅ per weight. | |
| ## π§ Architecture | |
| ```text | |
| prompt string | |
| β hashed char-trigram + word embedding (64-dim, deterministic, 0 params) | |
| β T1 (80Γ64)+b β tanh | |
| β T2 (64Γ80)+b β tanh = latent z (64) | |
| for every pixel (x, y): | |
| concat(z, fourier features of (x, y)) β 18 coord dims, freqs 1/2/4/8 | |
| β D1 (80Γ82)+b β tanh | |
| β D2 (80Γ80)+b β tanh | |
| β D3 (3Γ80)+b β sigmoid = RGB | |
| ``` | |
| Because pixels are decoded from coordinates, parameter count is independent of | |
| resolution β `--res 256` works with the same 23,747 weights. | |
| All weights live inside `model.png` (160Γ149 px). | |
| ## π¦ Standard weights (safetensors) | |
| `model.png` is the canonical model β training writes to it directly. For | |
| tooling that expects standard weight files, the same 10 tensors are exported as | |
| `model.safetensors` (23,747 parameters total): | |
| ```bash | |
| python convert_to_safetensors.py # model.png -> model.safetensors | |
| ``` | |
| Parameter count is verifiable without running code: `config.json` | |
| (`total_parameters: 23747`, full per-layer breakdown) and the safetensors | |
| header metadata (`total_parameters`, `param_breakdown`, `has_bias`, | |
| `text_encoder_parameters: 0`, `vae_parameters: 0`). | |
| ## π Benchmark results | |
| Measured per the [Tiny-T2I-Leaderboard](https://huggingface.co/spaces/FlameF0X/Tiny-T2I-Leaderboard) protocol β see `eval.md` for full method and `EVAL_REPRODUCTION.md` to re-run: | |
| | Metric | v0 | v1 | Tooling | | |
| |---|---|---|---| | |
| | FID β | 566.84 (n=40) | **439.46** (n=5000) | `torchmetrics.image.fid.FrechetInceptionDistance` | | |
| | CLIP Score β | 18.60 (n=40) | **20.02** (n=5000) | `torchmetrics.multimodal.CLIPScore`, `openai/clip-vit-base-patch32` | | |
| | Native resolution | 32Γ32 | 64Γ64 | | | |
| Real set: MS-COCO val2014 pairs from `sayakpaul/coco-30-val-2014` (256Γ256 | |
| center-crop). Training images are hash-checked to be disjoint from the eval | |
| images. | |
| Expectation management: a 23K-parameter model does not draw recognizable | |
| objects. It learns caption-conditioned color, layout, and texture statistics of | |
| COCO photos β the outputs are blurry impressions, not pictures. The point is | |
| the size:quality ratio and the PNG-as-model gimmick, executed honestly. | |
| <img src="pixelmodel-v1-probe.png" alt="Target photos vs model outputs: the model produces caption-conditioned color washes" style="width: 100%; max-width: 640px;"> | |
| ## βοΈ Usage | |
| ```bash | |
| # training data (COCO subset) | |
| python fetch_coco_subset.py --out ../pm-work | |
| # train (writes model.png every epoch) | |
| python train.py --data ../pm-work/coco_train.npz --epochs 50 | |
| # inference from model.png (canonical) | |
| python main.py "a red double decker bus" --out bus.png | |
| # inference from model.safetensors (standalone, needs only this one file + torch) | |
| python convert_to_safetensors.py | |
| python INFERENCE.py "a red double decker bus" --out bus.png | |
| # any resolution from the same 23,747 weights | |
| python main.py "a beach with palm trees" --res 256 --scale 1 | |
| # benchmark eval | |
| python eval/run_eval.py --work ../pm-work --model model.png --n 5000 | |
| ``` | |
| `main.py` and `INFERENCE.py` produce identical output for the same prompt and | |
| resolution. | |
| ## π Files | |
| ```text | |
| model.png β THE MODEL (160Γ149 px) | |
| model.safetensors β same weights, standard format + param metadata | |
| config.json β architecture + parameter-count metadata | |
| main.py β inference, loads model.png | |
| INFERENCE.py β inference, loads model.safetensors (standalone) | |
| convert_to_safetensors.py β model.png -> model.safetensors | |
| train.py β training | |
| model.py β architecture + PNG weight codec | |
| fetch_coco_subset.py β builds train/eval data from COCO | |
| eval/run_eval.py β FID + CLIP Score via torchmetrics | |
| eval.md β benchmark results + method | |
| EVAL_REPRODUCTION.md β step-by-step reproduction guide | |
| ``` | |
| --- | |
| *Still a toy. Slightly less useless. The model is literally a thumbnail.* | |
| Bench Labs Β· Simple, Reliable, Open sourced |