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.
Gro├čes Sprachmodell
Stiftung Modelle
Unternehmen
Unser Team
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