[('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.
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
Prenons une référence avec l'ensemble de données d'images animales publié par l'Université d'Oxford.
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
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', 0.621), ('Bengal', 0.144), ('Sphynx', 0.087)]
Probabilité abyssinienne 62,1%, probabilité Bengale 14,4%, probabilité Sphinx 8,7%