[PYTHON] Reconnaissance faciale des membres Momokuro par TensorFlow (partie 1)

Deuxième décoction est étrange, mais je ne peux m'empêcher d'écrire ce que j'ai fait.

Un ingénieur logiciel qui est complètement nouveau dans l'apprentissage automatique et l'apprentissage profond a créé une application qui utilise un réseau de neurones convolutifs pour identifier les visages des membres de «Momoiro Clover Z».

Ce que j'ai fait

Il fonctionne sur ec2. Cependant, il est lourd car il s'agit de t2.micro.

Classificateur d'images Momokuro http://momomind.kenmaz.net

code https://github.com/kenmaz/momo_mind

スクリーンショット 2016-05-23 3.02.48.png

Contexte

Je (@kenmaz) n'écris que des applications iOS (objc / swift) ces dernières années au travail. Avant cela, j'ai également écrit des applications Web, des applications serveur, des outils de développement, etc. en Java / Ruby / PHP. Ma connaissance de l'apprentissage automatique et de l'intelligence artificielle était donc presque nulle.

Livres de référence et d'auto-expression

J'écrirai sur les raisons pour lesquelles j'ai décidé de créer une application comme le titre, ainsi que l'introduction de quelques livres.

"L'intelligence artificielle surpasse-t-elle les humains?"

Il y avait un livre "L'intelligence artificielle surpasse-t-elle les humains?" Qui est devenu un sujet brûlant à la fin de l'année dernière, mais c'était tellement intéressant que je voulais réellement apprendre l'apprentissage profond et l'essayer.

https://www.amazon.co.jp/ L'intelligence artificielle dépasse-t-elle les humains-Livre de sélection Kakugawa EPUB-Matsuo-Yutaka-ebook / dp / B00UAAK07S

J'ai peur de la singularité! J'ai pensé, mais SF est bien, n'est-ce pas?

"Introduction à la théorie de l'apprentissage automatique pour les ingénieurs informatiques"

Tout d'abord, j'ai lu "Introduction à la théorie de l'apprentissage automatique pour les ingénieurs informatiques". C'est aussi un livre populaire qui est empilé à plat dans la librairie.

http://gihyo.jp/book/2015/978-4-7741-7698-7

Il couvre les bases de l'apprentissage automatique aux explications des mathématiques et des statistiques connexes telles que la méthode des moindres carrés et la méthode d'estimation la plus probable. L'apprentissage en profondeur n'est pas tellement mentionné, mais les sujets autour de Perceptron, les algorithmes de classification basés sur la régression logistique et l'estimation bayésienne semblaient apprendre l'apprentissage automatique, et ils étaient réactifs.

"Commençons par l'apprentissage automatique"

Il s'agit d'une sérialisation Web. Est-il sérialisé par le même auteur que ↑? J'ai aussi lu ceci.

http://gihyo.jp/dev/serial/01/machine-learning

"Mathématiques pour la physique"

Alors, ici, différenciation / intégration hé, oui oui ... J'aurais dû le faire, mais bon, alors j'ai fait un petit détour et M. Haruaki Tazaki de l'Université de Gakuin l'a publié gratuitement. J'ai décidé de lire le document "Mathématiques pour la physique". Il a été recommandé quelque part en tant que manuel de mathématiques de première année au lycée / université.

http://www.gakushuin.ac.jp/~881791/mathbook/

Je l'ai imprimé et lu quand je suis rentré chez moi le jour de l'an. Quand j'y pense maintenant, je me demande si ce n'était pas grave si je ne l'ai pas lu séparément. ..

"Apprentissage en profondeur (série professionnelle d'apprentissage automatique)"

J'ai pensé que les mathématiques étaient bonnes, et j'ai lu à nouveau «Introduction à la théorie de l'apprentissage automatique», mais j'ai pensé que je voulais mordre dans l'apprentissage profond, et j'ai pensé «Deep Learning (Machine Learning Professional Series)». ) "était.

http://www.amazon.co.jp/ Deep Learning-Machine Learning Professional Series-Okaya-Takayuki / dp / 4061529021

Comme le titre l'indique, vous pouvez en apprendre davantage sur l'apprentissage en profondeur. Réseaux de neurones, rétropropagation, auto-codage, réseaux de neurones convolutifs, réseaux de neurones récursifs, etc. .. .. Je ne suis pas un spécialiste, mais j'ai l'impression que cela couvre des sujets importants liés à l'apprentissage profond. De plus, même si vous n'avez pas compris la partie dans le premier tour, lorsque vous l'avez relue après avoir écrit le code, un phénomène comme "Oh, cette formule inconnue, est-ce lié à la partie de ce code que j'ai écrite plus tôt?" Cela arrive souvent, il est donc bon d'avoir le sentiment d'apprendre.

La chose la plus choquante était la description: «Il y a des choses que les chercheurs ne comprennent pas vraiment pourquoi l'ajout d'une couche cachée améliore la précision», et j'ai ressenti de la romance.

Maintenant, À cette époque, je pensais que c'était correct de lire un livre, je voulais écrire quelque chose, et j'ai commencé à penser à faire quelque chose en utilisant TensorFlow, qui était un sujet brûlant à l'époque.

C'est enfin le sujet principal (longue introduction).

Quoi faire

Comme vous pouvez le voir dans le titre, celui que j'ai fait cette fois est presque le même que le contenu de l'article de blog de M. Sugiyan.

Identifiez le visage de l'idole grâce à l'apprentissage profond avec TensorFlow <http://d.hatena.ne.jp/sugyan/20160112/1452558576

Comme prévu, c'est la même chose de faire exactement la même chose, donc même si elle a la même fonction, j'ai pensé que la cible d'analyse devait au moins être différente de la cuisse noire, mais sévère de Mononov En tant qu'ingénieur, je ne pouvais pas m'empêcher d'apprécier ce que faisait M. Sugiyan, alors j'ai décidé d'utiliser le même matériau après tout. Désolé pour la deuxième décoction.

Aperçu du programme

Il se compose de quatre éléments.

crawler
Script Ruby qui collecte des images noires sur le Web

face_detect
Script Python qui coupe la partie du visage de l'image collectée par le robot d'exploration

deeplearning
TensorFlow qui apprend les images faciales en tant que données d'entraînement / de test+Script Python

web
Un script python qui fournit la reconnaissance faciale en tant qu'application Web à l'aide d'un modèle de résultats d'apprentissage

Je ne suis pas sûr de Python, alors écrivons la plupart d'entre eux en Ruby au début! J'ai pensé, mais je pensais que Python était plus avantageux pour gérer openCV (et bien sûr TensorFlow), alors je suis passé à Python comme langage principal à partir du milieu. C'est pourquoi seul le robot d'exploration est Ruby et tout le reste est Python. Utilisons Python docilement.

crawler

https://github.com/kenmaz/momo_mind/blob/master/crawler/url_fetch.rb Tout d'abord, dans ʻurl_fetch.rb`, effectuez une recherche d'image bing en utilisant le nom du membre noir de la cuisse comme mot-clé, et obtenez l'URL de l'image. Il n'y a rien de particulier. À titre de réflexion, le résultat de la recherche d'image bing ne touche que l'image de l'ancienne cuisse noire, et il était difficile de collecter la dernière image. Je pensais qu'il valait mieux tirer l'image de l'Amebro du membre, mais pour le moment, ce n'est que via bing.

https://github.com/kenmaz/momo_mind/blob/master/crawler/download.rb Une fois que vous avez obtenu la liste des URL, téléchargez l'image de battement avec download.rb. Quand je l'ai couru la nuit et que je me suis réveillé le matin, j'en avais beaucoup.

Parfois, la même URL existe et les images sont dupliquées, j'ai donc utilisé la valeur de hachage du binaire de l'image comme nom de fichier au moment de l'enregistrement pour éviter autant que possible la duplication.

Comme mentionné ci-dessus, c'était un robot d'exploration ordinaire.

face_detect Ensuite, à partir des images collectées, nous extrairons les parties du visage en tant que données d'apprentissage. https://github.com/kenmaz/momo_mind/blob/master/face_detect/detect.py

«detect.py» utilise un modèle appelé «haarcascades» fourni par openCV en standard pour détecter uniquement la partie du visage de l'image et la découper en tant qu'image. Cependant, si vous essayez de détecter un visage à l'aide de ce modèle, les problèmes suivants se produiront.

-Si le visage est même légèrement incliné, il ne sera pas détecté comme un visage

En ce qui concerne cette question, j'ai de nouveau fait référence au billet de blog de M. Sugiyan.

API de détection de visage simple avec Heroku + OpenCV http://d.hatena.ne.jp/sugyan/20151203/1449137219

C'est presque le même que ci-dessus, mais le contenu du traitement est le suivant.

Concernant la détection des yeux et de la bouche, nous évaluons comme suit. -Il y a un œil chacun dans le coin supérieur gauche et supérieur droit de l'image -Les positions horizontales des yeux gauche et droit sont presque les mêmes --Il y a une bouche en bas au centre de l'image

C'est un processus lourd car le processus ci-dessus est répété tout en faisant pivoter l'image par incréments de 5 degrés de -50 degrés à 50 degrés.

Ce script est utilisé non seulement pour générer des données d'entraînement, mais également pour détecter les visages à partir d'images téléchargées par les utilisateurs lors de leur publication finale en tant qu'application Web. Il est trop lourd pour détourner le traitement tel quel, donc lorsque je l'utilise comme application Web, j'ai essayé de n'utiliser que les angles de -5 degrés, 0 degrés, 5 degrés. Par conséquent, la détection de visage échoue souvent, mais elle est inévitable.

Pour le problème que le même visage est dupliqué entre des images pivotées, les images de visage dupliquées peuvent être regroupées en faisant pivoter et en déplaçant les coordonnées de chaque visage. Je l'ai fait quand j'étais au lycée.

Conversion primaire du mouvement de rotation http://www.geisya.or.jp/~mwm48961/kou2/linear_image3.html

Formation manuelle / préparation des données de test

Avec cela, un grand nombre d'images de visage de membres de Kuro ont finalement été collectées, mais afin de pouvoir les utiliser comme données d'apprentissage, il est nécessaire de fournir des données d'apprentissage sur l'identité de chaque visage de Kuro. Besoin d'être élevé. À partir de maintenant, j'essaie de créer un programme qui le classe automatiquement, mais à cause du problème des œufs et de la poule, il est nécessaire que les humains créent d'abord les premières données d'apprentissage.

M. Sugiyan semble avoir créé un outil Web pour créer des données d'apprentissage, mais j'étais ennuyé, donc pour le moment, j'ai organisé les images dans le Finder Mac et sélectionné plusieurs images avec cmd + clic → Créer un dossier. J'ai décidé de faire le travail parce que j'en ai envie.

La structure des dossiers ressemble à ceci.

/out
  /train
    /reni
      ..Environ 150 images..
    /kanako
      ..Environ 150 images..
    /shiori
      ..Environ 150 images..
    /arin
      ..Environ 150 images..
    /momoka
      ..Environ 150 images..
  test
    /reni
      ..Environ 150 images..
    /kanako
      ..Environ 150 images..
    /shiori
      ..Environ 150 images..
    /arin
      ..Environ 150 images..
    /momoka
      ..Environ 150 images..

Je me demandais combien les images de formation et de test devraient être distribuées, mais j'en ai préparé environ 150 chacune. Dans un premier temps, vous devez enrichir les données d'entraînement! J'ai donc essayé d'allouer la formation: test = 7: 3, mais les données de test peuvent être biaisées en fonction de la manière de sélectionner les données de test.

J'ai fait de mon mieux pour classer un total de 1500 images par puissance humaine, et je pense que c'était vraiment bon pour l'image du visage du membre Momokuro. Pourquoi ne pas l'essayer avec les membres SMAP? Je l'ai dit, mais je n'aime vraiment pas le travail de classification de 1500 images de visage d'oncle. C'était vraiment bien d'être noir.

スクリーンショット 2016-05-23 2.42.41.png

La fin de la première partie

C'est la fin de la première partie. Personne ne le voudra peut-être, mais je suis sûr que j'écrirai la deuxième partie.

Cliquez ici pour en savoir plus Partie 2: http://qiita.com/kenmaz/items/ef0a1308582fe0fc5ea1#_reference-6ae9a51ee7a7a346d3c1

Recommended Posts

Reconnaissance faciale des membres Momokuro par TensorFlow (partie 1)
Reconnaissance faciale des membres Momokuro par TensorFlow (partie 2)
Reconnaissance faciale des membres Momokuro par TensorFlow (deuxième partie)
Tutoriel TensorFlow - Reconnaissance d'image (traduction)
Reconnaissance faciale en temps réel avec vidéo acquise par getUserMedia [HTML5, openCV]