[PYTHON] Divers réglages fins avec Mobilenet v2

introduction

Je l'ai inventé, alors j'ai essayé de classer les images chez moi. Au fait, j'étais curieux, je vais donc écrire un article comparant la précision du réglage fin avec Mobilenet v2.

Quel gâchis pour les gens occupés

・ J'ai essayé divers réglages fins avec Mobilenet v2. ・ C'est une tâche de 3 catégories: chien / chat / oiseau ・ J'ai collecté des images avec Flickr ・ Pas de réglage fin / 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2, réapprendre la première couche et les suivantes / Comparer la précision en réapprenant tout je l'ai vu ・ Cette fois, la précision était bonne avec le même taux de réponse correcte (94,4%) pour l'apprentissage après la 14e couche et l'apprentissage après la 11e couche.

Paramètres de tâche et collection d'images

Il semble que tout peut être fait avec la classification binaire, donc je veux essayer la classification des animaux car il est bon d'obtenir des résultats d'une manière facile à comprendre, alors j'ai pensé que j'aimerais essayer la classification des animaux J'ai décidé d'essayer la classification ternaire avec "" ajouté.

Si c'est le cas, il s'agit d'une collection d'images. Je voulais le récupérer sur le Web, mais quand je regardais diverses choses, il me semblait bon de le récupérer sur flickr, alors j'ai décidé de le collecter avec flickr. J'ai fait référence à cet article. Comment extraire des données d'image de Flickr avec python

Vous pouvez télécharger jusqu'à 500 images de taille 115 * 115 à la fois. (Quand j'ai essayé avidement de télécharger 1000, je ne pouvais en obtenir que 500) Nous avons collecté 500 feuilles chacune avec "chien", "chat" et "oiseau" comme arguments. J'ai décidé de supprimer 450 images dont le sujet était trop petit et des images contenant des humains et d'autres animaux. Trente d'entre eux ont été affectés au test et à la validation, et les 390 autres ont été utilisés pour le train. L'image ressemble à ceci. Le PC est couvert de chiens mignons. スクリーンショット 2020-10-11 11.22.20.png

Triez les images dans des dossiers avec la structure suivante.

├── data │   ├── test │   │   ├── bird │   │   ├── cat │   │   └── dog │   ├── train │   │   ├── bird │   │   ├── cat │   │   └── dog │   └── val │   ├── bird │   ├── cat │   └── dog

Apprentissage et mise au point

Cliquez-ici pour le code https://github.com/kiii142/mobilenetv2_keras

Pour le réglage de la couche de FineTuning, je me suis référé à cette page à laquelle je me réfère toujours. Transfert d'apprentissage / réglage fin avec TensorFlow, Keras (exemple de classification d'image)

L'apprentissage sans fineTuning a commencé avec un taux d'apprentissage de 0,001 et a été formé à 50 époques. L'apprentissage affiné a commencé avec un taux d'apprentissage uniforme de 0,0001 et a été formé à 30 époques. La taille du lot est uniformément 8 et l'image est redimensionnée à 96 * 96 (car certains poids entraînés sont 96 * 96) Cette fois, Optimizer utilise RMSprop en suivant le papier. (J'ai utilisé SGD au début, mais RMSprop est plus précis que cela. Je ne l'ai pas fait en détail cette fois, mais il peut être intéressant de comparer ce domaine.)

Voici les résultats. La matrice de confusion de la courbe d'apprentissage et le résultat de l'image de test sont affichés. J'ai honte de dire que j'ai oublié d'écrire l'axe de la courbe d'apprentissage, mais l'axe vertical est la valeur de (taux de réponse correct et perte), et l'axe horizontal est le nombre d'époques.

Pas de réglage fin

Le poids de Mobilenet v2 est formé avec None. Je peux apprendre avec un bon feeling, mais le taux de réponse correct pour train et val est d'environ 60%. Je veux que tu obtiennes un peu plus de précision Le taux de réponse correct dans l'image de test est de 68,9%

Réapprendre la 16e couche et au-delà

Le poids de Mobilenet v2 est défini sur imagenet, et la 16e couche et les couches suivantes sont recyclées. Le taux de réponse correcte de val est très élevé. Le taux de réponse correct dans l'image de test est de 93,3%

Réapprendre la 15e couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la 15e couche et les suivantes sont recyclées. Encore une fois, le taux de réponse correct pour val est extrêmement élevé. Le taux de réponse correct dans l'image de test est de 90,0%

Réapprendre la 14e couche et au-delà

Le poids de Mobilenet v2 est défini sur imagenet, et la 14e couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 94,4%. se sentir bien.

Réapprendre la 13e couche et au-delà

Le poids de Mobilenet v2 est réglé sur imagenet, et la 13e couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 86,7%. Est-ce que ça a un peu baissé?

Réapprendre la 12e couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la 12ème couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 86,6%

Réapprendre à partir de la 11e couche

Le poids de Mobilenet v2 est défini sur imagenet, et la 11e couche et les couches suivantes sont recyclées. Le taux de réponse correct pour l'image de test est de 94,4%. Je suis venu ici et je suis remonté

Réapprendre à partir de la 10e couche

Le poids de Mobilenet v2 est défini sur imagenet, et la 10e couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 88,9%

Réapprendre la 9e couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la 9ème couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 92,2%

Réapprendre la 8ème couche et les suivantes

Le poids de Mobilenet v2 est réglé sur imagenet, et la 8ème couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 92,2%

Réapprendre la 7e couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la 7ème couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 85,6%

Réapprendre la sixième couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la sixième couche et les couches suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 87,8%

Réapprendre la cinquième couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la 5ème couche et les suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 90,0%

Réapprendre la quatrième couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la 4ème couche et les suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 86,7%

Réapprendre la troisième couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la troisième couche et les suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 88,9%

Réapprendre la deuxième couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la deuxième couche et les suivantes sont recyclées. Le taux de réponse correct dans l'image de test est de 83,3%

Réapprendre la première couche et les suivantes

Le poids de Mobilenet v2 est défini sur imagenet, et la première couche et les suivantes sont réapprises. Le taux de réponse correct dans l'image de test est de 90,0%

Tout réapprendre

C'est le résultat de l'apprentissage sans geler aucune couche en définissant le poids de Mobilenet v2 sur imagenet. Le taux de réponse correct dans l'image de test est de 91,1%

Résumé

En ne regardant que le taux de réponse correct cette fois, le résultat était que le réapprentissage après la 14e couche et le réapprentissage après la 11e couche devraient être liés (94,4%). Fine Tuning est celui qui réapprend en quelque sorte seulement la dernière couche et la précision sort, et je pensais que si j'apprenais à nouveau à la couche précédente, la précision empirerait, mais ce n'était pas si mal. C'est une impression que ça l'est. En premier lieu, le simple fait d'apprendre en utilisant les poids d'imagenet améliorera considérablement la précision, donc je me demande s'il n'y a pas beaucoup de différence.

À la fin

Pour être honnête, c'est vraiment ennuyeux de publier tous les résultats ... Cependant, d'une manière ou d'une autre, à partir de maintenant, j'ai un index que je devrais essayer Fine Tuning pour réapprendre à partir de la 14ème couche en premier. En ce sens, je suis content de l'avoir fait J'aimerais l'implémenter en tant qu'application pour smartphone si j'ai une certaine capacité de réserve pendant mes jours de congé, alors je continuerai à le faire.

Recommended Posts

Divers réglages fins avec Mobilenet v2
J'ai essayé le réglage fin de CNN avec Resnet
Réglage des paramètres avec luigi (2)
Réglage des paramètres avec luigi
Réglage fin BigTransfer (BiT)
Différentes barres de couleurs avec Matplotlib
Hyper réglage des paramètres avec LightGBM Tuner
Essayez différentes choses avec PhantomJS
Réglage des paramètres Keras avec Keras Tuner
Ajout d'une seule ligne avec divers scripts
Manipulez diverses bases de données avec Python
Développé avec Choregraphe et divers mémorandums
Implémentation de SmoothGrad avec Chainer v2