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
.
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.
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. ..
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.
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> 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. 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
# 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
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é