Fallstudie · Anomalieerkennung ohne Grafikkarte
Auf diesem Bild ist ein Fehler.
Ein Verfahren, das noch nie einen Fehler gesehen hat, soll ihn finden — auf einer CPU von 2019, ohne Grafikkarte.
Das Ergebnis, bevor die Herleitung beginnt
Vier Zahlen.
- Auffälligkeitswert, Kapseln
- 0,7050 [0,6220, 0,7787] → 0,9562 [0,9225, 0,9823]
- von 100 Fehlern gefunden
- 44 → 93
- gerechnet auf
- AMD Ryzen 9 3900 von 2019, zwölf Kerne, keine Grafikkarte
- Defektbilder im Training
- keines · 434 fehlerfreie
Was die Hauptzahl bedeutet — einmal erklärt
Nimm ein fehlerfreies Teil und ein fehlerhaftes, beide zufällig gegriffen. Wie oft gibt das System dem fehlerhaften den höheren Wert? Bei 0,9562 sind es 95,6 von 100 Mal. Und die eckigen Klammern sagen, wie stark das Ergebnis geschwankt hätte, wenn wir andere Bilder erwischt hätten: breit heißt, die Stichprobe war klein; schmal heißt, darauf ist Verlass. Weil die beiden Klammern sich nicht berühren — 0,7787 gegen 0,9225 —, ist der Unterschied belegt und nicht Zufall.
Neben jeder Messzahl steht auf dieser Seite die Betriebszahl. 0,9562 heißt: von 100 Fehlern fangen wir 93, vorher waren es 44 — bei derselben Schwellenregel, die allein aus fehlerfreien Bildern bestimmt wurde. Im Betrieb sind das 141,5 Alarme je 1000 Teile statt 1000, also 86 % weniger Handprüfung.
Was in diesem Bericht wie gekennzeichnet ist
- Was wir gemessen haben — mit Intervall, Datum und Quelldatei.
- Was wir vermutet und widerlegt haben — sieben eigene Irrtümer, mit Namen daneben.
- Was wir aus der Literatur übernehmen — gekennzeichnet, nie als eigene Messung.
- Was wir nicht gemessen haben — und deshalb nicht behaupten.
Der Bericht in vierzehn Abschnitten
- 01 Ausgangslage
- 02 Zuerst die Daten
- 03 Die ersten Modelle
- 03b Was der Aufbau kostet
- 04 Der Confound
- 05 Die Blockade
- 06 Die Referenzhöhe
- 07 Zwei verworfene Wege
- 08 Die Zerlegung
- 09 Eigene Fehler
- 10 Das Ergebnis
- 11 Im Betrieb
- 11b Auslieferung
- 12 Der Prüfpfad
- 13 Was das nicht ist
- 14 Der Übergang
01 — Ausgangslage
Die Bedingungen standen fest, bevor die erste Zahl entstand.
- RechentechnikAMD Ryzen 9 3900 (2019), zwölf Kerne, zehn Fäden — keine Grafikkarte
- Fremdlastdurchgehend rund vier Kerne belegt; dieselbe Rechnung schwankt um rund 20 %
- Fehlerbeispielekein einziges Defektbild im Training
- DatenVisA (Amazon Science), CC BY 4.0 — Archiv 1.929.840.640 Bytes mit geprüfter Prüfsumme
- Aufbereitung
spot-diff, Commit2a692ab5,prepare_data.py --split-type 1cls - Saaten12345 Bootstrap · 42 Splits, Coreset, Modell · 20260817 Cluster
- Protokollfestgeschrieben, bevor die erste Zahl entstand
Der Umfang, damit die Intervalle einzuordnen sind
Bei den Kapseln stehen 542 fehlerfreie Trainingsbilder zur Verfügung. 434 gehen in die Vergleichsbank, 108 werden zurückgehalten und dienen ausschließlich dazu, die Grenze zu bestimmen, ab der ein Teil als auffällig gilt. Geprüft wird gegen 160 Testbilder — 60 fehlerfrei, 100 fehlerhaft. Nach der Zerlegung werden daraus 3164 Einzelobjekte, im Median 20 je Bild, Spanne 14 bis 27. Wer diese Zahlen kennt, weiß, wie viel eine Zahl auf dieser Seite wiegt.
Geht das überhaupt — oder braucht Bildprüfung zwingend teure Hardware und beschriftete Fehler?
Vier Produkte werden geprüft: Kapseln, Cashewkerne, Leiterplatten und Snack-Röhrchen. Die Antwort ist am Ende nicht eine Zahl, sondern der Weg zu ihr — einschließlich der beiden Wege, die nichts gebracht haben.
02 — Zuerst die Daten, nicht das Modell
Vier Befunde, bevor ein Modell gerechnet wurde.
Wer mit dem Modell anfängt, misst am Ende die Daten und weiß es nicht. Also zuerst vierzehn Prüfungen an den Bildern selbst. Die meisten davon ohne Befund.
Die Kapseln sind auf fünf unabhängigen Achsen die saubere Klasse
160 Bilder in 160 Gruppen, kleinster Abstand 10 bei einer Schwelle von 4 — kein einziges Paar von 12.720 liegt darunter. Dazu der größte Abstand zum Trainingsmaterial (0,0275 gegen 0,0012 bei den Leiterplatten), fünf gleich große Falten von exakt 32 Bildern, praktisch keine Empfindlichkeit gegen den Schätzer (0,9358 / 0,9358 / 0,9357) und keine Strafe, wenn statt nach Datei nach Szene geteilt wird: −0,9 Punkte, also Rauschen. Die Klasse, auf der die ganze Erzählung ruht, ist die einzige ohne jedes dieser Probleme. Und sie ist gleichzeitig die schwerste — publiziert 0,741, die schlechteste der zwölf.
Die Leiterplatten sind nicht unabhängig voneinander
Die Aufnahmen liegen in zwei Lagen. Alle 214 fehlerfreien Bilder der zweiten Lage stehen im Nummernblock 610–832; von den 781 Bildern außerhalb dieses Blocks keines. Der Registrierungsrest nach Ausrichtung beträgt in Lage A im Median 3,3 px, in Lage B 12,2 px (p = 1,7 · 10⁻⁶⁶). Und teilt man nach Szene statt nach Datei, kostet das 5,2 Punkte (0,9929 → 0,9408) — bei allen anderen Klassen unter einem Punkt.
Was daraus nicht folgt: dass die Bilder der zweiten Lage aus einer eigenen Aufnahmesitzung stammen. VisA trägt keine EXIF-Daten — null von 1104 Dateien. Die Nummerierung ist damit vereinbar, mehr nicht. Die Beschriftungen stammen unverändert aus dem offiziellen Split: es ist eine Eigenschaft des Datensatzes wie veröffentlicht, kein Fehler unseres Aufbaus.
Der Duplikatverdacht war unbegründet — und das berichten wir genauso laut
Unsere Sorge war, dass sich Bilder innerhalb einer Klasse so stark gleichen, dass die veröffentlichten Intervalle zu eng geraten. Geprüft mit Bildhashes. Ergebnis: der mittlere Abstand innerhalb einer Gruppe liegt beim Doppelten der Schwelle — Leiterplatten 8, Cashewkerne 12, Snack-Röhrchen 10 bei einer Schwelle von 4. Die Gruppen entstehen über Ketten, die Mehrheit der Paare ist nur mittelbar verbunden. Sie messen damit, wie starr die Aufnahmeszene ist, nicht Duplizität. Die veröffentlichten VisA-Intervalle sind nicht pauschal zu eng. Der befürchtete Großbefund tritt nicht ein. Es ist der zweite Verdacht, den wir selbst zurückziehen mussten.
Acht Dateistämme kollidieren, 142 Dateien werden überschrieben
Zwischen den Teilmengen gibt es Dateinamen, die zweimal vorkommen. Wer Zwischenergebnisse über den Namen zusammenführt, überschreibt sich Werte — 142 Dateien wären betroffen. Daraus wurde die Regel: niemals über den Dateinamen verknüpfen. Wir haben sie aufgeschrieben, und in Abschnitt 09 werden wir sie selbst brechen.
Wie das gemessen wurde — vierzehn Prüfungen, die meisten ohne Befund
Prüfliste vollständig, mit Nullbefunden. Der größte Teil der Datenarbeit erzeugt kein Ergebnis, sondern die Erlaubnis, weiterzurechnen.
| Klasse | größte Gruppe | Median im Cluster | Anteil ≤ 4 |
|---|---|---|---|
| Leiterplatten | 107 von 200 | 8 | 15,25 % |
| Cashewkerne | 112 von 150 | 12 | 10,31 % |
| Snack-Röhrchen | 58 von 150 | 10 | 13,13 % |
| Kapseln | 1 | — | — |
Ein systematischer Helligkeitsversatz zwischen fehlerfreien und fehlerhaften Aufnahmen hätte jedes Ergebnis erklärt, ohne dass ein Verfahren etwas erkennt. Er ist nicht vorhanden.
03 — Die ersten Modelle
Vier Produkte, ein Verfahren, ein Durchlauf.
Drei landen dort, wo die Literatur sie erwartet. Eines nicht — und dieses eine trägt den Rest der Seite.
Der ganze Vergleich ist unterhalb von drei Punkten blind
Bei 100 fehlerfreien und 100 fehlerhaften Testbildern liegt das Intervall eines Werts um 0,95 bei rund ±3 Punkten. Zwei Verfahren sind je Produkt erst ab vier bis fünf Punkten Unterschied überhaupt trennbar. Das gilt je Klasse — nicht für den Mittelwert über zwölf Klassen, mit dem Ranglisten üblicherweise arbeiten. Auf Klassenebene liegen die meisten veröffentlichten Abstände dichter zusammen als die Messunsicherheit. Und es ist der Grund, warum die 24 Punkte bei den Kapseln später etwas bedeuten: sie liegen weit außerhalb dieser Blindzone.
Was das Rechnen kostet — und wie genau diese Zeiten sind
Ein Bild zu beurteilen kostet im Median 181,4 ms (Cashewkerne), 192,0 ms (Snack-Röhrchen), 213,4 ms (Kapseln) und 321,3 ms (Leiterplatten) — im Auslieferungsformat, das 2,2- bis 2,4-mal schneller ist als die Entwicklungsfassung und dieselben Zahlen liefert. Bei den Kapseln in der Endkonfiguration werden daraus 6,618 Sekunden, weil dort jedes der rund zwanzig Objekte einzeln bewertet wird. Alle Zeitangaben auf dieser Seite entstanden auf einer Maschine, die durchgehend mit Fremdlast lief: dieselbe Rechnung schwankt um rund 20 %. Das steht hier einmal und gilt danach für jede Zeit im Bericht.
Wie das gemessen wurde — Bootstrap, 1000 geschichtete Ziehungen
Die Intervalle entstehen durch wiederholtes Ziehen aus den Testbildern, geschichtet nach fehlerfrei und fehlerhaft, 1000 Ziehungen, Saat 12345, Perzentilgrenzen. Ob eine Abweichung echt ist oder Rauschen, ist damit keine Frage der Einschätzung mehr.
Für die Leiterplatten wird durchgehend die szenen-geteilte Variante berichtet (0,9408) und nicht die datei-geteilte (0,9929). Die datei-geteilte Zahl ist höher, weil ähnliche Aufnahmen dann auf beiden Seiten der Trennung liegen. Wir nennen die niedrigere, weil sie die betrieblich richtige ist.
Und die Frage, die uns dabei am häufigsten gestellt wird: wie viele Fehlerbilder man eigentlich bräuchte. 434 fehlerfreie Bilder ohne ein einziges Fehlerbeispiel ergeben 0,7050; zehn Fehlerbilder ergeben 0,8906; fünfzig ergeben 0,9306. Die Warnung gehört dazu: bei zehn Beispielen lag die Spanne zwischen 0,43 und 0,97. Ausführlich in der Auskopplung Wie viele Defektbilder man wirklich braucht.
03b — Was der Aufbau kostet
Der Aufbau ist die Rechenarbeit, nicht die Prüfung.
Einmal je Produkt wird eine Vergleichsbank gebaut. Das ist der teure Teil: 1427,2 Sekunden für die Kapseln (434 Bilder, 199,4 MB, 34.025 Zeilen) und 4159,6 Sekunden für die Leiterplatten (724 Bilder, 332,6 MB). Danach kostet die Prüfung eines Bildes Millisekunden. Im Betrieb belegt eine Bank 3,4 bis 6,4 GB Arbeitsspeicher; bei 128 GB liegen damit rund zwanzig Produkttypen gleichzeitig bereit. Der Aufbau wächst quadratisch — bei 2000 Bildern grob das Sechsfache.
Die Auswahl der Vergleichsmuster selbst haben wir über eine algebraische Umformung neu geschrieben: der Abstand wird nicht als Ganzes gebildet, sondern aus zwei Längen und einem Skalarprodukt.
‖x−c‖² = ‖x‖² + ‖c‖² − 2·x·c
Der Teil, auf den es ankommt: es wurde nicht behauptet, sondern bewiesen. Beide Fassungen liefen auf denselben Daten, und die Auswahlreihenfolgen wurden Element für Element verglichen. Zwei Quelldateien nennen für denselben Bankbau Zeiten, die um bis zu 24 % auseinanderliegen — dieselbe Größe, anderer Lauf, belegte Maschine. Wir berichten durchgehend die eine festgelegte Quelle und erklären die Schwankung einmal, statt die günstigere Zahl zu nehmen. Der Messbalken bleibt hier unberührt: dieser Abschnitt kostet Zeit, keine Genauigkeit.
04 — Der Confound
Die Leiterplatten verraten sich selbst.
Zwei Bilder, beide fehlerfrei. Sie unterscheiden sich nur in der Lage, in der sie aufgenommen wurden. Was ein Verfahren daraus machen kann, ist der eigentliche Befund dieses Abschnitts.
0,8366ein Detektor, der nur die Bildlage kennt
Diesen Wert erreicht ein Detektor, der nichts kennt außer der Bildlage. Kein Merkmal des Bauteils, keine Lötstelle, kein Kratzer — nur die Frage, wie das Teil auf dem Tisch lag. In der einen Lage sind 4 von 72 Bildern fehlerhaft, in der anderen 96 von 128; rein rechnerisch käme ein reiner Lage-Klassifikator damit auf (0,96 + 0,68)/2 = 0,82. Wer diese Verteilung lernt, sieht aus wie ein Prüfsystem und ist keines. Das Intervall lautet [0,7763, 0,8935] — und ein zweites, unabhängiges Verfahren liegt mit 0,8403 [0,7807, 0,8964] praktisch deckungsgleich darauf.
Was das Verfahren trotzdem leistet: es liegt mit [0,9080, 0,9683] ohne Überlappung über dem Lage-Detektor. Es liest also nicht nur die Lage ab. Beides gehört zusammen berichtet, sonst ist die Zahl entweder wertlos oder überhöht.
Das Bild aus dem Alltag dazu: eine Klausur, bei der die richtigen Antworten zufällig meist auf der rechten Seite stehen. Wer nur „rechts ankreuzen“ kann, kommt auf 84 Prozent — und weiß nichts. Deshalb steht in diesem Bericht kein Wert für die Leiterplatten, der nicht gegen die Bildlage kontrolliert ist.
Wie das gemessen wurde — Phasenkorrelation und Rangsummentest
Die Lage jedes Bildes wurde über Phasenkorrelation gegen eine Bezugsaufnahme bestimmt, die Trennung der beiden Gruppen mit einem Rangsummentest geprüft. Zusätzlich als Gegenprobe ein zweites Verfahren auf denselben Daten, damit der Befund nicht am Verfahren hängt.
05 — Die Blockade
Bei den Kapseln kommt auch die Literatur nicht weiter.
0,7050 bei uns, 0,741 im veröffentlichten Vergleich. Die Differenz liegt innerhalb der Messunsicherheit — es ist also nicht unser Modell, das hier scheitert, sondern der Ansatz.
Die schwerste Klasse ist die einzige ohne Datenprobleme
Es wäre bequem, den schlechten Wert den Daten zuzuschreiben. Genau das geht hier nicht: die Kapseln haben keine Gruppen ähnlicher Bilder, den größten Abstand zum Trainingsmaterial, fünf gleich große Falten und keine Strafe durch die Szenen-Teilung. Eine Vorprüfung, die Fehlergröße gegen Kontrast rechnete, haben wir aufgestellt und wieder gestrichen — sie war durch die Daten nicht gedeckt. Was übrig bleibt, ist unbequem: an den Daten liegt es nicht.
Bevor man ein Verfahren verbessert, muss man wissen, ob es überhaupt etwas zu verbessern gibt.
Wie das gemessen wurde — Fehlergrößen über drei Größenordnungen
Die Fehlerfläche wurde je Bild aus den Umrissen bestimmt und über alle Produkte verglichen. Die Spanne reicht über drei Größenordnungen. Eine daraus abgeleitete Vorprüfung „Fläche mal Kontrast“ haben wir wieder zurückgezogen: sie hat in den Daten nicht gehalten. Die Abbildung bleibt, weil die Spanne selbst die Aufgabe beschreibt.
06 — Die Referenzhöhe
Steckt die Information überhaupt im Bild?
Bevor man ein besseres Mikroskop kauft, prüft man, ob die Sache mit einem guten überhaupt zu sehen ist. Genau diese Prüfung ist die Achse der ganzen Erzählung.
0,7050 Verfahrensarbeit 0,9357
Die Antwort ist keine Meinung, sondern eine Messung: ein kleiner überwachter Klassifikator auf eingefrorenen Merkmalen, die Falten nach Bildähnlichkeit getrennt statt nach Datei. Er erreicht 0,9357 [0,8882, 0,9733]. Damit ist bewiesen, dass die Information in den Aufnahmen steckt. Zwischen 0,7050 und 0,9357 liegt kein Datenproblem. Da liegt Arbeit.
Vier Klassen liegen auf der Diagonalen, zwei weit darunter
Trägt man den unüberwachten Wert gegen diese Schranke auf, liegen Snack-Röhrchen, Leiterplatten und Cashewkerne praktisch auf der Diagonalen: dort holt das Verfahren heraus, was in den Bildern steckt, und mehr ist nicht zu erwarten. Zwei liegen weit darunter — die Kapseln um 23 Punkte, die Makkaroni um 39. Und beide werden am Ende durch dieselbe Maßnahme geholt. Die Schranke sagt nicht, dass ein Verfahren schlecht ist. Sie sagt, wo Arbeit noch etwas bringt.
Und der Satz, der die Labelfrage beendet
Dieselbe Schranke, auf objektscharfen Merkmalen gerechnet, liegt bei 0,9642 [0,9471, 0,9812]. Das Endergebnis ohne ein einziges Fehlerbeispiel liegt bei 0,9562 — die Intervalle überlappen. Auf Ganzbild-Merkmalen kaufen beschriftete Beispiele 24 Punkte. Auf objektscharfen Merkmalen kaufen sie nichts mehr. Die bessere Repräsentation hat den Vorsprung der Labels aufgebraucht.
Wie das gemessen wurde — Fassung (c), gepoolt und cluster-geteilt
Die obere Schranke wird aus den out-of-fold-Vorhersagen aller Falten gebildet — gepoolt, 1000 geschichtete Ziehungen, Saat 12345, Perzentilgrenzen, Teilung nach Bildähnlichkeit statt nach Datei. Ein Mittel über die Falten wäre falsch gewesen: bei drei von vier Klassen sind die Falten entartet, eine Falte mit einem Bild wöge dann so viel wie eine mit 117, und die Näherung liefert Obergrenzen über 1,0. Bei den Snack-Röhrchen ist die Schranke nicht bestimmbar: 1,0000 ohne beobachteten Fehler bei 150 Bildern; die Obergrenze der Fehlerrate liegt dann näherungsweise bei 3/n. Wir weisen sie nicht als [1,0000, 1,0000] aus — ein Intervall der Breite null wäre auf einer Seite, die überall Intervalle setzt, ein Widerspruch.
| Klasse | unüberwacht | Referenzhöhe (c) | Abstand |
|---|---|---|---|
| Snack-Röhrchen | 0,9956 | 1,0000 | +0,004 |
| Leiterplatten | 0,9410 | 0,9408 [0,9087, 0,9676] | −0,000 |
| Cashewkerne | 0,9588 | 0,9836 [0,9492, 0,9992] | +0,025 |
| Kapseln | 0,7050 | 0,9357 [0,8882, 0,9733] | +0,231 |
| Makkaroni (Entwicklung) | 0,5787 | 0,9711 [0,9498, 0,9867] | +0,392 |
Offenzulegen: Die Schranke ist eine logistische Regression mit 3072 Merkmalen auf 150 bis 200 Bildern, C = 1,0, L2, Standardisierung je Falte. Nur die Kreuzvalidierung bindet sie. Und die gepoolten Wahrscheinlichkeiten stammen aus fünf verschiedenen Modellen und sind zwischen den Falten nicht kalibriert. Das gehört in den Text, nicht in eine Fußnote. Makkaroni ist eine Entwicklungsklasse — auf ihr wurde die Konfiguration abgestimmt, über ihre Schranke ist nicht entschieden.
07 — Zwei verworfene Wege
Zwei Wege, gemessen und verworfen.
Beide waren begründet, beide sind dokumentiert, keiner hat gehalten. Der Messbalken bleibt in diesem Abschnitt zweimal stehen — Stillstand heißt hier: gemessen, verworfen, weitergegangen.
Weg 1 — den Kontrast anheben
Der Ansatz zielte auf die gemessene Ursache: wenn der Fehler im Bild zu schwach abgesetzt ist, hebe den lokalen Kontrast. Das Ergebnis war nicht „kein Effekt“, sondern ein Schaden. Bei den Makkaroni bricht die Trennung von 0,79 auf 0,25 ein — schlechter als Raten. Die Erklärung ist einfach: die Anhebung verstärkt auch die Struktur der fehlerfreien Oberfläche, und das Verfahren vergleicht am Ende Rauschen mit Rauschen.
Weg 2 — höher auflösen
Die höhere Auflösung kauft Lokalisierung, nicht Erkennung: sie verbessert, wo der Fehler liegt, nicht ob er gefunden wird. Für ein Urteil je Bild bringt sie damit nichts — und sie kostet erheblich Rechenzeit. Der gemeldete Rückgang lag im Rauschen und durfte nicht als Befund berichtet werden; das war der zweite unserer eigenen Irrtümer. Aufgeschrieben bleibt der Weg trotzdem: für eine Anlage, die den Fehlerort braucht, wäre er der erste, den man wieder aufnimmt.
08 — Die Zerlegung
Nicht das Bild bewerten, sondern jedes Objekt.
Ein fauler Apfel in einer Kiste mit zwanzig: wer die Kiste im Durchschnitt beurteilt, findet ihn nie. Also wird jede Kapsel einzeln bewertet, und das Bild bekommt den Wert seiner auffälligsten.
Warum die Auflösung der eigentliche Grund ist
Ein Ganzbild misst 1500 × 1000 px und wird auf 224 × 224 gebracht: die Breite schrumpft auf 224/1500 = 0,149, die Höhe auf 224/1000 = 0,224. Ein einzelner Kapsel-Ausschnitt misst im Median 211 × 212 px und wird auf dieselben 224 × 224 vergrößert. Von der Kapsel bleiben im Ganzbild damit rund 31 px Breite und 47 px Höhe; als Ausschnitt behält sie 224 × 224. Das ist je Richtung das Fünf- bis Siebenfache — nachgerechnet, nicht geschätzt. Nicht das Modell wurde besser, die Kapsel wurde sichtbar. Über 3164 Ausschnitte reicht die Spanne von 58 × 39 px bis 508 × 641 px.
Der Beleg, dass es nicht am Datensatz liegt
Auf einem zweiten Produkt, Makkaroni, springt der Wert nach derselben Zerlegung von 0,5787 auf 0,9559 [0,9291, 0,9774]. In einer früheren Auswertung stand hier ein Sprung von 37,7 Punkten; darin war die Namenskollision aus Abschnitt 02 noch nicht korrigiert. Der Messbalken fährt hoch — und hält bei 0,9089. Warum er dort noch nicht richtig steht, steht im nächsten Abschnitt.
Was hier nicht behauptet wird
Kein „wir schlagen das Standardverfahren“. Verglichen wird die veröffentlichte Ganzbild-Konfiguration mit einer Kette aus Segmentierung plus demselben Verfahren. Das ist legitim und üblich — aber es ist so zu benennen. Und die Segmentierung ist teilespezifisch: für ein Kundenteil muss sie neu gemacht werden. Genau dort liegt die Ingenieursarbeit, für die man bezahlt.
09 — Eigene Fehler
Wo wir uns selbst im Weg standen.
Dieser Abschnitt hat einen hellen Grund und keine Bewegung. Er ist der einzige der Seite, und das ist Absicht.
Fehler 1 — wir haben Glanzlichter segmentiert, keine Kapseln
Die erste Zerlegung fand nicht die Objekte, sondern die Lichtreflexe darauf. Das Verfahren lief durch, die Zahlen sahen plausibel aus, und keine Kennzahl hat etwas gemeldet. Aufgefallen ist es beim Ansehen der Zwischenbilder. Kennzahlen schlagen bei dieser Art Fehler keinen Alarm — sie melden nur, wenn etwas abstürzt oder auffällig schlecht wird.
Fehler 2 — wir sind in unsere eigene Falle gelaufen
Die Ausschnitte wurden über den Dateinamen mit den Bildern verknüpft — genau das, wovor unsere eigene Datenprüfung in Abschnitt 02 gewarnt hatte. Acht Bilder bekamen dadurch fremde Werte. Die Folge war ein zu niedriges Ergebnis: 0,9089 statt 0,9562. Wir hatten die Regel aufgeschrieben, bevor wir sie gebrochen haben. Gefunden haben wir es, weil jeder Zwischenschritt angesehen wurde.
Derselbe Fehler, zwei entgegengesetzte Zahlen
Dieselbe Namenskollision erzeugte je nach nachgelagertem Code zwei gegenläufige Fehler. Ein Lauf meldete 0,9089 — zu niedrig, weil acht fehlerfreie Bilder fremde Ausschnitte bekamen. Ein anderer meldete 0,9625 — zu hoch, weil dieselben acht herausfielen und nur 52 statt 60 fehlerfreie Bilder gerechnet wurden. Richtig ist 0,9562. Die zu hohe Fassung hätte 123,7 statt 141,5 Alarme je 1000 Teile gemeldet, also 88 % statt 86 % Einsparung. Alles einen Tick zu gut, nichts davon auffällig.
| Vorhersage | Messung | warum die Begründung falsch war |
|---|---|---|
| Das Mittel der besten k Patch-Scores verdünnt kleine Defekte und schadet. | k = 20 gewinnt in 4 von 4 Konfigurationen, gepaart in 2 von 4 belegt. | Das Maximum ist die empfindlichste, aber auch die rauschanfälligste Statistik. |
| Höhere Auflösung behebt das Kleindefekt-Problem. | Erkennung: kein nachweisbarer Effekt. Lokalisierung: +0,047 AUPRO, belegt. | Von der Gittergeometrie auf Trennbarkeit geschlossen, ohne den Kontrast zu bedenken. |
| Die Lücke bei den Cashewkernen erklärt sich durch kleine Defekte. | Split am Median belegt keine Trennung (0,9488 gegen 0,9688). | Eine Korrelation mit r² ≈ 0,08 als Erklärung ausgegeben. |
| Die Kapseln scheitern an kleinen Defekten. | Ohne die 23 Ganzobjekt-Masken verschwindet die Trennung (0,5154 gegen 0,7228). | Maskenfläche als Stellvertreter für Defektgröße genommen; sie markiert eine Defektart. |
| Die Segmentierung verwirft systematisch die defekten Kapseln. | Median-Abdeckung der Defektfläche 0,980; 3 von 100 außerhalb. | Zwei Vorschaubilder überinterpretiert, statt zu messen. |
| Normierung der Instanzwerte im Bild hilft. | 0,8918 gegen 0,9562; Fehlalarmrate von 0,133 auf 0,467. | Die Normierung wirft die absolute Skala weg und hebt in fehlerfreien Bildern die zufällig höchste Instanz an. |
| top-k über Instanzen hilft wie top-k über Patches. | Maximum bleibt vorn, bei 4 und bei 20 Instanzen je Bild. | Instanzen sind bereits objektscharf; es gibt kein Patch-Rauschen mehr zu unterdrücken. |
| Abbildung 4 zeigt die Orientierungs-Kurve. | Sie stand nur in der Legende, gezeichnet wurde sie nie. | Toter Code beim Umbau stehen geblieben; erst die Sichtprüfung fand es. |
| Instanz-Ausschnitte können nach dem Dateistamm benannt werden. | 8 kollidierende Stämme, 142 überschriebene Dateien, Kapselwert ungültig. | Die eigene Regel der Datenprüfung verletzt: nie über den Dateistamm verknüpfen. |
10 — Das Ergebnis
0,9562, und die Intervalle berühren sich nicht.
Ausgangslage 0,7050 [0,6220, 0,7787], Endstand 0,9562 [0,9225, 0,9823]. Weil die Klammern getrennt liegen, ist die Verbesserung belegt und nicht Zufall.
Die Betriebszahl daneben: dieselbe Schwellenregel, allein aus fehlerfreien Bildern bestimmt, fing vorher 44 von 100 Fehlern. Jetzt fängt sie 93. Bezahlt wird das mit 8 Fehlalarmen je 100 fehlerfreien Bildern — die Tafel ganz oben zeigt beide Fehlerarten an je einem Beispiel.
Zwei belegte Verbesserungen, nicht eine
Neben den Kapseln (0,7050 → 0,9562) hält auch der zweite Fall: Makkaroni von 0,5787 auf 0,9559 [0,9291, 0,9774]. Bei beiden trennen sich die Intervalle. Alles andere, was in diesem Projekt gemessen wurde, liegt innerhalb der Messunsicherheit — und steht deshalb hier ohne Verbesserungsanspruch. Makkaroni ist dabei eine Entwicklungsklasse: auf ihr wurde die Konfiguration abgestimmt. Der Messbalken erreicht sein Ziel und verschwindet.
11 — Im Betrieb
Was das in Alarmen je 1000 Teile bedeutet.
Ein Betrieb vergleicht dieses System heute nicht gegen ein anderes System, sondern gegen 100 % Handprüfung. Die Bezugslinie ist also 1000 von 1000 Teilen. Deshalb wird hier nicht in Punkten gerechnet, sondern in Alarmen und durchgerutschten Fehlern.
Bei den Kapseln im Endstand sind das 141,5 Alarme je 1000 Teile — 86 % weniger, als heute angesehen werden. Bei den Snack-Röhrchen 29 Alarme, also 97 %; bei den Leiterplatten 306, also 69 %. Je teurer ein übersehener Fehler ist, desto weiter rechts liegt der richtige Arbeitspunkt — und diese Abwägung kann nur der Betrieb treffen, nicht wir.
Der Arbeitspunkt · zwanzig gemessene Stützstellen
80 %85 %90 %95 %99 %
- Alarme je 1000 Teile
- 141,5gemessen, bei 1 % Ausschuss
- weniger Handprüfung als heute
- 86 %heute schaut jemand alle 1000 an
- durchgerutschte Fehler je 1000
- 0,5
- Produkt
- Kapseln
Alarme je 1000 = 1000 × [ E × p + F × (1 − p) ]
Einsparung = 1 − Alarme je 1000 / 1000
E = Erkennungsrate · F = Fehlalarmrate · p = Ausschussanteil des Betriebs
Nachgerechnet am vollständig belegten Arbeitspunkt der Kapseln: E = 0,930, F = 0,1333, p = 0,01 ergibt 1000 × [0,930 × 0,01 + 0,1333 × 0,99] = 141,3, gemessen sind 141,5 — und damit 86 % weniger Handprüfung. Die Schwelle 52,3456 stammt allein aus fehlerfreien Bildern: 93 gefangen · 8 Fehlalarme · 7 durchgerutscht.
Die fünf Stufen sind gemessene Arbeitspunkte, keine Kurve: die Fehlalarmrate kann nur Vielfache von 1/50 bis 1/100 annehmen, alles dazwischen wäre behauptet. Der Regler rastet deshalb ein und endet, wo die Messung endet. Grundlage sind die fünf Arbeitspunktdateien mit 152 bis 202 Stützstellen je Produkt; die Feinauflösung dazwischen liegt vor und wird als messwerte.csv zum Herunterladen nachgeliefert — ⛔ Export steht noch aus.
Zwei Sätze gehören zwingend dazu. Null beobachtete Fehlalarme heißt nicht null: bei 50 fehlerfreien Bildern liegt die obere 95-%-Grenze näherungsweise bei 3/n, also rund 6 %. Und der Betriebspunkt ist selbst unsicher: bei den Cashewkernen liegen 27 Punkte Spanne in der Erkennungsrate, allein aus der Schätzung der Schwelle bei 90 fehlerfreien Rückhaltebildern. Dort helfen mehr fehlerfreie Bilder, nicht mehr Defektbilder.
Der Vergleich mit der Handprüfung ist ein Literaturwert
Die Kurve zur nachlassenden Aufmerksamkeit bei der Sichtprüfung durch Menschen ist aus der Literatur übernommen und keine eigene Messung. Sie steht hier, weil der Vergleichsmaßstab im Betrieb tatsächlich die Handprüfung ist — aber sie trägt keine unserer Aussagen. Eine Maschine ermüdet nicht; wie stark ein Mensch nach zwei Stunden nachlässt, haben wir nicht selbst erhoben und behaupten es deshalb nicht.
11b — Vom Modell auf die Maschine
Der Export macht es schneller — und kann es stumm ruinieren.
Das Modell in ein Auslieferungsformat zu überführen macht es 2,2- bis 2,4-mal schneller und liefert exakt dieselben Zahlen: Abweichung 0,0000 in allen vier Produkten.
Schieben Sie den Fehler selbst herbei
- Auffälligkeitswert, Snack-Röhrchen
- 0,9956
- korrekt / ohne Antialiasing
- 0,9956 / 0,7744
- Differenz
- −0,2212 [−0,3042, −0,1434]
In der abgebildeten Klasse hebt der Export die Werte der fehlerfreien Bilder um 10,40 an, die der fehlerhaften nur um 2,77 — 3,8-mal stärker. Genau deshalb fällt es nicht auf: das Modell lädt fehlerfrei, die Zahlen sehen plausibel aus, nichts stürzt ab. Ein Fehler, der abstürzt, kostet einen Nachmittag. Ein Fehler, der plausible Zahlen liefert, kostet ein Projekt.
Was daran neu ist — und was nicht
Die Ursache ist seit 2022 offen dokumentiert: beim Export wird die Bildverkleinerung ohne Antialiasing nachgebildet (pytorch#80033, torchvision#6806, pytorch#128818). Wir haben keinen Fehler gefunden — wir haben seine Folge beziffert: 22 Punkte, gemessen mit Intervall. Nachgewiesen und nicht vermutet: dieselbe Rechnung mit abgeschaltetem Antialiasing reproduziert die Zahlen des Auslieferungsformats auf 0,000 über alle geprüften Bilder. Die Wirkung ist labelabhängig — über die Klassen hinweg werden fehlerfreie Bilder um 15 bis 30 Punkte angehoben, fehlerhafte kaum. Wer die Vorverarbeitung mit exportiert, verliert das stumm.
Und was der Speicherpfad kostet
Die ganzzahlige Fassung war in allen vier Produkten langsamer (+6 bis +59 %); gewonnen wird ausschließlich Speicher, Faktor rund 2,4. Der Grund liegt in der Maschine: diese CPU-Generation kennt die passenden Rechenbefehle nicht — sie kamen bei diesem Hersteller zwei Generationen später. Alles darüber hinaus ist Erwartung und wird hier als solche gekennzeichnet.
Einzelheiten und Reproduktionsschritte in der Auskopplung ONNX-Export verliert Antialiasing.
12 — Der Prüfpfad
Wie oft wir hätten schummeln können.
33 Auswertungen auf dem Testsplit — Leiterplatten 10, Kapseln 11, Cashewkerne 7, Snack-Röhrchen 5 — dazu 2 labelfreie Zugriffe. Jeder mit Begründung, keiner nachträglich herausgerechnet.
| # | Datum | Klasse | Konfiguration | Grund |
|---|---|---|---|---|
| Σ | 33 Auswertungen | Leiterplatten 10 · Kapseln 11 · Cashewkerne 7 · Snack-Röhrchen 5 | + 2 labelfrei | getrennt ausgewiesen, nicht eingerechnet |
⛔ pruefpfad.json ist noch nicht exportiert. Die Tabelle ist gebaut und füllt sich, sobald die Datei aus dem append-only Variantenbuch daneben liegt — Spalten nr, datum, klasse, config_hash, grund. Bis dahin stehen hier die Summen, und die sind belegt. Als Tabelle statt als Bild, weil 33 Zeilen deutscher Text in einer Rasterdatei für jede Maschine nicht vorhanden sind.
Die Zählregel war nicht einheitlich — auch das steht hier
Bei einem der Läufe wurde ein Wiederholungslauf mitgezählt (Nummer 1 und 2: gleiche Klasse, gleicher Grund, gleicher Konfigurations-Hash, 31 Minuten auseinander), bei drei anderen ausdrücklich nicht. Die Zahl der tatsächlichen Läufe ist nachträglich nicht mehr feststellbar. Wir zählen künftig jeden Lauf und hören auf, klug zu sein: die Zahl ist nicht der Punkt, die Vollständigkeit ist es. Eine Regel mit Ausnahmen ist die einzige Angriffsfläche eines Abschnitts, der sonst keine hat.
Zwei Läufe, ein Hash — nachrechnen mit einem Vergleich
Dieselbe Konfiguration zweimal gerechnet: alle Zahlwerte gleich, alle vier Binärausgaben byte-identisch, größte absolute Differenz 0,0. Die einzige Abweichung war das mitgeschriebene Feld für die Laufzeit (23,0 gegen 17,9 Minuten). Ohne dieses Feld hashen beide Ergebnisdokumente gleich:
0884ce3b8e977207b066697b6e0e190227025b02e6b06eca4b783fac820aba30
Damit kann jeder mit einem einzigen Vergleich prüfen, ob er dasselbe herausbekommen hat. Die Laufzeit wandert dafür aus dem Ergebnisdokument in ein Protokoll — sie ist eine Eigenschaft der Maschine, nicht des Ergebnisses. Aus einer Liste, die uns angreifbar macht, wird damit eine Einladung, es zu versuchen.
Die Stützstellen zum Nachrechnen
Die Punkte, aus denen der Rechner in Abschnitt 11 rechnet, gehören als Datei hierher: klasse, erkennungsrate, fehlalarmrate, alarme_je_1000, n_normal, quelldatei. Sie liegen fertig vor — Leiterplatten 202 Stützstellen, Leiterplatten ausgerichtet 202, Cashewkerne 152, Snack-Röhrchen 152, Kapseln 162. Es ist ein Export, keine Messung: ⛔ messwerte.csv steht noch aus. Wer nachrechnen will, braucht dafür nicht uns.
13 — Was das nicht ist
Das hier ist eine Vorstufe.
Was fehlt, steht benannt und nicht umschrieben. Vier Punkte.
Geschwindigkeit
6,618 Sekunden je Bild für rund zwanzig einzeln bewertete Objekte — das sind 181,3 Teile je Minute. Davon gehen 106,9 ms auf die Segmentierung (1,6 %) und 6.517,9 ms auf die Einzelbewertung (98,4 %). Und die Bedingung, ohne die die Zahl irreführt: die Einzelbewertung läuft in der Entwicklungsfassung mit Stapelgröße 1 — zwanzig einzelne Modellaufrufe je Bild, unoptimiert, auf einer CPU von 2019 bei laufendem Fremdprozess. Die Auslieferungsvariante mit Stapelverarbeitung ist nicht gemessen, und deshalb steht hier keine Zahl dafür. Untertreiben ist auf dieser Seite derselbe Fehler wie Übertreiben.
Qualität, Betrieb, Zeit
Andere Merkmalsauszüge sind nicht geprüft, acht der zwölf Produkte des Datensatzes nicht angefasst, eine Ausführung auf Grafikkarte nicht gemessen. Die ganzzahlige Fassung war langsamer und bringt nur Speicher. Kamera-Anbindung, Auslösung, Übergabe an die Anlage, Bedienoberfläche und Nachschulung bei Produktwechsel sind nicht gebaut. Und wie sich das Verfahren über Monate verhält, ist offen — dafür bräuchte es eine Linie, keinen Datensatz.
Wir sagen nicht, dass etwas nicht geht. Wir sagen, wie weit wir gekommen sind, womit wir es belegen, und was der nächste Schritt kosten würde.
14 — Der Übergang
Das ist kein Verfahren für Kapseln.
Es ist die Art, wie wir jedes Problem angehen: erst messen, ob es lösbar ist. Dann messen, was hilft. Dann veröffentlichen, was nicht geholfen hat.
- Dieselbe Methode auf ein eigenes Prüfproblem angewandt — was dabei zuerst gemessen wird und was es kostet.
- Das Repository mit Code, Protokoll und Variantenbuch ist noch nicht öffentlich. Ohne Code ist dieser Bericht eine Behauptung über Messungen; mit Code ist er überprüfbar, und deshalb kommt er.
- Über eine konkrete Prüfaufgabe sprechen — Montag bis Freitag, 9 bis 17 Uhr.
Datengrundlage: VisA (Visual Anomaly), Amazon Science, veröffentlicht unter CC BY 4.0. Namensnennung ist Lizenzbedingung und steht deshalb sichtbar hier, nicht nur im Markup. Alle Auswertungen dieses Berichts sind auf diesem öffentlichen Datensatz gerechnet und nachvollziehbar. Herkunft: Archiv VisA_20220922.tar, 1.929.840.640 Bytes, SHA-256 2eb8690c803ab37de0324772964100169ec8ba1fa3f7e94291c9ca673f40f362; Aufbereitung spot-diff, Commit 2a692ab5. Saaten: 12345 Bootstrap, 42 Splits und Modell, 20260817 Cluster. Stand der Zahlen: 21. August 2026. Fassung dieser Seite: 2. September 2026.
Für Institute und geförderte Projekte
Diesen Bericht gibt es, weil wir genau diese Arbeit anbieten — ein Verfahren umsetzen, messen und aufschreiben, was nicht funktioniert hat: Wir bauen und messen, was gerechnet werden muss.