[PYTHON] Identification de la race de chat avec Deep Learning

Identification de la race de chat avec Deep Learning

Russian_Blue_212.jpg

[('Russian_Blue', 0.58100362140429651),


   ('British_Shorthair', 0.22552991563514049),
   ('Abyssinian', 0.057159848358045016),
   ('Bombay', 0.043851502320485049),
   ('Egyptian_Mau', 0.030686072815385441)])]

Détection de chat avec OpenCV a détecté le visage d'un chat, mais cette fois, j'utiliserai la technologie d'apprentissage en profondeur pour identifier la race de chat.

Si vous êtes intéressé, les détails techniques sont écrits sur le blog.

Ici, une technique appelée ** Deep Convolutional Neural Network (DCNN) ** est appliquée à la reconnaissance générale d'objets pour identifier la race de chat. Le problème dans ce domaine est appelé ** Catégorisation visuelle à grain fin (FGVC) **, qui restreint le domaine cible (cette fois la race de chat). Il est difficile d’obtenir une précision élevée car nous avons affaire à des éléments visuellement similaires.

la mise en oeuvre

Il existe plusieurs implémentations DCNN, mais ici nous utilisons une bibliothèque appelée Caffe (* La bibliothèque elle-même est une licence open source BSD 2-Clause, mais les données ImageNet sont Notez que ce n'est pas commercial). La sortie de la couche intermédiaire (couche cachée) de DCNN est extraite en tant que quantité d'entités de 4 096 dimensions, et un classificateur approprié est créé en l'utilisant comme entité pour faire une prédiction. Je pense qu'il serait plus facile d'utiliser l'implémentation scikit-learn pour le classificateur.

Le code source est publié sur GitHub, veuillez donc vous y référer si vous êtes intéressé. Le traitement suivant est mis en œuvre. (C'est un outil de ligne de commande griffonné, pas une bibliothèque.)

:octocat: cat-fancier/classifier at master · wellflat/cat-fancier

Vérification

Prenons une référence avec l'ensemble de données d'images animales publié par l'Université d'Oxford.

cat_classes.jpg

Puisqu'il s'agit de 12 cours, ce sera une tâche légère. Cette fois, nous utiliserons 1800 pour l'apprentissage et 600 pour la vérification. Il semble que le nombre d'images à apprendre soit de 150 par classe, ce qui semble petit, mais s'il s'agit d'environ 12 classes, même ce nombre peut donner une précision raisonnable. Étant donné que le nombre de données est petit, même si vous effectuez une recherche de grille sur un VPS bon marché, l'apprentissage sera terminé en environ des dizaines de minutes. Ici, seuls les résultats de classification par SVM-RBF sont répertoriés.

## SVM RBF Kernel
SVC(C=7.7426368268112693, cache_size=200, class_weight=None, coef0=0.0,
  degree=3, gamma=7.7426368268112782e-05, kernel='rbf', max_iter=-1,
  probability=False, random_state=None, shrinking=True, tol=0.001,
  verbose=False)
 
                   precision    recall  f1-score   support
 
       Abyssinian       0.84      0.91      0.88        47
           Bengal       0.84      0.83      0.84        46
           Birman       0.72      0.79      0.75        52
           Bombay       0.98      0.98      0.98        46
British_Shorthair       0.82      0.75      0.78        53
     Egyptian_Mau       0.87      0.87      0.87        61
       Maine_Coon       0.87      0.89      0.88        45
          Persian       0.85      0.91      0.88        45
          Ragdoll       0.76      0.76      0.76        41
     Russian_Blue       0.84      0.82      0.83        57
          Siamese       0.81      0.69      0.75        55
           Sphynx       0.94      0.96      0.95        52
 
      avg / total       0.85      0.84      0.84       600

svm_confusion_matrix_rbf.png roc.png

Dans le cas du SVM-RBF, la précision était de 84,5%. La précision de certains types à poils longs tels que les poupées de tapis est faible, mais je pense que ce n'est pas grave si la précision jusqu'à présent peut être obtenue avec 1800 données d'apprentissage. Le blog publie également les résultats d'autres classificateurs, mais je pense qu'il est plus réaliste d'utiliser SVM linéaire ou régression logistique pour les données à grande échelle en raison du problème de la vitesse de prédiction.

Il est à noter que le réseau neuronal trouve (apprend) automatiquement les fonctionnalités efficaces pour la reconnaissance, sans utiliser de fonctionnalités artisanales. Cette fois, DCNN a été utilisé comme extracteur de fonctionnalités, mais le réglage fin est utilisé pour affiner l'ensemble du réseau en utilisant d'autres données d'enseignants, en utilisant les paramètres du modèle appris sur la base de données d'enseignants à grande échelle telles qu'ImageNet comme valeurs initiales. Si vous utilisez un modèle créé à l'aide d'une technique appelée (réglage fin), vous pourrez peut-être classer avec une plus grande précision. J'ai essayé diverses choses, mais dans cette tâche, je n'ai pas vu d'amélioration significative de la précision pour le temps (et l'utilisation de la mémoire) requis pour créer le modèle. Je ne pense pas qu'il y ait de difficulté dans la procédure de réglage fin si vous suivez le tutoriel sur le site officiel de Caffe.

Deep CNN est venu à être vu fréquemment dans des compétitions célèbres telles que ILSVRC. À l'avenir, je pense que le nombre de cas où le Deep Learning est utilisé au niveau du produit, comme les services Web et les applications, augmentera régulièrement. Une fois qu'une méthode de niveau pratique est établie, de l'argent sera dépensé pour collecter les données.

Abyssinian_178.jpg [('Abyssinian', 0.621), ('Bengal', 0.144), ('Sphynx', 0.087)] Probabilité abyssinienne 62,1%, probabilité Bengale 14,4%, probabilité Sphinx 8,7%

Recommended Posts

Identification de la race de chat avec Deep Learning
Essayez l'apprentissage en profondeur avec TensorFlow
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
Générez des Pokémon avec Deep Learning
Essayez le Deep Learning avec les concombres FPGA-Select
Faites de l'art ASCII avec l'apprentissage en profondeur
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Vérifiez la forme de squat avec l'apprentissage en profondeur
Catégoriser les articles de presse grâce au Deep Learning
Prévisions des ventes de collations avec apprentissage en profondeur
L'apprentissage en profondeur
Faites sourire les gens avec le Deep Learning
Classez les visages d'anime avec l'apprentissage en profondeur avec Chainer
Essayez les prévisions de prix Bitcoin avec Deep Learning
Essayez avec Chainer Deep Q Learning - Lancement
Essayez l'apprentissage profond de la génomique avec Kipoi
Analyse émotionnelle des tweets avec apprentissage en profondeur
Python: Identification du genre (développement de l'apprentissage profond) Partie 1
Python: Identification du genre (développement de l'apprentissage profond) Partie 2
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Apprentissage en profondeur Python
Apprentissage profond × Python
L'histoire de l'apprentissage profond avec TPU
99,78% de précision avec apprentissage en profondeur en reconnaissant les hiragana manuscrits
Premier apprentissage profond ~ Lutte ~
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python
Une histoire de prédiction du taux de change avec Deep Learning
Apprendre Python avec ChemTHEATER 05-1
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
Deep learning 1 Pratique du deep learning
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
[AI] Apprentissage métrique profond
Apprendre Python avec ChemTHEATER 02
J'ai essayé le deep learning
Apprendre Python avec ChemTHEATER 01
Prédire les tags en extrayant des fonctionnalités musicales avec Deep Learning
Classer les visages d'anime par suite / apprentissage profond avec Keras
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Fonction d'apprentissage profond / softmax
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
[Evangelion] Essayez de générer automatiquement des lignes de type Asuka avec Deep Learning
Créez un environnement pour "Deep Learning from scratch" avec Docker
(Maintenant) Construisez un environnement GPU Deep Learning avec GeForce GTX 960
Reconnaissez votre patron avec Deep Learning et masquez l'écran
[Apprentissage en profondeur] Classification d'images avec un réseau neuronal convolutif [DW jour 4]
J'ai capturé le projet Toho avec Deep Learning ... je le voulais.
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
J'ai essayé d'écrire dans un modèle de langage profondément appris
HIKAKIN et Max Murai avec vidéo de jeu en direct et apprentissage en profondeur
Estimation de la courbe des signes avec module d'apprentissage en profondeur (python) + LSTM