[PYTHON] Gesichtserkennung für Momokuro-Mitglieder durch TensorFlow (Teil 2)

Teil 1: http://qiita.com/kenmaz/items/4b60ea00b159b3e00100 Teil 2: http://qiita.com/kenmaz/items/ef0a1308582fe0fc5ea1

Dies ist eine Fortsetzung der Geschichte eines Software-Ingenieurs, der für maschinelles Lernen und tiefes Lernen völlig neu ist und eine App erstellt hat, die ein Faltungs-Neuronales Netzwerk verwendet, um die Gesichter von Mitgliedern von "Momoiro Clover Z" zu identifizieren.

Lernprozess

Letztes Mal Ich konnte ein Modell mit einer Genauigkeit von 85% erstellen, aber da ich von einem unwissenden Zustand ausgegangen bin, konnte ich am Anfang überhaupt keine Genauigkeit erzielen. tat. Notieren Sie sich den Prozess des Versuchs und Irrtums, da er für jemanden nützlich sein kann.

Erste Version

Verbesserung der Trainingsdaten

Verbesserung der Trainingsdaten 2

Lange Stunden des Lernens

―― Bis jetzt konnte ich das Training mit meinem MacBook Pro in wenigen hundert Schritten beenden. ――Jedoch, wenn Sie sich den Beispielcode usw. ansehen, ist max_step = 100.000, daher denke ich, dass Lernen überhaupt nicht ausreicht. ――Ich habe beschlossen, eine Umgebung auf ec2 zu erstellen, verschiedene Instanzen auszuleihen und sie zu drehen. --Mieten Sie eine $ 1 Stunde c4.4xlarge und führen Sie ca. 15.000 Schritte aus

Überprüfung der Testdaten

In Bezug auf die Genauigkeit für jedes Mitglied war dies wie folgt.

member Richtigkeit
Reni 77%
Natsunako 44%
Shiori 73%
Ahrin 58%
Kyouka 88%

Es war nicht so, dass ich nicht gedacht hätte, dass "Ja, ich möchte wirklich empfohlen werden, weil ich ein unverwechselbares Gesicht habe ... Es gibt eine Geschichte, dass ein schöner Mann und eine schöne Frau dem durchschnittlichen Gesicht näher sind ...", aber ich bin ruhig. Wenn ich darüber nachdenke, kam mir die Idee, dass die Abweichungen in den Trainingsdaten selbst zu groß wären. (Oberschenkelwinkel, und ich bin überzeugt, dass Kyouka relativ genau ist. ・)

Die Trainingsdaten, die ich bisher verwendet habe, sind eine Sammlung der Ergebnisse der mehrmaligen Neuerstellung. Daher unterscheiden sich auch die Programme, die sie generieren, geringfügig, was anscheinend zu Abweichungen bei den Trainingsdaten geführt hat.

Wir bereiten uns auch darauf vor, es parallel als Webdienst zu veröffentlichen, und wir mussten etwas gegen den Gesichtserkennungsteil unternehmen, eine so stabile Gesichtserkennungslogik, dass es keine Unterschiede zwischen den einzelnen Mitgliedern gibt. Aktueller Code wurde im ersten Teil als Ergebnis von Anpassungen erläutert, da dies erforderlich ist. Erstellen Sie mit diesem Typen alle Trainingsdaten neu und trainieren Sie erneut.

=> ** Genauigkeit 77% **

Falten und Pooling-Schicht hinzufügen

――Ich hatte das Gefühl, dass stabile Trainingsdaten erstellt wurden, deshalb habe ich dem Modell hier eine Ebene hinzugefügt, um es tiefer zu machen. Dies war der [aktuelle Modellcode], der zuletzt erklärt wurde (https://github.com/kenmaz/momo_mind/blob/master/deeplearning/mcz_model.py).

Während ich verschiedene dumme Fehler machte, ging ich durch Versuch und Irrtum. .. ** Ich habe von ganzem Herzen erkannt, dass die Qualität der Trainingsdaten und das wiederholte Training wichtig sind **.

ec2 bequem

Übrigens ist in einem Fall wie diesem, in dem Sie eine Hochleistungsmaschine vor Ort benötigen, eine Umgebung wie aws sehr praktisch. Es ist allerdings teuer. Da ich jede Instanz während des Lernens unterschiedlich berührt habe, ist die grobe Leistung so.

Wenn ich versuche, ein sehr tiefes (16 Schichten) tiefes neuronales Netzwerk aufzubauen und ein Training durchzuführen.

Instanztyp Ungefähre Leistung
t2.micor N/A (Kann aufgrund fehlender Ressourcen nicht ausgeführt werden)
MacBook Pro zur Hand 3.4 examples/sec; 34.967 sec/batch)
c4.4xlarge 3.9 examples/sec; 31.142 sec/batch
c4.8xlarge 8.6 examples/sec; 14.025 sec/batch

c4.4xlarge, $ 2 pro Stunde, aber schnell. c4.4xlarge entspricht in etwa MBP. Alle sind jedoch das Ergebnis der Verwendung des CPU-Builds von TensorFlow. Daher möchte ich in Zukunft den GPU-Build ausprobieren, um zu sehen, wie schnell er ist.

Anfangs habe ich auch versucht, verschiedene Dinge mit meinem VPS zu tun, aber mit CentOS6 ist die Kombination aus Glibc-Version und Numpy nicht gut (CentOS6 unterstützt nur bis zu glibc v2.12, Numpy unterstützt Glibc 2.15 Request => CentOS7 ist erforderlich), daher war es ärgerlich, sodass ec2 praktisch ist, da Sie eine Umgebung erstellen und zerstören können. Es ist allerdings teuer.

Damit die Trainingsergebnisse von außen getroffen werden können

Geschulte Modelle können jetzt "tf.train.Saver" verwenden, um Schnappschüsse von wiederholt angepassten Gewichten und Bias-Werten als Modelldatei auszugeben und zu laden.

Dieses Mal wird die Modelldatei jedes Mal ausgegeben, wenn 1000 Schritte ausgeführt werden. https://github.com/kenmaz/momo_mind/blob/master/deeplearning/mcz_main.py

Wenn Sie mithilfe der Lernergebnisse einen Webdienst erstellen möchten, können Sie Code schreiben, der diese Modelldatei liest, Inferenzen ausführt und die Ergebnisse an die Webseite zurückgibt.

Also habe ich einen Code vorbereitet, der nach dem Übergeben des Bilddateipfads eine Inferenz auf das Bild ausführt und das Klassifizierungsergebnis der Mitglieder zurückgibt. https://github.com/kenmaz/momo_mind/blob/master/deeplearning/mcz_eval.py

result = mcz_eval.execute([imgfile1], '.', ckpt_path)

Sie können Code ausführen, z. B. die Modelldatei im Pfad von ckpt_path lesen und das Ergebnis der Inferenz für imgfile1 zurückgeben.

Als Web-App beenden

Nachdem mcz_eval.py erstellt wurde, müssen Sie nur noch mit der vertrauten Webprogrammierung fortfahren. Ich habe jedoch noch nie eine Webanwendung in Python geschrieben, daher scheint die Kombination von "Flask + uWSGI + Nginx" nach vielen Recherchen sinnvoll zu sein. Auf diese Weise wird es unter Bezugnahme auf die folgenden Seiten leise implementiert.

Zusammenfassung und Zukunft

Es stellte sich als ziemlich grober Artikel heraus, aber vorerst war es eine Geschichte, dass so etwas irgendwie durch Versuch und Irrtum gemacht wurde.

Was ich in Zukunft machen möchte

――Ich möchte die Genauigkeit verbessern (twango. Vielen Dank für Ihren Rat.) ――Ich möchte visualisieren, "auf welche Art von Funktion Sie reagiert haben und das Inferenzergebnis erzeugt haben". Zum Beispiel "es gibt eine Reihe verbeulter Pixel = Natsunako" und "die Augen neigen dazu, getrennt zu sein = Kyouka". Eigentlich habe ich es einmal in GW versucht, aber es hat nicht funktioniert. Ich möchte es noch einmal versuchen.

das ist alles!

Recommended Posts

Gesichtserkennung für Momokuro-Mitglieder durch TensorFlow (Teil 1)
Gesichtserkennung für Momokuro-Mitglieder durch TensorFlow (Teil 2)
Gesichtserkennung für Momokuro-Mitglieder durch TensorFlow (zweiter Teil)
Gesichtserkennung mit Edison
TensorFlow Tutorial-Bilderkennung (Übersetzung)
Gesichtserkennung in Echtzeit mit von getUserMedia [HTML5, openCV] aufgenommenem Video