Demo 03 — On-chip learning and "Why recognised?"
Teach the card a part from ten photos in seconds, recognise it, and see which learned photo made the decision.
Needs: Pi 5, one or more cards (Demo 00), one camera, the service running (guide chapter 07), a part — an SD card is the classic.
What actually happens on the chip
The Pi frees the part from the belt (local belt model, edge silhouette, glare filter), uprights it and renders a 48 × 48 two-channel binary silhouette. That goes into a single Akida FullyConnected layer compiled with AkidaUnsupervised: the layer stores prototypes — one neuron per learned view — instead of adjusting weights by gradient descent. Learning one example costs about 2 ms on the AKD1500. With three cards, card i receives every third view (offset i), so the ensemble holds three times the views per object; recognition takes the best match over all cards.
Confidence is the share of the stored pattern found again (potential / num_weights), not a softmax share — a clean, free-lying part reaches > 90 %.
Run — in the UI
- Set up → Objects & learning → New object "SD card".
- Put the card in the learning window. Take photo (space bar) — repeat for 5–10 poses; or Series while you rotate it slowly.
Each photo is checked at once: the column shows sharpness and area ("Letztes Foto in Ordnung · Schärfe 30.9, Fläche 68 %"). An empty crop is refused — the poison guard.
- Add a second object (a carabiner) the same way. Optional: a negative class with a real foreign part (never a photo of empty belt).
- Train → Chip learning.
Output we got (2026-09-20, 3 objects):
Schritt 3 von 3 · 0.3 s, "79 Beispiele aus 3 Objekten". If the negative class contained empty photos, the dialog says so: "7 von 25 Fotos der Negativklasse … zeigen nur leeren Hintergrund und wurden NICHT gelernt". - Operation → Recognition. Place the SD card.
The summary shows GOOD · SD card · confidence; under it Why recognised?: the live crop next to the learned photo that won, "Neuron 3 · Card 2". Move the card to another pose — the winning photo changes.
Under the hood, if you want to see it
vorsa_daten/ now contains one .fbz per card and a companion JSON with the class list, the fingerprint of the photo set, the hole signature per class (carabiner: hole; SD card: none) and the neuron map (neuron → learned photo) that powers "Why recognised?". The learned state carries a version number; an older state is relearned automatically at start instead of being misread.
Proves
Few-shot learning on the accelerator in seconds; explainability without a second model; the ensemble across cards.
Does not prove
Recognition under lighting you have not learned, or across belt speeds — prototype learning knows exactly the views it was shown. Add poses, not epochs.
Failure modes
Everything "unknown" → threshold too high, or empty negatives poisoned the class (delete them, relearn). Labels recognised instead of the card → record the empty belt (guide 8.3) and check the zone edge. "Karte N antwortet nicht" → Demo 00 recovery. Photos coming from the image centre instead of the window → the learning-zone view was open (fixed in 1.9.37: zones only when the view is open).
Time: 15 minutes including photos.
