Zweite Abkochung ist unvollständig, aber ich kann nicht anders, als zu schreiben, was ich getan habe.
Ein Softwareentwickler, der mit maschinellem Lernen und tiefem Lernen völlig neu ist, hat eine App erstellt, die ein Faltungsnetzwerk verwendet, um die Gesichter von Mitgliedern von "Momoiro Clover Z" zu identifizieren.
Es läuft auf ec2. Es ist jedoch schwer, weil es t2.micro ist.
Momokuro Bildklassifizierer http://momomind.kenmaz.net
Code https://github.com/kenmaz/momo_mind
Ich (@kenmaz) habe in den letzten Jahren bei der Arbeit nur iOS-Apps (objc / swift) geschrieben. Davor habe ich auch Web-Apps, Server-Apps, Entwicklungstools usw. in Java / Ruby / PHP geschrieben. Mein Wissen über maschinelles Lernen und künstliche Intelligenz war also fast Null.
Ich werde darüber schreiben, warum ich beschlossen habe, eine App wie den Titel zu erstellen, zusammen mit der Einführung einiger Bücher.
Es gab ein Buch "Übersteigt künstliche Intelligenz den Menschen?", Das Ende letzten Jahres ein heißes Thema wurde, aber es war so interessant, dass ich tatsächlich tiefes Lernen lernen und es ausprobieren wollte.
https://www.amazon.co.jp/ Übersteigt künstliche Intelligenz den Menschen? Kakugawa EPUB-Auswahlbuch-Matsuo-Yutaka-ebook / dp / B00UAAK07S
Ich habe Angst vor Singularität! Ich dachte, aber SF geht es gut, nicht wahr?
Zuerst las ich "Einführung in die Theorie des maschinellen Lernens für IT-Ingenieure". Dies ist auch ein beliebtes Buch, das flach im Buchladen gestapelt ist.
http://gihyo.jp/book/2015/978-4-7741-7698-7
Es reicht von den Grundlagen des maschinellen Lernens bis hin zu Erklärungen verwandter Mathematik und Statistik wie der Methode der kleinsten Quadrate und der wahrscheinlichsten Schätzmethode. Deep Learning wird nicht so oft erwähnt, aber die Themen rund um Perceptron, Klassifizierungsalgorithmen basierend auf logistischer Regression und Bayes'sche Schätzung schienen maschinelles Lernen zu lernen und reagierten.
Dies ist eine Web-Serialisierung. Wird es vom selben Autor wie ↑ serialisiert? Ich habe das auch gelesen.
http://gihyo.jp/dev/serial/01/machine-learning
Also, hier, Differenzierung / Integration hey, ja ja ... ich hätte es tun sollen, aber hey, also machte ich einen kleinen Umweg und Mr. Haruaki Tazaki von der Gakuin Universität gab es kostenlos frei. Ich habe beschlossen, das Dokument "Mathematik für Physik" zu lesen. Es wurde irgendwo als Mathematiklehrbuch für die erste Klasse der High School / Universität empfohlen.
http://www.gakushuin.ac.jp/~881791/mathbook/
Ich druckte es aus und las es, als ich am Neujahrstag nach Hause kam. Wenn ich jetzt darüber nachdenke, frage ich mich, ob es in Ordnung war, wenn ich es nicht separat gelesen habe. ..
Ich fand Mathematik gut und las die obige "Einführung in die Theorie des maschinellen Lernens" noch einmal, aber ich dachte, ich wollte in das tiefe Lernen einbeißen, und ich dachte "tiefes Lernen (Machine Learning Professional Series)". ) "war.
http://www.amazon.co.jp/ Deep Learning-Maschinelles Lernen Professional Series-Okaya-Takayuki / dp / 4061529021
Wie der Titel schon sagt, können Sie etwas über tiefes Lernen lernen. Neuronales Netzwerk, Rückausbreitung, Selbstcodierung, Faltungs-Neuronales Netz, Rekursives Neuronales Netz usw. .. .. Ich bin kein Spezialist, aber ich habe das Gefühl, dass es wichtige Themen im Zusammenhang mit Deep Learning abdeckt. Wenn Sie den Teil lesen, den Sie in der ersten Runde nach dem eigentlichen Schreiben des Codes nicht gut verstanden haben, ein Phänomen wie "Ah, diese unklare Formel, hängt sie mit dem Teil dieses Codes zusammen, den ich zuvor geschrieben habe?" Kommt oft vor, deshalb ist es gut, ein Gefühl des Lernens zu haben.
Das Schockierendste war die Beschreibung: "Es gibt einige Dinge, die Forscher nicht wirklich verstehen, warum das Hinzufügen einer verborgenen Schicht die Genauigkeit verbessert", und ich fühlte Romantik.
Jetzt, Ungefähr zu dieser Zeit dachte ich, es sei in Ordnung, ein Buch zu lesen, ich wollte etwas schreiben, und ich begann darüber nachzudenken, etwas mit TensorFlow zu machen, was zu dieser Zeit ein heißes Thema war.
Dies ist schließlich das Hauptthema (lange Einführung).
Wie Sie dem Titel entnehmen können, entspricht der, den ich diesmal gemacht habe, fast dem Inhalt des Blog-Artikels von Herrn Sugiyan.
Identifizieren Sie das Gesicht des Idols mit tiefem Lernen mit TensorFlow <http://d.hatena.ne.jp/sugyan/20160112/1452558576
Wie erwartet ist es dasselbe, genau dasselbe zu machen. Selbst wenn es dieselbe Funktion hat, dachte ich, dass sich das Analyseziel zumindest von dem schwarzen, aber schweren Mononov im Oberschenkel unterscheiden sollte Als Ingenieur konnte ich nicht anders, als zu genießen, was Mr. Sugiyan tat, und entschied mich schließlich, dasselbe Material zu verwenden. Entschuldigung für den zweiten Sud.
Es besteht aus vier Komponenten.
crawler
Ruby-Skript, das schwarze Bilder aus dem Web sammelt
face_detect
Python-Skript, das den Gesichtsteil aus dem vom Crawler gesammelten Bild herausschneidet
deeplearning
TensorFlow, der Gesichtsbilder als Trainings- / Testdaten lernt+Python-Skript
web
Ein Python-Skript, das die Gesichtserkennung als Web-App mithilfe eines Modells der Lernergebnisse bietet
Ich bin mir bei Python nicht sicher, also schreiben wir das meiste zuerst in Ruby! Ich dachte, aber ich dachte, dass Python für den Umgang mit openCV (und natürlich TensorFlow) vorteilhafter ist, also wechselte ich von der Mitte zu Python als Hauptsprache. Deshalb ist nur Crawler Ruby und alles andere ist Python. Verwenden wir Python gehorsam.
crawler
https://github.com/kenmaz/momo_mind/blob/master/crawler/url_fetch.rb Führen Sie zunächst in "url_fetch.rb" eine Bing-Bildsuche mit dem Namen des schwarzen Oberschenkelelements als Schlüsselwort durch und ermitteln Sie die Bild-URL. Es gibt nichts Besonderes. Als Reflexionspunkt trifft das Suchergebnis der Bing-Bildsuche nur das Bild des alten Oberschenkelschwarzes, und es war schwierig, das neueste Bild zu erfassen. Ich dachte, es wäre besser, das Bild vom Amebro des Mitglieds zu ziehen, aber vorerst ist es nur über Bing.
https://github.com/kenmaz/momo_mind/blob/master/crawler/download.rb
Sobald Sie die URL-Liste erhalten haben, laden Sie das hämmernde Bild mit download.rb
herunter. Als ich es nachts laufen ließ und morgens aufwachte, hatte ich viel davon.
Gelegentlich existiert dieselbe URL und die Bilder werden dupliziert. Daher habe ich zum Zeitpunkt des Speicherns den Hashwert der Bildbinärdatei als Dateinamen verwendet, um eine Duplizierung so weit wie möglich zu vermeiden.
Wie oben erwähnt, war es ein gewöhnlicher Crawler.
face_detect Als nächstes extrahieren wir aus den gesammelten Bildern die Gesichtsteile als Lerndaten. https://github.com/kenmaz/momo_mind/blob/master/face_detect/detect.py
detect.py
verwendet standardmäßig ein von openCV bereitgestelltes Modell namens haarcascades
, um nur den Gesichtsteil aus dem Bild zu erkennen und als Bild auszuschneiden. Wenn Sie jedoch versuchen, ein Gesicht mit diesem Modell zu erkennen, treten die folgenden Probleme auf.
-Wenn das Gesicht auch nur ein wenig geneigt ist, wird es nicht als Gesicht erkannt
In Bezug auf dieses Problem habe ich noch einmal auf den Blog-Beitrag von Herrn Sugiyan verwiesen.
Einfache Gesichtserkennungs-API mit Heroku + OpenCV http://d.hatena.ne.jp/sugyan/20151203/1449137219
Es ist fast das gleiche wie oben, aber der Verarbeitungsinhalt ist wie folgt.
--Drehen Sie das Bild selbst um 5 Grad, um das Gesicht zu erkennen => Lösen Sie das Problem der Gesichtsneigung
In Bezug auf die Erkennung von Augen und Mund bewerten wir Folgendes.
Dies ist ein schwerer Vorgang, da der obige Vorgang wiederholt wird, während das Bild in Schritten von 5 Grad von -50 Grad auf 50 Grad gedreht wird.
Dieses Skript wird nicht nur zum Generieren von Trainingsdaten verwendet, sondern auch zum Erkennen von Gesichtern aus Bildern, die von Benutzern hochgeladen wurden, wenn sie schließlich als Webanwendung veröffentlicht werden. Es ist zu schwer, die Verarbeitung so umzuleiten, wie sie ist. Bei der Verwendung als Webanwendung habe ich versucht, nur die Winkel von -5 Grad, 0 Grad, 5 Grad zu verwenden. Daher schlägt die Gesichtserkennung häufig fehl, ist jedoch unvermeidlich.
Für das Problem, dass dasselbe Gesicht zwischen gedrehten Bildern dupliziert wird, können die duplizierten Gesichtsbilder durch Drehen und Verschieben der Koordinaten jedes Gesichts gruppiert werden. Ich habe es getan, als ich in der High School war.
Primäre Umwandlung der Drehbewegung http://www.geisya.or.jp/~mwm48961/kou2/linear_image3.html
Damit wurde endlich eine große Anzahl von Gesichtsbildern von Kuro-Mitgliedern gesammelt, aber um diese als Lerndaten verwenden zu können, ist es notwendig, als Lerndaten anzugeben, wer jedes Gesicht von Kuro ist. Muss angehoben werden. Von nun an versuche ich, ein Programm zu erstellen, das es automatisch klassifiziert. Aufgrund des Problems mit Eiern und Hühnern ist es jedoch erforderlich, dass der Mensch zuerst die ersten Lerndaten erstellt.
Herr Sugiyan scheint ein Web-Tool zum Erstellen von Lerndaten erstellt zu haben, aber ich war verärgert. Daher habe ich die Bilder vorerst im Mac Finder angeordnet und mehrere Bilder mit cmd + Klicken → Ordner erstellen ausgewählt. Ich habe mich für die Arbeit entschieden, weil es sich so anfühlt.
Die Ordnerstruktur sieht so aus.
/out
/train
/reni
..Über 150 Bilder..
/kanako
..Über 150 Bilder..
/shiori
..Über 150 Bilder..
/arin
..Über 150 Bilder..
/momoka
..Über 150 Bilder..
test
/reni
..Über 150 Bilder..
/kanako
..Über 150 Bilder..
/shiori
..Über 150 Bilder..
/arin
..Über 150 Bilder..
/momoka
..Über 150 Bilder..
Ich habe mich gefragt, wie viel die Trainings- und Testbilder verteilt werden sollen, aber ich habe jeweils etwa 150 vorbereitet. Zunächst sollten Sie die Trainingsdaten anreichern! Also habe ich versucht, Training zuzuweisen: test = 7: 3, aber dann können die Testdaten abhängig von der Auswahl der Testdaten verzerrt sein.
Ich habe mein Bestes getan, um insgesamt 1.500 Bilder nach menschlicher Kraft zu klassifizieren, und ich denke, dass dies wirklich gut für das Gesichtsbild eines Momokuro-Mitglieds war. Warum versuchst du es nicht mit SMAP-Mitgliedern? Ich habe das gesagt, aber ich mag es wirklich nicht, 1500 Gesichtsbilder von Onkeln zu klassifizieren. Es war wirklich gut, schwarz zu sein.
Dies ist das Ende des ersten Teils. Niemand mag es wollen, aber ich bin sicher, ich werde den zweiten Teil schreiben.
Klicken Sie hier für mehr Teil 2: http://qiita.com/kenmaz/items/ef0a1308582fe0fc5ea1#_reference-6ae9a51ee7a7a346d3c1
Recommended Posts