Als Venture Builder der Schmitz Cargobull Gruppe entwickeln wir neue Geschäftsmodelle und machen aus Ideen digitale Produkte. Wer dabei nur an „Business Innovation“ denkt, liegt falsch. Wir entwickeln auch neue Tech-Produkte. Mit diesem Blog Post möchte ich einen Einblick in die Entwicklung eines KI-Prototypen geben, mit dem wir ohne große Datenpunkte Algorithmen trainieren konnten.
Künstliche Intelligenz zur Schadenserkennung
Unter dem Decknamen “Controlx” untersuchten wir, wie wir Fahrzeugbesitzern eine bessere Möglichkeit zur Zustandskontrolle ihrer Fahrzeuge ermöglichen können. Die Idee: Eine App, die Trailer an Übergabepunkten scannt und Schäden mithilfe künstlicher Intelligenz einfach erkennt und digital dokumentiert. Nachdem die Produktidee erfolgreich validiert war, standen wir vor einer Herausforderung: Welche Daten könnten wir nutzen, um die KI zu trainieren, Trailer und Schäden zu erkennen?
Wir haben uns dazu ein Setup aus zwei MRCNN-Modellen ausgedacht. Das erste erkennt verschiedene Abschnitte des Trailers (links, rechts, Vorder- und Rückseite usw.), während das zweite etwaige Schäden identifiziert. Um alles möglichst einfach zu gestalten, zerlegen wir jedes Bild in einzelne Segmente, bevor im zweiten Schritt die Schadenserkennung stattfindet. Hierzu war für jeden Teil des Trailers eine akkurate Maskierung erforderlich, um bei der Erkennung von Schäden keine relevanten Informationen zu verlieren. Um die Modelle zu trainieren, standen uns nur einige hundert Bilder zur Verfügung. Eine Möglichkeit wäre gewesen, Trailer zu fotografieren und darauf zu hoffen, dass einige davon beschädigt sind. Der dazu erforderliche Aufwand wäre allerdings unzumutbar gewesen. Die zweite Option war es, künstliche Bilder zu generieren, sie mit unseren vorhandenen Bildern zu mischen und unsere Modelle anhand dieses gemischten Datensatzes zu trainieren.
Der Vorteil des zweiten Ansatzes war, dass wir den Entwurf für die ganze Anwendung skizzieren konnten, obwohl wir keinen soliden Datensatz als Fundament für das Training der Modelle hatten. Dass uns die nötigen Daten für das Training der Modelle fehlten, half uns letztlich bei der Entwicklung einer hochflexiblen Architektur, in der jede Komponente problemlos ausgetauscht oder entfernt werden kann. Innerhalb weniger Tage hatten wir einen funktionierenden Prototyp mit Modellen, die per transfer learning anhand einiger hundert Bildern trainiert wurden, die wir manuell gekennzeichnet hatten (das hat zwei Tage gedauert). Die Vorstellung, diesen manuellen Kennzeichnungsprozess mit hunderttausenden Bildern durchzuführen, ist ausgesprochen unattraktiv. Niemand möchte eine Woche oder mehr damit verbringen, auf Bildern die linke oder rechte Ecke eines Anhängers und etwaige Schäden oder Kratzer zu markieren. Vor diesem Hintergrund ist es erstrebenswert, mit künstlich generierten Bildern zu arbeiten. Dabei entfällt nicht nur der Aufwand, Fotos von echten Trailern zu machen, sondern auch die undankbare Aufgabe, diese manuell zu kennzeichnen. Durch die Leistungsfähigkeit moderner Grafikkarten und benutzerfreundlicher Game Engines wie Unity oder Unreal scheint dieses Ziel nicht allzu weit entfernt zu sein. Wir haben einen Trailer in Blender modelliert, eine Szene mit Unity sowie eine rotierende Kamera mit gerenderten Bilder des Anhängers aus verschiedenen Perspektiven erstellt.
Ein Modell mit diesen Bildern zu trainieren, würde aufgrund von Überanpassung jedoch zu schlechten Ergebnissen führen. Nur einen Trailer in einer Farbe und einem Hintergrund bietet nicht genug Variation. Daher haben wir unterschiedliche Belichtungen abhängig von der Tageszeit, verschiedene Texturen für die LKW-Plane und wechselnde Hintergründe implementiert. Damit konnten wir innerhalb von Minuten jede beliebige Anzahl an Bildern generieren. Die Markierungen der Anhängerteile wurden erstellt, indem für jede Ecke des Anhängers Koordinaten aus dem 3D-Raum in den 2D-Raum konvertiert und geprüft wurde, welche Ecken auf dem Bild sichtbar sind. Wenn beispielsweise die rechte obere und rechte untere Vorder- bzw. Hinterseite nicht durch den Anhänger blockiert und auf dem Bild deutlich sichtbar ist, muss entsprechend die rechte Seite des Anhängers auf dem Bild zu sehen sein. Wären alle vier vorderen Ecken des Anhängers ebenfalls sichtbar, könnten wir Markierungen für die rechte und vordere Seite des Anhängers erstellen, indem wir die 3D-Koordinaten in Unity tracken und sie auf dem Bild in 2D-Koordinaten umwandeln. Das Gleiche haben wir getan, um Schäden am Trailer zu simulieren. Wir haben Kratzer und Dellen an der Verkleidung erstellt, Bilder gerendert und Masken auf Basis entsprechender Veränderungen der Oberfläche kalkuliert. Mithilfe der so generierten Bilder und Markierungen gelang es schließlich, unsere Segmentierungs- und Schadenserkennungsmodelle zu trainieren. Obwohl wir versucht haben, durch verschiedene Hintergrundfarben und Texturen möglichst realistische Bilder zu erzeugen, haben die Modelle nach dem Training im Kontext mit echten Bildern immer noch nicht richtig funktioniert. Während sie in der Lage waren, generierte Bilder problemlos zu analysieren, lag die Erfolgsquote bei echten Bildern nur bei etwa 20 Prozent.
Die Erkenntnis: Die von uns generierten Bilder sind nicht realistisch genug. So hatten wir zum Beispiel nur ein Anhängermodell, weil uns die Kapazitäten fehlten, per Blender mehrere verschiedene Modelle zu erstellen. Eines Tages versuchen wir womöglich, mittels GANs (Generated Adversarial Networks) realistischere Bilder zu erzeugen und dabei die generierten Bilder als Input zu verwenden. Ein weiterer Ansatz wäre, die Daten anzureichern, bevor man die Modelle mit den Bildern trainiert, beispielsweise durch Zuschneiden, Drehen und Hinzufügen von störenden Bildelementen, um das Risiko einer Überanpassung zu verringern. Letztendlich sind wir uns sicher, dass die für das Training eines Modells erforderlichen Daten generierbar sind – wenn man es richtig macht. PC-Spiele wie Truck Simulator liefern inzwischen Bilder, die dem Detailgrad der Realität ziemlich nahekommen. Darüber hinaus lässt sich durch generierte Trainingsdaten der Markierungsprozess für relevante Bildinformationen automatisieren, wodurch der enorme Aufwand entfällt, die Markierungen manuell für jedes einzelne Bild vorzunehmen.
Es lohnt sich, unsere Updates im Blick zu behalten, wenn wir Daten mit GANs generieren und mehr darüber wissen, wie die Genauigkeit von Modellen sich durch simple Maßnahmen wie Datenanreicherung verändert. Der grobe Prototyp, der oben zu sehen ist, ist inzwischen zu einer benutzerfreundlichen App für Prüfer und zu einem Desktop-Dashboard für Fuhrparkmanager geworden (Checktur.io) und baut ein eigenes Tech Team auf. Es ist beeindruckend zu sehen, wie wir angefangen haben und was daraus geworden ist. Willst du das Checktur.io Team unterstützen, die Fahrzeugchecks nachhaltig zu verändern? Dann schau mal hier.