Dieses Mal habe ich ein Programm erstellt, das die Bilddatenerweiterungsverarbeitung in einem Stapel mit Python ausführt (unter Bezugnahme auf das von imageDataGenerator von Keras behandelte Programm). Wir werden auch auf eine kurze Erklärung und Hinweise zum Datenerweiterungsprozess eingehen. Der Quellcode lautet hier.
Um ein Bilderkennungs- / Klassifizierungsmodell von Deep Learning zu erstellen, ist eine große Menge hochwertiger Lerndaten erforderlich. In den meisten Fällen sind Sie jedoch mit einer Situation konfrontiert, in der die Menge der Trainingsdaten gering ist. Wenn die Trainingsdaten klein sind, können sie durch rohe Gewalt erhöht werden (z. B. durch Schießen auf ein zu lernendes Objekt), dies erfordert jedoch viel Zeit und Mühe. Die Datenerweiterungsverarbeitung ist eine Technik, die nützlich ist, wenn "wenig Trainingsdaten vorhanden sind". Insbesondere werden wir die Anzahl der Daten erweitern, indem wir Inversion, Vergrößerungs- / Verkleinerungsverarbeitung usw. auf die ursprünglichen Trainingsdaten anwenden.
Derzeit gibt es verschiedene Arten der Datenerweiterungsverarbeitung. Dieses Mal werden wir uns jedoch mit der folgenden Verarbeitung befassen. Um das Ergebnis der Anwendung der erweiterten Verarbeitung anzuzeigen, wird aus "Commercial Free Photo Search" ein Katzenbild ([One day YOMOGI by sabamiso]) angezeigt. (http://www.igosso.net/se.cgi?q=%E3%81%82%E3%82%8B%E6%97%A5%E3%81%AE%E3%82%88%E3% 82% 82% E3% 81% 8E & sa =% E6% A4% 9C% E7% B4% A2 & lid = 1 & lia = 1 & lib = 1 & lic = 1)) wurde verwendet.
--Drehung Es ist ein Vorgang, sich in einen beliebigen Winkel zu drehen. Ich denke, dieser Prozess setzt voraus, dass die Winkel der fotografierten Katzen unterschiedlich sind.
Parallele Bewegung in horizontaler und vertikaler Richtung Dies ist ein Vorgang, um das Motiv des Bildes in horizontaler und vertikaler Richtung parallel zu bewegen. Ich denke, dieser Prozess sollte stattfinden, wenn sich die fotografierte Katze links oder oben befindet.
Vergrößern / Verkleinern Dies ist der Vorgang des Vergrößerns oder Verkleinerns des Bildmotivs. Ich denke, dieser Prozess ist für das Schießen von Katzen gedacht, die nah oder fern sind.
Farbtonänderung Es ist ein Prozess, um das Ganze aufzuhellen oder abzudunkeln. Ich denke, dieser Prozess setzt voraus, dass die Aufnahmeumgebung hell oder dunkel ist.
Horizontal spiegeln Es ist ein Vorgang, um die linke und rechte Seite des Bildes umzukehren. Ich denke, dieser Prozess ist für das Schießen von nach links oder rechts gerichteten Katzen gedacht.
Random Erasing Es ist ein Prozess, einen Teil des Bildes mit einem Rechteck zu maskieren (abzudecken). Zu diesem Zeitpunkt werden 1. ob maskiert werden soll oder nicht, 2. die Größe des Rechtecks und 3. das Seitenverhältnis des Rechtecks zufällig bestimmt.
Durch Ausführen von "main.py" wird die unter "Diesmal behandelte Datenerweiterungsverarbeitung" aufgeführte Verarbeitung kombiniert und angewendet, um ein Lernbild zu erstellen. Sie können es verwenden, wie Sie möchten, indem Sie die Variablen im folgenden Quellcode festlegen.
main.Ein Teil von py
# -------------------Unten wird jede Variable einzeln angegeben-------------------
input_dir = 'trainImg' #Ordnername mit dem Originalbild des Lernens
output_dir = "output" #Name des Ausgabeordners nach der Erweiterungsverarbeitung
num = 10 #Anzahl der zu erweiternden Bilder
generator = ImageDataGenerator(
rotation_range=90, #Stellen Sie den Drehwinkel auf 90 ° ein
width_shift_range=0.1, #Nach dem Zufallsprinzip horizontal verschieben
height_shift_range=0.1, #Zufällige Verschiebung in vertikaler Richtung
zoom_range=0.3, #Bereich zum Vergrößern / Verkleinern
channel_shift_range=50.0, #Fügen Sie dem Pixelwert einen zufälligen Wert hinzu
horizontal_flip=False, #Zufällig vertikal gedreht
vertical_flip=True #Nach dem Zufallsprinzip horizontal drehen
)
# -------------------Wie oben erwähnt, wird jede Variable einzeln angegeben-------------------
"Input_dir" enthält 5 ursprüngliche Lernbilder. Wenn Sie "main.py" mit den oben genannten Variablen ausführen, werden in "output_dir" 5x10 Bilder generiert.
Die Datenerweiterungsverarbeitung muss nicht angewendet werden. Wenn Sie beispielsweise ein Zeichenerkennungsmodell für Flat Kana erstellen möchten, ein Zeichenbild (siehe: [https://lab.ndl.go.jp/cms/hiragana73](https: //lab.ndl.go.) Wenn die Datenerweiterungsverarbeitung auf jp / cms / hiragana73)) angewendet wird, treten die folgenden Probleme auf.
--Wenn die Rotationsverarbeitung auf das flache Pseudonym "i" angewendet wird (links: Originalbild, rechts: verarbeitetes Bild) Wie im obigen Ergebnis gezeigt, hat das verarbeitete Bild ähnliche Zeichen wie "ko", sodass es möglicherweise falsch erkannt wird.
--Wenn die Links / Rechts-Inversionsverarbeitung auf das flache Pseudonym "U" angewendet wird (links: Originalbild, rechts: verarbeitetes Bild) Wie im obigen Ergebnis gezeigt, ist das verarbeitete Bild ein nicht existierendes Zeichen, was zu einer Verringerung der Genauigkeit des Zeichenerkennungsmodells führt (bedeutungsloses Lernen).
In diesem Artikel habe ich kurz erklärt, wie ein Datenerweiterungsverarbeitungsprogramm mit Python und Datenerweiterungsverarbeitung erstellt wird. Die Datenerweiterungsverarbeitung kann problemlos durchgeführt werden. Wenn sie gut funktioniert, führt dies zu einer Verbesserung der Genauigkeit. Abhängig vom Ziel des Trainingsbildes kann jedoch durch Anwenden des Datenerweiterungsprozesses ein bedeutungsloses Trainingsbild erzeugt werden. Daher denke ich, dass es notwendig ist zu überlegen, welche Konvertierung (Rotation usw.) verwendet werden sollte und wie viel Konvertierung (oder Winkel, wenn Rotation) gemäß dem Ziel des Trainingsbildes durchgeführt werden sollte.
Recommended Posts