Demo 01 — Virtual mapping and the M3 head logic
List every model variant without a card, and prove that the M3 head keeps three overlapping objects where standard NMS deletes two.
Needs: laptop, repository, numpy. No Akida needed for either script.
Part A — the variants
python3 tools/check_single_pass.py --list
Output we got (excerpt, the chosen variant):
Variante V6-256px-fein Eingang (256, 256, 3) InputConvolutional f=32 k=(5, 5) s=(2, 2) pool=None act=True w8/a4 SeparableConvolutional f=64 k=(3, 3) s=(2, 2) pool=None act=True w4/a4 SeparableConvolutional f=128 k=(3, 3) s=(2, 2) pool=None act=True w4/a4 SeparableConvolutional f=256 k=(3, 3) s=(1, 1) pool=None act=True w4/a4 Convolutional f=51 k=(1, 1) s=(1, 1) pool=None act=False w4/a4 M3-Kopf: 32x32x51 = 3 Slots x (8 + 8 Klassen) + 3 feldweite Werte Slot: obj, tx, ty, tw, th, sin2t, cos2t, vis, 8 Klassen feldweit: local_count, overlap_prob, local_overflow_prob Feldgroesse im Bild: 8 pxRead it like this: five layers, all from the Akida 1.0 set (InputConvolutional,SeparableConvolutional,Convolutional); weights 4 bit, activations 4 bit (w4/a4), 8-bit input layer; 51 output channels = 3 slots × (8 box/angle/visibility values + 8 classes) + 3 per-cell values. V2-M1 and V2-M2 are the comparison heads with one and two slots (19 and 35 channels).
Part B — the head logic
python3 tools/test_m3_head.py
Output we got:
Kopf: 14x14x51 = 3 Slots x (8 + 8) + 3
dekodiert: 9 Treffer, 3 auffaellige Felder
nach Soft-NMS mit Feldschutz: 8 Treffer
zum Vergleich, Standard-NMS ohne Feldschutz: 4 Treffer
[OK ] Stelle A: 3 lokal ueberlagerte Objekte getrennt erhalten (erhalten: 3)
Rahmen-IoU der beiden staerksten: 0.84 (> 0.55 -> Standard-NMS haette geloescht)
Slot 0 Klasse 0 score 0.90 Sichtbarkeit 0.95 FREE
Slot 1 Klasse 1 score 0.85 Sichtbarkeit 0.60 PARTIAL
Slot 2 Klasse 2 score 0.80 Sichtbarkeit 0.35 PARTIAL
[OK ] Stellen B und C unabhaengig verarbeitet (B: 2, C: 3)
[OK ] Ueberfuellung an Stelle C gemeldet
Feld (11, 11): local_count 5.0, overflow 0.92, ausgegeben 3
-> lokale Kapazitaet vermutlich ueberschritten -> zusaetzliche Information anfordern
[OK ] Duplikat aus Nachbarfeld zusammengefasst (uebrig: 0)
[OK ] Gegenprobe: ohne Feldschutz gehen 4 Objekte verloren
[OK ] Zuordnung reihenfolgeunabhaengig: Slot->Objekt [1, 0, 2], Kosten 0.200
Slot 0 hat das zweite Objekt bekommen - genau das soll moeglich sein.
[OK ] Zielgitter (14, 14, 51), 3 belegte Felder
[OK ] Zielgitter markiert Ueberfuellung bei 5 Objekten in einem Feld (1 Feld(er))
GESAMT: OK
What the lines mean: at position A three objects overlap with box IoU 0.84 between the strongest two; standard NMS would keep one, the slot-aware Soft-NMS keeps all three because they come from different slots of the same cell. At position C five objects were placed but the cell can only describe three, so the head reports overflow 0.92 instead of pretending. The assignment line shows that slot 0 was matched to the second object — slots have no fixed meaning, the matching is found per training step over all permutations.
Proves
The output structure and the post-processing do what the design claims, independent of any trained weights.
Does not prove
That a trained model produces such outputs on real images (Evidence → Limitations, point 1).
Failure modes
None expected; the script has no dependencies beyond numpy. A FAIL line here would be a regression in vorsa/postprocess.py or vorsa/assignment.py.
Time: 3 minutes.
