22. Mai 2022

Verwendung synthetischer Daten zur Steigerung der Leistung Ihres Objekterkennungsmodells

Mitwirkende
Jules Talloen
Machine Learning Engineer
Keine Artikel gefunden.
Newsletter abonnieren
Diesen Beitrag teilen

Eine praktische Anleitung zur Erzeugung künstlicher Daten mit Unity Perception

Jeder, der schon einmal ein Modell für maschinelles Lernen trainiert hat, wird Ihnen sagen, dass es die Daten sind, die das Modell ausmachen, und dass im Allgemeinen mehr Daten und Kennzeichnungen zu einer besseren Leistung führen. Das Sammeln von Daten und vor allem deren Beschriftung ist zeitaufwändig und daher teuer. Daher suchen Fachleute für maschinelles Lernen zunehmend nach effizienteren Möglichkeiten, ihren Datenbestand zu erweitern, indem sie künstlich erzeugte Variationen von Datenproben verwenden, aber auch zunehmend auf hybride oder vollständig synthetische Daten zurückgreifen.

Das Spiele-Engine-Unternehmen Unity bietet ein Tool namens Unity Perception an, mit dem Sie Objekte auf verschiedene Weise simulieren und virtuelle Bilder von Ihren Simulationen machen können. Auf diese Weise ist es möglich, aus Ihren Objekt-Scans eine große Anzahl von beschrifteten Bildern zu erzeugen, die als Trainingsdaten verwendet werden können.

In diesem Blogpost stelle ich die Ergebnisse meines Praktikums bei ML6 vor, in dessen Verlauf ich die Verwendung von Unity Perception zur Erzeugung von Trainingsdaten für ein Objekterkennungsmodell untersucht habe. Genauer gesagt werde ich beschreiben, wie ich:

  1. Objektscans mit einer Lidar-Kamera erhalten
  2. einen synthetischen Datensatz für diese Objekte mit Unity erstellt
  3. trainierte Modelle zur Objekterkennung anhand von synthetischen und realen Bildern
  4. die potenziellen Vorteile der Hinzufügung synthetischer Bilder zum Trainingssatz bewertet

Scannen der Objekte

Um Objektnetze zu erstellen, habe ich eine App namens Scaniverse auf einem Telefon mit Lidar-Kamera verwendet. Um dies gut zu machen, gibt es einige Voraussetzungen. Sie müssen in der Lage sein, das Objekt von allen Seiten zu erfassen, und Sie benötigen eine gute und gleichmäßige Beleuchtung in allen Winkeln des Objekts

Also habe ich die Objekte auf ein Podest mit guter Beleuchtung gestellt, die Objekte mit der App gescannt und anschließend ein separates Bild von der Unterseite gemacht, um es dem Objektmesh in Blender hinzuzufügen. Mit Scaniverse kannst du deine Objekte als fbx- oder obj-Dateien exportieren, beide funktionieren mit Blender und Unity.

Beispiel Objekt-Scan in Blender

Allerdings war nicht jedes Objekt leicht zu scannen. Besonders Objekte mit spiegelnden Oberflächen, dünnen oder durchsichtigen Segmenten waren mit dieser Methode problematisch zu scannen. Wenn die Scans nicht gut sind, gibt es immer noch die Möglichkeit, sie nachträglich mit Blender zu bearbeiten.

Vor allem, um sie zu beschneiden und neu zu zentrieren oder um sie mit einer Unterseite zu kombinieren, um ein vollständiges Objekt zu erhalten.

Ich machte auch mehrere Scans für jedes Objekt, um die Variation der Objekte in den synthetischen Bildern zu erhöhen, und machte etwa 200 Bilder von jedem Objekt, das ich in verschiedenen Räumen und Positionen scannte. Ich habe versucht, die Objekte an verschiedenen Orten zu platzieren und sie aus unterschiedlichen Winkeln zu fotografieren. Ich habe dafür gesorgt, dass die Bilder manchmal unscharf waren oder das Objekt nur teilweise zeigten, um die Variation weiter zu erhöhen.

Unten sind Scans der 3 Objekte, mit denen ich gearbeitet habe: ein Schuh, eine Coca-Cola-Dose und eine Kellogg's-Müslischachtel.

Ich habe diese Objekte ausgewählt, weil:

  1. Sie waren leicht zu bewegen und manuell zu fotografieren
  2. Sie passen zu den Hintergründen der Innenszene.
  3. Sie sind sehr unterschiedlich in Bezug auf Farbe, Struktur und Reflexionseigenschaften
Beispiel für Objekt-Scans in der Unity-Wahrnehmung

Generierung synthetischer Daten in Unity Perception

Unity Perception ist ein Toolkit zur Erstellung von Datensätzen. Es ist relativ neu und funktioniert derzeit nur für kamerabasierte Anwendungsfälle. Es ist ein Plugin für Unity, eine Spiel-Engine und plattformübergreifende IDE.

Zur Erzeugung von Trainingsbildern habe ich eine Simulation verwendet, die Ihre Objekte mit zufälligen Drehungen, Skalierungen und Positionen vor einem Hintergrund und vor einer Lichtquelle und einer Kamera positioniert. Die Objekte wurden mit gleicher Wahrscheinlichkeit gezeichnet; jede Klasse war gleich stark vertreten.

Unity-Wahrnehmung UI

Für mehr Abwechslung habe ich die Beleuchtungsintensität randomisiert und verschiedene Glätteeigenschaften für die Objekte und verschiedene Arten der Hintergrundgenerierung verwendet. Ich habe das gleiche Hintergrundgenerierungsschema verwendet, wie es von Unity in ihrem Tutorial für Unity Perception verwendet wird, bestehend aus zufälligen Objekten mit zufälligen Texturen als Hintergrund. Dies gewährleistet einen sehr unterschiedlichen Hintergrund für jede Simulation ohne andere erkennbare Objekte neben den Objektklassen. Für allgemeine Zwecke ist dies eine gute Ausgangsbasis (diese Situation wird in der Grafik unten als Simulation 1 bezeichnet).

Tutorial Hintergrundsimulation

Das Training nur mit diesen Bildern brachte jedoch keine sehr guten Ergebnisse, also habe ich versucht, stattdessen ein zufälliges Hintergrundbild zu verwenden. Diese Hintergrundbilder wurden aus einem Online-Datensatz von Innenraumszenen entnommen. Dies führte zu einer drastischen Verbesserung der Ergebnisse, wie ich im folgenden Diagramm zeigen werde. Der Datensatz, aus dem diese Hintergrundbilder entnommen werden, sollte je nach dem natürlichen Kontext Ihrer Objektklasse ausgewählt werden.

Simulation mit Hintergrundbild

Um die Szene weiter zu verbessern, habe ich zufällige Objekte hinzugefügt, jetzt aber in geringerer Anzahl und im Vordergrund. Diese Objekte verdecken zum Teil die Klassen und sorgen für eine abwechslungsreichere Szene.

Simulation mit Hintergrundbild und zufälligen Objekten

Eine weitere Verbesserung, die ich vorgenommen habe, ist die Verwendung mehrerer Objektnetze für dieselbe Objektklasse. Dadurch werden die Ergebnisse für komplexere Objekte verbessert.

Training von Objekterkennungsmodellen

Ich habe die Tensorflow Object Detection API verwendet, um die Modelle zu trainieren. Ich importierte vortrainierte Modelle aus dem Tensorflow-Modell-Zoo und stimmte sie dann auf meine Daten ab. Ich entschied mich, mit einem Mobilet zu arbeiten, da es ein relativ schnelles Modell ist, mit dem ich in kurzer Zeit gute Ergebnisse erzielen kann.

Beim Fotografieren habe ich die Objekte für jedes Bild an einen anderen Ort gebracht und aus vielen Winkeln fotografiert. Ich habe auch Bilder gemacht, bei denen die Objekte entweder teilweise verdeckt oder nicht ganz im Bild waren; alle Bilder wurden mit demselben Telefon in derselben Qualität aufgenommen.

Ich habe LabelImg verwendet, um die Bilder manuell zu beschriften, bevor ich sie in eine Trainings- (80 %), eine Validierungs- (10 %) und eine Testmenge (10 %) aufgeteilt habe. Der Validierungssatz wurde für die Auswahl der Hyperparameter des Modells und der Testsatz für die endgültige Bewertung verwendet. Die Bilder für den Testsatz wurden in anderen Räumen aufgenommen als die Bilder für den Trainingssatz; dasselbe gilt für den Validierungssatz.

Ich stellte sicher, dass jede Klasse in allen Partitionen gleich stark vertreten war. Ich fügte die synthetischen Bilder zum Trainingssatz hinzu; die Validierungs- und Testsätze bestanden nur aus realen Bildern.

Um die Leistung der Modelle zu messen, habe ich die mittlere durchschnittliche Genauigkeit (mAP) bei 0,5 Schnittpunkten über dem Unionswert und den durchschnittlichen Wiedererkennungswert (AR) bei 10 Vorhersagen verwendet (True Positive, wenn das Objekt in den ersten 10 Vorhersagen erkannt wurde).

Mit dem mAP lässt sich gut messen, wie genau die Entdeckungen sind. Der AR misst, wie gut das Modell alle Positivmeldungen findet (siehe auch hier).

Experimente

Ich habe Modelle nur mit realen Bildern, nur mit synthetischen Bildern oder mit einer Mischung aus beidem trainiert. Durch den Vergleich der Ergebnisse zeige ich den Nutzen der Hinzufügung synthetischer Bilder und die beste Aufteilung zwischen realen und synthetischen Bildern für das Training. Die gemischten Modelle wurden mit demselben Stichprobenverfahren für reale und synthetische Bilder trainiert. Mit unterschiedlichen Sampling-Schemata können Sie wahrscheinlich noch bessere Modelle erstellen. Der Einfachheit halber habe ich jedoch das gleiche Sampling verwendet.

Eine andere Möglichkeit, diese Modelle zu trainieren, besteht darin, sie zunächst nur mit synthetischen Daten zu trainieren und sie dann mit realen Daten zu verfeinern. Bei mir führte dies zu ähnlichen, aber etwas schlechteren Ergebnissen. Allerdings waren die Modelle recht einfach, und ich bin sicher, dass man sie noch verbessern kann.

Ich habe gemischte Modelle für die 4 verschiedenen Arten von Hintergrundsimulationen trainiert, die im vorherigen Abschnitt gezeigt wurden. In der folgenden Tabelle sind die mAP/AR-Ergebnisse für diese Simulationen zusammengefasst:

Simulation 1: Tutorial-Simulation; Simulation 2: Verwendung von Hintergrundbildern; Simulation 3: Verwendung von Hintergrundbildern mit zufälligen Objekten; Simulation 4: Verwendung mehrerer Netze für jedes Objekt. Modelle trainiert mit 1000 synthetischen und 500 realen Bildern

Leistungsvergleich zwischen verschiedenen Synthetik-/Realwelt-Splits

Zunächst wollte ich sehen, wie gut die rein synthetischen Modelle sind und wie viele reale Bilder man am wenigsten braucht, um gute Ergebnisse zu erzielen. Ich habe die rein synthetischen Modelle mit 1000/2000/5000/100000 synthetischen Bildern trainiert; alle hatten ungefähr die gleiche Punktzahl von 0,3 mAP@0.5IoU, was nicht besonders gut ist. Einige Beispielergebnisse für die verschiedenen Modelle sind in den Bildern am Ende dieses Blogposts zu sehen.

Dann habe ich Modelle mit 0, 30, 100, 300 und 530 realen Bildern zusätzlich zu den 1000 synthetischen Bildern trainiert und die Ergebnisse verglichen.

Vergleich zwischen Modellen, die auf unterschiedlichen Mengen von Bildern aus der realen Welt trainiert wurden

Ich stellte fest, dass die mAP- und AR-Werte stiegen, je mehr Bilder aus der realen Welt ich dem Trainingssatz hinzufügte, bis ich 300 Bilder aus der realen Welt hinzugefügt hatte; die zusätzlichen 230 Bilder im letzten Modell mit 530 Bildern aus der realen Welt schienen nicht viel zu helfen. Das Modell mit 1000 synthetischen/300 realen Bildern konnte die meisten Objekte in den Bildern erkennen, wobei vor allem einige der Schuh-Erkennungen fehlten.

Bisher habe ich nur gezeigt, dass eine Mischung aus beiden besser ist als nur synthetische Daten, aber nicht, wie sehr die synthetischen Daten unsere Modelle verbessern. Daher habe ich ein Modell nur mit den 300 realen Bildern trainiert. Dieses Modell schnitt sehr schlecht ab, sogar noch schlechter als das rein synthetische Modell. Bei der Auswertung dieses Modells fiel mir auf, dass das Modell fast ausschließlich die Coca-Cola-Dosen erkannte, was mir zeigte, dass 100 Bilder zwar ausreichen, um ein Objekterkennungsmodell für Coca-Cola-Dosen zu trainieren, aber nicht für die anderen beiden Klassen. Zu Testzwecken verwendete ich jedoch weiterhin dieselbe Trainingsmenge von etwa 100 Bildern für jede Klasse.

Ich fügte dann nur 300 synthetische Bilder zum Trainingssatz hinzu und bemerkte bereits, dass sich die Ergebnisse mehr als verdoppelten. Als ich jedoch immer mehr synthetische Daten hinzufügte, begannen die Modelle schlechter abzuschneiden. Vielleicht könnte ich mit einem anderen Stichprobenverfahren für die realen Daten mehr synthetische Bilder zum Trainingssatz hinzufügen.

Vergleich zwischen Modellen, die mit unterschiedlichen Mengen an synthetischen Bildern trainiert wurden

Leistungsvergleich zwischen verschiedenen Klassen

Bei der manuellen Auswertung der Modelle bemerkte ich große Unterschiede in der Erkennungsgenauigkeit einiger Modelle bei den Klassen. Daher habe ich sie für jede Klasse getrennt ausgewertet und die Ergebnisse betrachtet.

Modelle, die auf 5000 synthetischen Bildern, 500 realen Bildern und einer Mischung aus 2000 synthetischen und 300 realen Bildern trainiert wurden; Bewertung für jede Klasse separat

Die Schuhklasse schneidet bei den meisten Modellen schlecht ab. Es ist das komplexeste Objekt, das ich verwendet habe, und auch das am wenigsten farbenfrohe, was zu seiner geringen Punktzahl beitragen kann. Mit komplex meine ich, dass er aus jedem Blickwinkel anders aussieht und einige dünne Segmente in den Schnürsenkeln hat, die beweglich sind.

Die realen Modelle erkennen die Coca-Cola-Dosen sehr gut, bei den anderen Klassen versagen sie jedoch. Bei Verwendung der synthetischen Modelle werden die Cola-Dosen jedoch nicht so leicht erkannt. Das kann an ihren reflektierenden Eigenschaften liegen, die in Unity Perception nicht gut simuliert werden. Allerdings gibt es in Unity Optionen zur besseren Simulation von Reflexionen, die ich nicht vollständig genutzt habe, die aber hier sicherlich helfen könnten.

Die Kellogg's-Müslischachtel ist ein "einfacheres" Objekt und schneidet in rein synthetischen Daten sehr gut ab; dies zeigt, dass ein rein synthetischer Datensatz für diese Art von Objekten bereits gute Ergebnisse liefern kann.

Beispielhafte Erkennung eines Modells, das mit 300 realen Bildern trainiert wurde
Beispiel für die Erkennung eines an 1000 synthetischen Bildern trainierten Modells
Beispiel für die Erkennung eines Modells, das mit 300 realen Bildern und 1000 synthetischen Bildern trainiert wurde

Fazit

In diesem Beitrag habe ich gezeigt, dass das Hinzufügen synthetischer Bilder zu Objekterkennungsmodellen Ihre Modelle erheblich verbessern kann. Ich habe Schritt für Schritt erklärt, wie man das macht, vom Scannen der Objekte bis zum Training der Objekterkennungsmodelle. Ich habe gezeigt, dass die besten Ergebnisse mit einem Modell erzielt werden, das mit einer Mischung aus realen und synthetischen Bildern trainiert wurde, und dass man bereits mit wenigen realen Bildern annehmbare Ergebnisse erzielen kann, wenn man synthetische Daten hinzufügt. Ich kam auch zu dem Schluss, dass einfache Objekte, wie die Kellogg's Box, stark von der Hinzunahme synthetischer Bilder profitieren. Bei Objekten mit dünnen, durchsichtigen oder spiegelnden Segmenten ist es schwieriger, repräsentative Netze zu erhalten, aber selbst Modelle, die auf diesen Objekten trainiert wurden, erzielen bessere Ergebnisse, wenn synthetische Daten hinzugefügt werden.

Bei Modellen mit einem sehr großen Satz qualitativer Bilder aus der realen Welt führt die Hinzufügung synthetischer Daten vielleicht nicht zu Verbesserungen. Bei Modellen mit wenigen qualitativen Bildern aus der realen Welt, wie in meinem Beispiel, führt die Hinzufügung synthetischer Daten jedoch zu einer erheblichen Verbesserung der Ergebnisse. Abschließend kann ich sagen, dass ich mit den Ergebnissen zufrieden bin, da die Verbesserungen durch die Hinzufügung synthetischer Daten noch größer waren als erwartet. Ich hoffe, dass dieser Beitrag für Sie nützlich ist und Sie dazu anregt, dies auszuprobieren und die Simulationen weiter zu verbessern, um noch bessere Ergebnisse zu erzielen!

Verwandte Beiträge

Alle anzeigen
Keine Ergebnisse gefunden.
Es gibt keine Ergebnisse mit diesen Kriterien. Versuchen Sie, Ihre Suche zu ändern.
Stiftung Modelle
Unternehmen
Unser Team
Verantwortungsvolle und ethische KI
Strukturierte Daten
Chat GPT
Nachhaltigkeit
Stimme und Ton
Front-End-Entwicklung
Schutz und Sicherheit von Daten
Verantwortungsvolle/ethische KI
Infrastruktur
Hardware und Sensoren
MLOps
Generative KI
Verarbeitung natürlicher Sprache
Computer Vision