[PYTHON] Les réseaux de neurones rêvent-ils d'une souris électrique?

Cet article est l'article du 23ème jour du Tech-Circle Hands on Advent Calendar 2016. La publication a été retardée.

L'article du 22 est [@ morio36](http://qiita.com/morio36 "morio36" "Prise de vue automatique thêta à l'approche d'un lieu spécifique à l'aide de Wikitude" (http://qiita.com/morio36/items/3a461e2f26f82e23d059 "A l'approche d'un lieu spécifique à l'aide de Wikitude" C'était le tir automatique Theta "). Un article très intéressant appelé AR utilisant Theta!

introduction

Aimez-vous Pokemon? Pokemon a récemment publié un nouveau titre, mais il semble que 801 types apparaissent actuellement.

Au fur et à mesure que le nombre augmente, des Pokémon similaires sortiront. N'est-il pas difficile d'identifier correctement les Pokémon parmi eux? 1482519198rtKJeZJsIj6v83T1482518933.gif Cité ci-dessous http://www.pokemon.co.jp/ex/sun_moon/ http://www.pokemon.jp/

Donc, en utilisant le deep learning, qui est populaire de nos jours Cet article vise à identifier Pokémon.

Aperçu

Le but de cet article est de mettre en œuvre et d'exécuter l'apprentissage en profondeur pour la première fois. Il n'y a pas d'explication détaillée de la méthode, mais à travers les points que j'ai trouvés en la déplaçant réellement et les points sur lesquels je suis tombé par hasard J'espère que vous serez intéressé.

Cible

Apprenez les images de "Pikachu" et "Dedenne" Le but est de pouvoir distinguer correctement les deux dans le test.

environnement

L'environnement suivant a été utilisé. ・ Mac (OS X El Capitan 10.11.6) ・ Python 3.5.0

Préparation

Tensorflow publié par Google en tant que bibliothèque d'apprentissage en profondeur, Rend OpenCV disponible en tant que bibliothèque de reconnaissance d'image.

Installation d'Anaconda

Installez Anaconda, le système de gestion de paquets Python. Les systèmes de gestion de paquets Python incluent pip, mais Anaconda est recommandé pour l'utilisation d'OpenCV. (J'ai accidentellement perdu quelques heures de mon choix ici.) La raison sera décrite plus tard.

Pour la méthode d'installation, je me suis référé à ici. Installez la série Python3 Anaconda.

J'ai également besoin d'installer Homebrew et pyenv, mais j'ai pu continuer sans aucun problème.

Aussi, pour une introduction et une explication sur Python, l'article ici est recommandé, alors jetez un œil!

installation de tensorflow

Vous pouvez également développer avec scratch lors de la mise en œuvre du deep learning, Utilisez la bibliothèque tensorflow. J'ai évoqué [ici](http://pythondatascience.plavox.info/tensorflow%E3%81%A7%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97 % E3% 83% A9% E3% 83% BC% E3% 83% 8B% E3% 83% B3% E3% 82% B0 / ubuntu-linux% E3% 81% AB% E3% 82% A4% E3% 83 % B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB /).

L'une des choses qui a un peu trébuché était l'activation de l'environnement. Dans mon environnement, je n'ai pas pu activer selon l'article, j'ai donc fait ce qui suit.

source ~/.pyenv/versions/Version Anaconda/bin/activer le nom de l'environnement virtuel

De plus, comme l'article correspondant est pour Linux, il est nécessaire de remplacer la version par celle pour Mac lors de l'installation de tensorflow.

OK si vous pouvez importer tensorflow en mode interactif python.

$ python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:52:12) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> 

Installation d'OpenCV

C'est le plus emballé. Pour la série Python3, vous devez installer OpenCV3. (OpenCV2 pour la série Python2)

Vous pouvez également installer OpenCV3 avec la commande suivante dans Homebrew, Je ne pouvais tout simplement pas le résoudre. (Pour autant que je puisse le trouver sur le net, il semble que certaines personnes puissent le faire)

 brew install opencv3 --with-python3

C'est là qu'Anaconda entre en jeu. Comme OpenCV3 est déjà préparé en tant que bibliothèque Anaconda, Vous pouvez le résoudre rapidement en installant avec la commande suivante!

conda install -c https://conda.anaconda.org/menpo opencv3

Quand je l'ai vérifié après l'installation, cela semble fonctionner. (Importez OpenCV2 et OpenCV3 en tant que cv2)

$ python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:52:12) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>> 

L'environnement est maintenant prêt!

la mise en oeuvre

En parlant d'images dans l'apprentissage en profondeur, la méthode appelée Convolutional Neural Network (CNN) est orthodoxe, je vais donc également porter un jugement avec CNN cette fois-ci. En outre, OpenCV est utilisé pour unifier la taille de l'image du professeur.

Cette fois, pour plus de commodité, je vais presque utiliser le code de Identifier la société de production d'animation Yuruyuri avec TensorFlow et l'implémenter. fait.

À l'origine, la manière de la mettre en œuvre était le vrai plaisir, mais nous en avons fait notre premier objectif de la déplacer. La précision changera en fonction des paramètres de filtre et de la configuration des couches, qui sont la clé de CNN. J'espère approfondir ma compréhension en la comparant à la mise en œuvre tout en encourageant l'étude à l'avenir.

Points de correction

Correction de la partie liée à la description du système python2 et du chemin à l'exécution.

・ Lignes 156 et 175 Puisque les données de l'enseignant et les données de test concernaient des images disposées dans la même couche, elles ont été corrigées à des endroits arbitraires. ・ Ligne 214 Lorsque vous décidez de l'entraînement à exécuter pour chaque taille de lot, le type donné à range devient float et une erreur se produit, alors transtypez-le en type int ・ Lignes 228 et 238 Puisqu'il est devenu une fonction d'impression en python3, des parenthèses sont ajoutées

Image de l'enseignant / image de test

Les données d'image de l'enseignant seront placées dans le répertoire spécifié dans les points de correction ci-dessus. Nous avons placé 100 images au total sur 2 images (Pikachu Dedenne) acquises par recherche d'images google. J'ai exclu les images qui ne sont pas pertinentes dans les résultats de recherche par mot-clé, mais cela a été assez difficile.

En plus de l'image de l'enseignant, nous avons préparé 100 images de test au total.

[Ce que je n'ai pas pu faire cette fois] ・ Le nombre de données sur les enseignants est extrêmement insuffisant. Il existe une méthode de traitement d'image (inversion, réglage de la luminosité, etc.) comme méthode de gonflage pour augmenter le nombre de données, mais cette fois ce n'est pas fait. -Bien que le redimensionnement d'image soit effectué dans l'implémentation, il est dit qu'un prétraitement tel que la normalisation est effectué, mais il n'est pas effectué.

Données de l'enseignant / données de test

Il est placé dans la même couche que le fichier d'exécution comme train.txt et test.txt. Le format est le suivant.

Nom du fichier Nom de l'étiquette

Courir

Faisons le!

$ python pika_pre.py
step 0, training accuracy 0.590909
step 1, training accuracy 0.409091
step 2, training accuracy 0.654545
step 3, training accuracy 0.7
step 4, training accuracy 0.745455
step 5, training accuracy 0.772727
step 6, training accuracy 0.827273
step 7, training accuracy 0.890909
step 8, training accuracy 0.918182
step 9, training accuracy 0.845455
step 10, training accuracy 0.881818
step 11, training accuracy 0.954545
step 12, training accuracy 0.954545
step 13, training accuracy 0.954545
step 14, training accuracy 0.972727
step 15, training accuracy 0.972727
step 16, training accuracy 0.972727
step 17, training accuracy 0.963636
step 18, training accuracy 0.963636
step 19, training accuracy 0.972727
step 20, training accuracy 0.972727
step 21, training accuracy 0.981818
step 22, training accuracy 0.990909
step 23, training accuracy 1
step 24, training accuracy 1

réduction

test accuracy 0.838095

Le pourcentage de réponses correctes pendant la formation est émis comme précision de la formation. À l'étape 0, il est de 59%, C'était 100% après l'étape 23.

En outre, le résultat de l'évaluation des données de test après la fin de l'apprentissage était un taux de réponse correcte de 83%.

Cela semble un peu suspect. Compte tenu de la quantité et de la qualité des données sur les enseignants, je m'attendais à ce qu'elles ne soient pas très précises en si peu de temps.

Avec tensorflow, vous pouvez facilement visualiser le processus d'apprentissage et le flux de données en utilisant une fonction appelée tensorboard, alors vérifions cela également. Exécutez la commande suivante, puis ouvrez l'URL affichée dans votre navigateur.

tensorboard --logdir /tmp/data
Starting TensorBoard b'29' on port 6006
(You can navigate to http://192.168.11.7:6006)

スクリーンショット 2016-12-23 23.21.10.png

Hmmm, est-ce si précis? Il semble qu'il soit nécessaire de se demander si cela fonctionne comme prévu.

Résumé

J'ai pu apprendre ce qui suit lorsque je l'ai essayé pour la première fois cette fois. ・ Préparation environnementale (Anaconda, tensorflow, OpenCV) ・ Difficulté à préparer les données des enseignants ・ Comment utiliser le tensorboard

Le prochain endroit que je voudrais essayer est le suivant. ・ Mise en œuvre à partir de 0 ・ Comprendre le tensorflow ・ Comprendre et expérimenter CNN ・ Prétraitement des données des enseignants

"Vous êtes maintenant! Nous avons fait le premier pas vers la mise en œuvre de l'apprentissage en profondeur!" Je vais donc continuer à étudier l'apprentissage automatique.

référence

http://qiita.com/icoxfog417/items/02a80b93b5f1e95f2795 http://qiita.com/icoxfog417/items/5fd55fad152231d706c2 http://qiita.com/bohemian916/items/9630661cd5292240f8c7 http://qiita.com/icoxfog417/items/65e800c3a2094457c3a0 http://qiita.com/shim0mura/items/b0ec437206ed3d19d878 http://qiita.com/icoxfog417/items/fb5c24e35a849f8e2c5d


Demain, ou le 24e jour, ce sera "Technologie de traitement du langage naturel qui prend en charge le système de dialogue" par @shiraco! impatient de!

Recommended Posts

Les réseaux de neurones rêvent-ils d'une souris électrique?
Imagerie d'un réseau de neurones qui reconnaît MNIST
Lignes directrices pour la conception de la couche de sortie des réseaux de neurones
[Tutoriel PyTorch ③] RÉSEAUX NEURAUX