[PYTHON] Le réseau après VGG progresse-t-il vraiment? L'histoire

1.Tout d'abord

Dans cet article, [les compétitions d'IA ne produisent pas de modèles utiles](https://lukeoakdenrayner.wordpress.com/2019/09/19/ai-competitions-dont-produce-useful-models/?utm_campaign=piqcy&utm_medium=email&utm_source=Revue Le problème récent de l'architecture réseau, défini dans% 20newsletter), ne fait-il pas que surentraîner l'ensemble de données et surpasser le jeu de la chance? Le but est d'étudier l'histoire avec l'ensemble de données du fond d'œil grand angle [^ 1]. Aussi, pour les débutants, j'expliquerai comment effectuer un virage fin à partir des poids entraînés d'ImageNet [^ 2] en utilisant le réseau implémenté dans tf.keras.

Tout le code

2. Environnement

  1. AI competitions don’t produce useful models [Article (Les compétitions d'IA ne produisent pas de modèles utiles)](https://lukeoakdenrayner.wordpress.com/2019/09/19/ai-competitions-dont-produce-useful-models/?utm_campaign=piqcy&utm_medium=email&utm_source=Revue Ceci est un aperçu de la newsletter% 20). Dans la compétition d'apprentissage automatique, les résultats finaux des données de test ne sont pas ouverts, de sorte que le modèle ne peut être évalué qu'une seule fois. Cela rend impossible la modélisation de gasha. Il semble que cette mesure fonctionne car elle ne peut être évaluée qu'une seule fois par équipe. Cependant, ce n'est pas le cas lorsqu'on regarde la concurrence dans son ensemble. Par exemple, si 100 équipes participent, cela signifie qu'elles font du gasha modèle 100 fois. L'équipe gagnante a eu la chance de battre ce Gasha, mais pas la meilleure méthode. De plus, les résultats des meilleures équipes sont en compétition dans certaines compétitions. Lorsque le test de différence significative est effectué, les résultats des meilleures équipes ne sont que des erreurs, et une plus grande quantité de données de test doit être préparée pour faire une différence significative. Il semble que la précision s'est améliorée jusqu'à VGG, mais il est douteux après cela, et il est possible que cela ne fasse que surentraîner les données de test.

image.png

Cette fois, en utilisant le jeu de données du fond d'œil grand angle [^ 1], VGG16 [^ 3], DenseNet121 [^ 4], ResNet50 [^ 5], InceptionV3 [^ 6], NASNetMobile [^ 7], EfficientNet-B0 [^ 8] ] Évaluation des performances pour savoir si le réseau après VGG16 s'améliore vraiment.

4. Ensemble de données et fractionnement des données du fond d'œil

Veuillez vous référer à cet Article (Classification des images par jeu de données d'image du fond de l'œil grand angle) pour l'explication de l'ensemble de données du fond de l'œil grand angle et comment les données ont été divisées. ..

5. Construction et apprentissage de modèles

Ce chapitre décrit comment effectuer un virage fin avec le modèle entraîné de Réseau implémenté et ImageNet [^ 2] pour commencer. À propos, le tournage fin * ne contribue pas à l'amélioration de la précision car le domaine de l'image est trop différent de celui d'ImageNet dans le jeu de données du fond d'œil grand angle, mais il contribue à l'amélioration de la vitesse de convergence. Pour plus de détails, voir [Article (Efficacité du transfert de l'apprentissage aux images médicales)](https://speakerdeck.com/uchi_k/lun-wen-shao-jie-yi-yong-hua-xiang-hefalsezhuan-yi- xue-xi-falseyou-xiao-xing-nituite-transfusion-comprehension-transfer-learning-for-medical-imaging). Modifiez la partie de construction du modèle à partir de cet Article (Classification des images par jeu de données d'image du fond d'œil grand angle). Le paramètre d'apprentissage a changé le taux d'apprentissage à "0,00001". Tout d'abord, «importez» la bibliothèque.

from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, Activation

Ensuite, construisez le réseau. Cette fois, je vais vous expliquer en utilisant VGG16 comme exemple. Commencez par charger VGG16 comme modèle de base. Cette fois, le but est de tourner finement à partir des poids entraînés d'ImageNet [^ 2], alors construisez un réseau jusqu'à la couche de convolution finale avec ʻinclude_top = False, et apprenez ImageNet [^ 2] avec weights = 'imagenet'`. Lisez les poids finis. Ensuite, de la même manière que Article (Classification des images par jeu de données d'image du fond de l'œil grand angle), combinez-le avec la couche entièrement connectée chargée VGG16.

base_model = VGG16(include_top=False, weights='imagenet', pooling='avg',
                   input_shape=(image_size[0], image_size[1], 3))
x = Dense(256, kernel_initializer='he_normal')(base_model.output)
x = Dense(classes, kernel_initializer='he_normal')(x)
outputs = Activation('softmax')(x)
model = Model(inputs=base_model.inputs, outputs=outputs)

Si vous utilisez un autre réseau, par exemple ResNet50, vous pouvez l'utiliser en remplaçant «VGG16» par «ResNet50». Un exemple de code pour d'autres réseaux est téléchargé ici [https://github.com/burokoron/StaDeep/tree/master/fine-turning). Au fait, EfficientNet-B0 n'a pas été publié, mais il a été implémenté, donc keras-team / keras-applications'efficnet.py sur GitHub. J'ai téléchargé et utilisé applications / blob / master / keras_applications / coefficientnet.py).

Les résultats d'apprentissage sont les suivants. NASNetMobile [^ 7] est le seul à ne pas présenter de divergence entre la perte d'apprentissage et la perte de vérification. Bien que l'accréditation soit divergente. EfficientNet-B0 [^ 8] Est-ce vraiment beau car il n'y a que le dernier modèle? est. ネットワーク比較.png

6. Évaluation

L'évaluation a été réalisée en utilisant la valeur F de la même manière que cet Article (Classification des images par jeu de données d'image du fond d'œil grand angle). Les résultats sont montrés plus bas.

<détails>

Résultats détaillés </ summary>

# VGG16
              precision    recall  f1-score   support

         AMD       0.28      0.53      0.37        75
       DR_DM       0.81      0.75      0.78       620
         Gla       0.73      0.76      0.74       459
          MH       0.12      0.22      0.16        32
      Normal       0.75      0.75      0.75       871
          RD       0.93      0.77      0.84       176
          RP       0.91      0.78      0.84        50
         RVO       0.84      0.60      0.70       107

    accuracy                           0.73      2390
   macro avg       0.67      0.65      0.65      2390
weighted avg       0.76      0.73      0.74      2390

# ResNet50
              precision    recall  f1-score   support

         AMD       0.26      0.56      0.36        75
       DR_DM       0.95      0.61      0.74       620
         Gla       0.78      0.61      0.68       459
          MH       0.30      0.25      0.27        32
      Normal       0.64      0.84      0.73       871
          RD       0.85      0.85      0.85       176
          RP       0.64      0.88      0.74        50
         RVO       0.85      0.57      0.68       107

    accuracy                           0.71      2390
   macro avg       0.66      0.65      0.63      2390
weighted avg       0.76      0.71      0.71      2390

# InceptionV3
              precision    recall  f1-score   support

         AMD       0.28      0.53      0.37        75
       DR_DM       0.84      0.68      0.75       620
         Gla       0.74      0.68      0.71       459
          MH       0.29      0.16      0.20        32
      Normal       0.69      0.81      0.74       871
          RD       0.91      0.80      0.85       176
          RP       0.83      0.76      0.79        50
         RVO       0.64      0.52      0.57       107

    accuracy                           0.72      2390
   macro avg       0.65      0.62      0.62      2390
weighted avg       0.74      0.72      0.72      2390

# DenseNet121
              precision    recall  f1-score   support

         AMD       0.25      0.60      0.36        75
       DR_DM       0.94      0.66      0.78       620
         Gla       0.82      0.58      0.68       459
          MH       0.45      0.16      0.23        32
      Normal       0.65      0.87      0.74       871
          RD       0.94      0.82      0.88       176
          RP       0.98      0.86      0.91        50
         RVO       0.91      0.64      0.75       107

    accuracy                           0.73      2390
   macro avg       0.74      0.65      0.67      2390
weighted avg       0.78      0.73      0.73      2390

# NASNetMobile
              precision    recall  f1-score   support

         AMD       0.25      0.52      0.34        75
       DR_DM       0.84      0.66      0.74       620
         Gla       0.59      0.81      0.69       459
          MH       0.16      0.22      0.18        32
      Normal       0.72      0.70      0.71       871
          RD       0.94      0.76      0.84       176
          RP       0.94      0.60      0.73        50
         RVO       0.75      0.43      0.55       107

    accuracy                           0.69      2390
   macro avg       0.65      0.59      0.60      2390
weighted avg       0.73      0.69      0.70      2390

# EfficientNet-B0
              precision    recall  f1-score   support

         AMD       0.32      0.44      0.37        75
       DR_DM       0.94      0.60      0.73       620
         Gla       0.79      0.57      0.66       459
          MH       0.21      0.38      0.27        32
      Normal       0.63      0.88      0.73       871
          RD       0.94      0.85      0.89       176
          RP       0.80      0.80      0.80        50
         RVO       0.83      0.56      0.67       107

    accuracy                           0.71      2390
   macro avg       0.68      0.63      0.64      2390
weighted avg       0.76      0.71      0.71      2390

De plus, les résultats d'ImageNet [^ 2] et les résultats de cette fois sont résumés dans le tableau ci-dessous. Les résultats pour ImageNet [^ 2] proviennent de keras-team / keras-applications sur GitHub. Dans ImageNet [^ 2], le réseau après VGG16 est certainement plus précis que VGG16, mais dans ce jeu de données de fond de l'œil grand angle [^ 1], DenseNet121 est le seul réseau supérieur à VGG16. De plus, comme il y a 2390 données de test, un test de différence significative à 95% provoquera un flou de ± 1 à 2%, donc on ne peut pas dire que DenseNet121 est statistiquement supérieur à VGG16.

réseau ImageNet Top-1 Acc [%] Jeu de données du fond d'œil grand angle F1-score
VGG16 71.268 0.65
ResNet50 74.928 0.63
InceptionV3 77.898 0.62
DenseNet121 74.972 0.67
NASNetMobile 74.366 0.60
EfficientNet-B0 77.190 0.64

7. Résumé

Dans cet article, nous avons utilisé l'ensemble de données du fond d'œil grand angle [^ 1] pour déterminer si le réseau après VGG16 s'améliore vraiment. Aussi, pour les débutants, j'ai expliqué comment affiner les poids entraînés du réseau implémenté et ImageNet [^ 2]. À la suite de l'expérience, seul DenseNet121 était supérieur à VGG16. Cependant, il n'y avait pas de différence significative et ce n'était pas statistiquement supérieur. Cette fois, je l'ai fait avec un jeu de données de fond d'oeil grand angle, mais je pense que si je le fais avec un autre jeu de données, le résultat sera différent, et comme j'ai à peine fait le traitement d'expansion d'image, le résultat changera si j'utilise la dernière méthode. Il y a aussi une possibilité. Cependant, je traite généralement des images médicales principalement dans le domaine de l'ophtalmologie, mais DenseNet donne de bons résultats, donc je pense que le résultat est aussi expérimenté. (Je ne sais pas pourquoi DenseNet a tendance à être bon, alors faites-le moi savoir.) À propos, la valeur F du CNN simple à 10 couches de Dernière fois (Classification des images par jeu de données d'image du fond de l'œil grand angle) était de 0,59, définissez donc le réseau sur DenseNet121. J'ai pu l'améliorer de 0,08 à 0,67. Je souhaite continuer à appliquer diverses méthodes les plus récentes pour améliorer la précision.

Recommended Posts

Le réseau après VGG progresse-t-il vraiment? L'histoire
L'ordre de démarrage est interrompu après la mise à jour du BIOS
L'examen de base de la certification d'ingénieur Python 3 est-il vraiment facile?
L'histoire de la création d'un réseau neuronal de génération musicale
Le problème Zip 4 Gbyte est une histoire du passé