Heute war ein produktiver Tag. Die wichtigste Erkenntnis: Die Modelle lernen am besten aus genau den Bildern, die sie später im Einsatz sehen - und davon habe ich inzwischen genug, weil jeder auf dem Handy aufgenommene und von Hand geprüfte Haufen zum Trainingsmaterial wird.
Segmentierung: ganze Fotos statt Einzelausschnitte
Die erste Stufe der Pipeline findet die Bausteine im Foto und trennt sie pixelgenau voneinander. Das Nachtraining lief bisher über Ausschnitte mit jeweils genau einem Baustein. Die Trainingsmetrik sah dabei sogar gut aus, im Einsatz kollabierte das Modell aber: Es lernte "das Bild ist ein Baustein" und lieferte bei echten Haufen grosse Sammelboxen statt einzelner Teile.
Jetzt exportiere ich jeden geprüften Haufen als ganze Fotos mit allen eingezeichneten Bausteinen - im ersten Lauf 90 Fotos mit rund 2 000 Teilen, drei Haufen als Testmenge zurückgehalten. Gemessen gegen die Handkorrektur:
- Recall (gefundene Bausteine): 86 % → 99 %
- Präzision (Treffer ohne Fehldetektion): 91 % → 94 %
- Sammelboxen über mehrere Teile: 3 → 1
Zusätzlich verarbeitet die App die Fotos jetzt in höherer Auflösung (640 statt 512 px). Mit beidem zusammen kommt sie auf dem Handy auf 96,5 % Recall, praktisch ohne Fehldetektionen. Der Preis ist die Laufzeit: 16 bis 22 Sekunden pro Foto auf einem Mittelklasse-Handy. Hier ist noch Arbeit nötig.
Erkennung: echte Ausschnitte als Vergleichsbeispiele
Die zweite Stufe bestimmt, welches Teil es genau ist. Dazu wird jeder Ausschnitt in einen Merkmalsvektor umgerechnet und mit einem Katalog verglichen. Seit gestern läuft auf dem Handy ein eigens nachtrainiertes Erkennungsmodell. Heute habe ich zusätzlich alle Ausschnitte aus geprüften Haufen ins Training und in den Katalog aufgenommen. Der Katalog umfasst jetzt rund 13 000 Einträge, davon etwa ein Viertel echte Fotos, der Rest am Computer gerenderte Ansichten.
Auf vier Testhaufen, die nie im Training waren (222 Einzelansichten, 81 Bausteine):
- Basismodell: 77 % pro Ansicht, 83 % pro Baustein
- nachtrainiert (gestern): 88 % pro Ansicht, 89 % pro Baustein
- nachtrainiert (heute): 89 % pro Ansicht, 93 % pro Baustein
Den grössten Teil des Gewinns bringen die echten Beispiele im Katalog, nicht das Training selbst. Eine Einschränkung muss ich ehrlicherweise nennen: Die Testhaufen bestanden aus denselben physischen Steinen wie einige der Katalogbeispiele. Bei völlig neuen Teilen fällt der Gewinn kleiner aus.
Bereinigung des Teilekatalogs
Die Fehleranalyse hat gezeigt, dass ein Teil der vermeintlichen Fehlerkennungen auf Inkonsistenzen im Teilekatalog zurückgeht. Einige Teile sind dort unter zwei Nummern geführt, weil sie im Laufe der Zeit umbenannt oder zusammengelegt wurden. In diesen Fällen hatte die App das Teil korrekt erkannt, die Auswertung zählte die abweichende Nummer jedoch als Fehler. Solche Aliase werden jetzt in Katalog, Training und Auswertung einheitlich auf eine kanonische Nummer abgebildet.
Teile, die die App nur aus Renderings kennt
Die spannendste Frage des Tages: Was passiert bei Teilen, von denen es kein einziges echtes Foto gibt? Dafür habe ich drei Haufen mit Zahnrädern fotografiert. Ergebnis pro Baustein:
- die zwei grossen Zahnräder: 16 von 16 richtig - allein aus Renderings
- kleines Zahnrad und ein unscheinbares Kleinteil: oft mit ähnlichen Teilen verwechselt
- gesamt: 28 von 43, mit echten Ausschnitten aus den jeweils anderen Haufen 41 von 43
Markante Teile lassen sich also schon allein aus Renderings erkennen. Für kleine und ähnliche Teile braucht es echte Fotos.
Werkzeuge
Mein Prüfwerkzeug am PC, mit dem ich die Handyfotos korrigiere, verwendet jetzt dieselbe Erkennung wie die App: 88 % statt 47 % korrekte Vorschläge pro Ansicht. Den Katalog für die App baue ich dort per Knopfdruck neu, wenn neue geprüfte Haufen oder neue Teile dazukommen.
Als Nächstes
Die Laufzeit auf dem Handy senken, die Erkennung an einem komplett neuen Teileset prüfen und der App beibringen, beim Fotografieren auf den richtigen Abstand und genug Licht hinzuweisen.