File size: 6,844 Bytes
2bfbeb7
0213535
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Pocket Diffusion</title>
<style>
:root { color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui; }
* { box-sizing: border-box; }
body { margin: 0; min-height: 100vh; background: #060817; color: #edf4ff; }
canvas { position: fixed; inset: 0; width: 100%; height: 100%; opacity: .55; }
main { position: relative; z-index: 1; width: min(1080px, 92vw); margin: auto;
  padding: 72px 0 96px; }
.eyebrow { color: #73e6ff; letter-spacing: .18em; text-transform: uppercase;
  font-size: .75rem; font-weight: 800; }
h1 { font-size: clamp(3rem, 8vw, 7rem); line-height: .9; margin: 14px 0 24px;
  background: linear-gradient(120deg,#fff,#74e7ff 55%,#b48cff);
  -webkit-background-clip: text; color: transparent; }
.lead { max-width: 760px; color: #b8c7e6; font-size: 1.2rem; line-height: 1.65; }
.actions { display: flex; flex-wrap: wrap; gap: 12px; margin: 30px 0 48px; }
a { color: inherit; }
.button { padding: 12px 18px; border-radius: 999px; text-decoration: none;
  background: #eaf8ff; color: #07101c; font-weight: 800; }
.button.alt { background: #171d38cc; color: #dce8ff; border: 1px solid #415078; }
.grid { display: grid; grid-template-columns: 1.1fr .9fr; gap: 20px; }
.card { border: 1px solid #344269; background: #0c1128dd; border-radius: 24px;
  padding: 24px; backdrop-filter: blur(18px); box-shadow: 0 24px 80px #0008; }
h2 { margin-top: 0; }
pre { white-space: pre-wrap; word-break: break-word; color: #a9bddf;
  max-height: 520px; overflow: auto; }
ul { max-height: 520px; overflow: auto; padding-left: 1.2rem; color: #a9bddf; }
li { margin: 8px 0; }
input { width: 100%; padding: 12px; border-radius: 12px; border: 1px solid #344269;
  background: #070b1a; color: white; margin-bottom: 12px; }
@media (max-width: 780px) { .grid { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<canvas id="field"></canvas>
<main>
  <div class="eyebrow">Jacob Garcia · Hugging Face Model Foundry</div>
  <h1>Pocket Diffusion</h1>
  <p class="lead">Interactive classifier-free guided digit diffusion. This showcase backs up the
  trained artifacts, measured evaluation, and complete runnable source.</p>
  <div class="actions">
    <a class="button" href="https://huggingface.co/spaces/ARotting/pocket-diffusion/tree/main">Explore every file</a>
    <a class="button alt" href="https://huggingface.co/ARotting">View the full foundry</a>
  </div>
  <div class="grid">
    <section class="card">
      <h2>Verified project card</h2>
      <pre># PocketDiffusion

PocketDiffusion is a compact class-conditional denoising diffusion model for 8x8
handwritten digits. It learns to predict Gaussian noise over 50 diffusion steps and
uses classifier-free guidance during sampling.

The same frozen Tiny Vision classifier used for GlyphForge evaluates conditional
recognizability, making the VAE and diffusion results directly comparable under one
judge.

## Reproduce

```powershell
uv run python projects/tiny-vision-foundry/prepare_data.py
uv run python projects/pocket-diffusion/train.py
```

## Verified results

- Parameters: **55,608**
- Diffusion steps: **50**
- Training epochs: **300**
- Generated samples: **1,000**
- Selected classifier-free guidance: **3.0**
- Frozen-judge class fidelity: **96.20%**

Guidance search improved fidelity monotonically from 46.10% at `1.0` to 96.20% at
`3.0`. Per-class fidelity ranged from 83% for digit `8` to 100% for digits `0` and
`6`. Mean within-class pixel variance ranged from 0.0209 to 0.0456, noticeably higher
than the CVAE&#x27;s 0.0066 to 0.0168 range under the same 100-samples-per-class protocol.
</pre>
      <h2>Evaluation snapshot</h2>
      <pre>{
  &quot;model&quot;: &quot;PocketDiffusion&quot;,
  &quot;parameters&quot;: 55608,
  &quot;diffusion_steps&quot;: 50,
  &quot;epochs&quot;: 300,
  &quot;guidance_search&quot;: {
    &quot;1.0&quot;: 0.460999995470047,
    &quot;1.5&quot;: 0.7149999737739563,
    &quot;2.0&quot;: 0.8560000061988831,
    &quot;2.5&quot;: 0.9359999895095825,
    &quot;3.0&quot;: 0.9620000123977661
  },
  &quot;generation&quot;: {
    &quot;judge_accuracy&quot;: 0.9620000123977661,
    &quot;judge_accuracy_by_class&quot;: {
      &quot;0&quot;: 1.0,
      &quot;1&quot;: 0.9200000166893005,
      &quot;2&quot;: 0.9900000095367432,
      &quot;3&quot;: 0.9800000190734863,
      &quot;4&quot;: 0.9599999785423279,
      &quot;5&quot;: 0.9800000190734863,
      &quot;6&quot;: 1.0,
      &quot;7&quot;: 0.9900000095367432,
      &quot;8&quot;: 0.8299999833106995,
      &quot;9&quot;: 0.9700000286102295
    },
    &quot;mean_pixel_variance_by_class&quot;: {
      &quot;0&quot;: 0.020940322428941727,
      &quot;1&quot;: 0.03187673166394234,
      &quot;2&quot;: 0.03836727514863014,
      &quot;3&quot;: 0.03142565116286278,
      &quot;4&quot;: 0.04158321022987366,
      &quot;5&quot;: 0.034002821892499924,
      &quot;6&quot;: 0.022990796715021133,
      &quot;7&quot;: 0.036991652101278305,
      &quot;8&quot;: 0.04558330774307251,
      &quot;9&quot;: 0.03457583114504814
    },
    &quot;samples&quot;: 1000,
    &quot;guidance&quot;: 3.0
  },
  &quot;judge&quot;: &quot;Tiny Vision labels-only student, 98.52% real-image test accuracy&quot;
}</pre>
    </section>
    <section class="card">
      <h2>Backed-up artifact tree</h2>
      <input id="filter" placeholder="Filter files…" autocomplete="off">
      <ul id="files"><li><code>README.md</code></li>
<li><code>__pycache__/app.cpython-311.pyc</code></li>
<li><code>__pycache__/model.cpython-311.pyc</code></li>
<li><code>app.py</code></li>
<li><code>artifacts/pocket-diffusion/evaluation.json</code></li>
<li><code>artifacts/pocket-diffusion/model.safetensors</code></li>
<li><code>artifacts/pocket-diffusion/samples.png</code></li>
<li><code>model.py</code></li>
<li><code>requirements.txt</code></li>
<li><code>train.py</code></li></ul>
    </section>
  </div>
</main>
<script>
const canvas=document.querySelector('#field'),ctx=canvas.getContext('2d');
let dots=[];
function resize(){canvas.width=innerWidth;canvas.height=innerHeight;
dots=Array.from({length:90},()=>({x:Math.random()*innerWidth,
y:Math.random()*innerHeight,vx:(Math.random()-.5)*.35,vy:(Math.random()-.5)*.35}));}
function draw(){ctx.clearRect(0,0,canvas.width,canvas.height);
for(const d of dots){d.x=(d.x+d.vx+innerWidth)%innerWidth;
d.y=(d.y+d.vy+innerHeight)%innerHeight;ctx.fillStyle='#65dcff99';
ctx.beginPath();ctx.arc(d.x,d.y,1.4,0,7);ctx.fill();}requestAnimationFrame(draw);}
addEventListener('resize',resize);resize();draw();
document.querySelector('#filter').addEventListener('input',e=>{
const q=e.target.value.toLowerCase();for(const li of document.querySelectorAll('li'))
li.hidden=!li.textContent.toLowerCase().includes(q);});
</script>
</body>
</html>