git Daten zur Überprüfung des Lernens
Ich wollte Objekte in festgelegten Mahlzeiten erkennen und einzelne Gerichtenamen extrahieren, also versuchte ich, Objekte in Gerichten zu erkennen. Dieses Mal dachte ich, dass es schwierig sein würde, die detaillierten Geschirrtypen nur durch Objekterkennung zu trennen, daher denke ich, dass es möglich wäre, feines Geschirr mithilfe von Objekterkennung + Bildklassifizierung und zwei CNNs zu erkennen. Also habe ich beschlossen, "Kocherkennung" und "Kochbildklassifizierung" zu trennen. Dieses Mal werde ich die Objekterkennung mit einem eigenen Datensatz erläutern.
Das verwendete Netzwerk ist
Es gibt zwei.
Google Colaboratory Ich habe Google Colaboratory (im Folgenden: colab) als Hauptumgebung für das diesmalige Lernen verwendet. colab ist eine Python-Ausführungsumgebung, mit der Sie die GPU kostenlos verwenden können. Es ist sehr praktisch, wenn keine Umgebung vorhanden ist, da das Lernen einige Zeit in Anspruch nimmt, wenn es keine GPU-Umgebung gibt, in der Sie lokal lernen können. Da die für maschinelles Lernen erforderliche Umgebung ebenfalls vorhanden ist, dauert der Aufbau der Umgebung nicht lange. Wenn die Laufzeit jedoch nach einer kontinuierlichen Betriebszeit von 12 Stunden getrennt wird, werden auch die Dateien im Colaboratory zurückgesetzt. Weitere Informationen zu Colaboratory finden Sie unter Einführung in Python, ohne eine Umgebung zu erstellen! Leicht verständliche Erklärung zur Verwendung von Google Colaboratory usw.
Wie oben erwähnt, habe ich dieses Mal hauptsächlich Colaboratory verwendet. Da die Vorverarbeitung für das Lernen in Colab jedoch einige Zeit in Anspruch nimmt, wird nur die Vorverarbeitung von Daten in der lokalen Umgebung durchgeführt, und Colab wird zum Zeitpunkt des Lernens verwendet. Ich habe es durch Hochladen und Lernen gemacht. Die diesmal tatsächlich verwendete Ausführungsumgebung ist
Es ist geworden.
YOLO Zunächst lernen wir die Objekterkennung in YOLO und führen tatsächlich die Objekterkennung durch.
Um mit YOLO zu lernen, benötigen Sie einen Datensatz mit dem zu lernenden Bild und den Koordinatendaten dieses Bildes als Beschriftung. Dieses Mal müssen Sie sich selbst kennzeichnen, um Ihre eigenen Daten zu lernen. Sie können es manuell beschriften, aber es wird viel Zeit in Anspruch nehmen, daher dieses Mal das Tool zum Erstellen von Trainingsdatensätzen für YOLO labelImg. Ich benutzte.
Informationen zur Verwendung von labelImg finden Sie unter Yolo Learning Dataset Creation Tool: labelImg. Sie können effizient vorgehen.
Übrigens ist der Datensatz, der erstellt wurde, um zu lernen, wie man Kochobjekte dieses Mal erkennt
Da sind fünf. Wir haben ungefähr 700 Blatt pro Klasse beschriftet. Wenn Sie die Genauigkeit verbessern möchten, ist es besser, etwa 1000 Blatt pro Klasse zu beschriften und vorzubereiten.
Dieses Mal werden wir Yolo von Darknet zum Lernen verwenden, also werden wir eine Vorverarbeitung zum Lernen durchführen.
** 1. Installation von Darknet ** Wir werden das zum Lernen notwendige Darknet herunterladen. Die offizielle Website von darknet ist hier. Download gemäß der offiziellen Website
$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet
Laden Sie as herunter und gehen Sie zum Darknet-Ordner.
** 2. Speichern Sie den erstellten Datensatz ** Ich denke, es gibt zwei Typen, das in labelImg verwendete Bild und die txt-Daten, die die erstellten Etikettendaten enthalten. Ich werde diese beiden zum Lernen nach Darknet verschieben. Die Hierarchie der Bild- und TXT-Daten ist
darknet
data
images
images001.jpg images002.jpg ....
labels
images001.txt images002.txt ....
Es wird sein. Selbst wenn mehrere Klassen mit labelImg erstellt werden, werden sie im selben Ordner für Bilder und Laels wie die anderen Klassen gespeichert.
** 3. In Zug teilen und testen ** Der zuvor in Daten gespeicherte Datensatz muss in Trainingsdaten und Testdaten unterteilt werden. Das manuelle Trennen von Trainingsdaten und Testdaten mit Darknet nimmt ebenfalls viel Zeit in Anspruch, daher process.py. Ich werde .py verwenden). Mit diesem Quellcode
percentage_test = 20;
Die Daten werden je nach Bild zufällig durch test20% und train80% geteilt, und diese Pfade werden mit den Dateinamen "test.txt" und "train.txt" ausgegeben. Fügen Sie diese "process.py" in darknet / data ein. danach,
$ python process.py
Erstellt "train.txt" und "test.txt". Wenn Sie das Verhältnis von Trainings- und Testdaten ändern möchten, ändern Sie "Prozent_Test = 20;" auf den gewünschten Wert.
** 4. Vorverarbeitung lernen ** Wir werden verschiedene Parameter in Darknet zum Lernen ändern.
** ・ Einstellung des Klassennamens ** Legen Sie den Namen der Klasse fest, die in Darknet gelernt werden soll. Schreiben Sie in die Dateien mit den Namen obj.names und names.list die zu lernenden Klassennamen zeilenweise. Die Struktur des Ordners ist
darknet
data
images
obj.names images001.jpg images002.jpg ....
labels names.list
Es wird sein. Im Falle der Schalenerkennung wird diesmal verwendet
obj.names/names.list
rice
miso soup
griled fish
salad
noodle
Ich werde schreiben.
** - Legen Sie die Anzahl der Klassen und den Datenpfad fest ** Als eine der Vorverarbeitungen von yolo ist es notwendig, die Anzahl der Klassen und den Datenpfad festzulegen. Wir werden den Inhalt von cfg / obj.data ändern. Der Inhalt von obj.data
obj.data
classes=5 #Anzahl der Klassen
train = data/images/train.txt
valid = data/images/test.txt
labels = data/images/obj.names
backup = backup/
Geben Sie den Pfad der zuvor erstellten Datei ein.
Ändern Sie als Nächstes die Parameter für jede Version, die Sie verwenden möchten. Wenn Sie yolo v2 verwenden möchten, duplizieren Sie darknet / cfg / yolov2-voc.cfg, und wenn Sie v3 verwenden möchten, duplizieren Sie darknet / cfg / yolov3-voc.cfg in cfg. Öffnen Sie diese goro-obj.data
3rd Line Batch=64
4. Zeile Unterteilung=8
classes=5(Anzahl der Klassen)
filters=35(Für yolov2(classes + coords + 1) * 5)
(Für yolov3(classes + +5) * 3)
Bitte wechseln Sie zu.
** ・ Über die Erkennung von Begrenzungsrahmen ** Dieses Mal wollte ich jedes Gericht mit Yolo erkennen und dann ein anderes Netzwerk verwenden, um die Gerichte im Detail zu erkennen. Daher muss ich den Begrenzungsrahmen der Ausgabe erkennen, um jedes Gericht zu erkennen. Bitte ersetzen Sie darknet / src / image.c durch hier, um den Begrenzungsrahmen zu erkennen. Koordinatendaten werden in .txt ausgegeben.
** ・ Anfangsgewicht ** Beim ersten Lernen können die Lernergebnisse leicht konvergieren, indem geeignete Gewichte heruntergeladen werden. Für das anfängliche Gewicht des Lernens yolov2 Anfangsgewichtsdatei https://pjreddie.com/media/files/darknet19_448.conv.23 yolov3 Anfangsgewichtsdatei https://pjreddie.com/media/files/darknet53.conv.74 Bitte laden Sie es von hier herunter und legen Sie es im Darknet-Ordner ab.
Zu diesem Zeitpunkt ist die Vorverarbeitung endgültig abgeschlossen, und wir werden endlich mit dem Lernen im Labor beginnen.
** 1. Ordner hochladen ** Zunächst werde ich den Darknet-Ordner hochladen, der dieses Mal vorverarbeitet und beschriftet und festgelegt wurde. Es gibt ein 12-Stunden-Limit für das Labor, und alle Dateien im Labor werden zurückgesetzt. Anstatt also direkt auf colab hochzuladen, laden Sie es auf Google Drive hoch und mounten Sie es auf dem Laufwerk auf colab, um die Mühe zu vermeiden, jedes Mal hochzuladen (ich denke, das Hochladen dauert eine beträchtliche Zeit. .). Melden Sie sich daher in Ihrem Google-Konto an und laden Sie jeden Darknet-Ordner ** auf das von Ihnen verwendete Laufwerk hoch. Es ist möglich, colab zu komprimieren und dann hochzuladen und zu dekomprimieren. Da der Dekomprimierungscode jedoch nicht in dem diesmal verwendeten Code für colab enthalten ist, können Sie ihn ohne Komprimierung hochladen, wenn Sie die Quelle unverändert verwenden Vielen Dank.
** 2. Auf Colab lernen und erkennen ** Laden Sie zum Lernen und Erkennen den ** Quellcode von hier als .ipynd herunter, laden Sie ihn auf das Laufwerk hoch, starten Sie ihn und führen Sie ihn von oben aus ** aus. Sie sollten in der Lage sein, Objekte mit zu lernen und zu erkennen. Legen Sie das zu erkennende Bild in den Darknet-Ordner und ändern Sie den Dateipfad und den Namen im Teil "Objekterkennung durchführen" des Quellcodes. (Möglicherweise ist dies aufgrund der auf colab heruntergeladenen Version von cuda usw. nicht möglich. In diesem Fall wechseln Sie bitte zur neuesten Version und führen Sie pip usw. durch.) Da es auf dem Laufwerk bereitgestellt ist, ändert sich der Dateipfad je nach Laufwerkslayout usw. ** Bitte achten Sie auf den Dateipfad! ** ** **
Außerdem werden die während des Lernens ausgegebenen Lerngewichte automatisch in Darknet / Backup gespeichert. Wenn Sie die einmal erlernten Gewichte lernen möchten, ändern Sie den Gewichtspfad des Teils "Lernen mit Yolo" in Ihre eigenen ** Buckup / Yolo-XXX.Gewichte **.
Wenn Sie mit dem ipynd-Quellcode fortfahren, wird das zugeschnittene Bild gespeichert. Bei der Ausführung wird die Position der Koordinaten aus dem für die Objekterkennung verwendeten Bild unter Verwendung der zum Zeitpunkt der Objekterkennung ausgegebenen Begrenzungsrahmenkoordinaten abgeschnitten und das Bild im Bildordner gespeichert.
Dieses Mal führten wir eine Bildklassifizierung durch, indem wir mit VGG-16 lernten, das mit einem Datensatz namens UEC-FOOD100 übertragen wurde. Grundsätzlich können Sie es verwenden, indem Sie es gemäß dem Quellcode von oben ausführen. Diesmal haben wir jedoch Transferlernen zur Überprüfung des Kochens durchgeführt. Bitte haben Sie Verständnis dafür, dass diejenigen, die von 0 lernen, einen Datensatz dafür erstellen müssen. Wenn Sie die diesmal erstellten Gewichte überprüfen möchten, achten Sie bitte auf den Dateipfad.
Es wird die Erkennung des Objektbereichs unserer Küche sein. Erstens ist Verlust (Verlustfunktion). Es sieht aus wie das. Die Anzahl der Lernvorgänge betrug 4073 und der Verlustwert betrug "0,09". Es wurde gesagt, dass es auf ungefähr 0,06 fallen würde, also denke ich, dass es in Ordnung gewesen wäre, ein bisschen mehr zu lernen.
Als nächstes ist hier die tatsächliche Eingabe des Bildes, um das Objekt zu erkennen.
Ist es nicht schlimm Dies ist ein Beispiel für so etwas. Ich denke, es ist ein gutes Beispiel dafür, dass Reis, Misoso-Up, gegrillter Fisch und das diesmal gelernte Etikett fest erkannt werden konnten. Das Folgende ist das Ergebnis einer detaillierteren Erkennung dieser mithilfe des Vgg-Net-Transfer-Lernens.
Es sieht aus wie das. Da es als weißer Reis aus der als Reis ausgedrückten Objektbereichserkennung wieder erkannt wurde, scheint es, dass die Feinklassifizierung aus der rauen Bereichserkennung des Zwecks dieses Mal erfolgreich war. Der letzte gegrillte Fisch hat jedoch ein völlig anderes Erkennungsergebnis wie Omuraisu.
Wenn Sie das Gewicht des obigen Ergebnisses der Kochobjekterkennung verwenden möchten, um nur die Erkennung durchzuführen https://drive.google.com/open?id=1F8hbp5OGM5syGDQLpFPxbP1n9yFz804K Entpacken Sie diese Daten, laden Sie sie auf das Laufwerk hoch und führen Sie die Objekterkennung .ipynd von oben aus. Ich denke, wir können die Objekte der Gerichte erkennen, die wir gelernt haben. Beachten Sie auch, dass Sie den ** Dateipfad selbst ändern müssen! ** ** **
Katzen, Raum, Musik und Zählen von Objekten mit Darknet (YOLO) in Google Colab [Bilderkennung] https://wakuphas.hatenablog.com/entry/2018/09/19/025941#Google-Colaboratory%E3%81%A8%E3%81%AF offizielle Darknet-Website https://pjreddie.com/darknet/yolo/ YOLO V3: Originaldaten lernen http://demura.net/misc/14458.html
Recommended Posts