Independent developer project · not affiliated with, endorsed by, or sponsored by BrainChip Holdings Ltd. Akida and AKD1500 are their trademarks.

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.

OUR OBSERVATIONEvent 2026-09-20Published 2026-09-27SE Inspect build 1.9.37

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

  1. Set up → Objects & learning → New object "SD card".
  2. 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.

  3. Add a second object (a carabiner) the same way. Optional: a negative class with a real foreign part (never a photo of empty belt).
  4. 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".

  5. 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.