[PYTHON] Geht das Netzwerk nach VGG wirklich voran? Die Geschichte

1. Zuallererst

In diesem Artikel KI-Wettbewerbe produzieren keine nützlichen Modelle Ist die aktuelle Netzwerkarchitektur, die in% 20newsletter definiert wurde, nicht einfach ein Übertraining des Datensatzes und eine Outperformance gegenüber dem Glücksspiel? Ziel ist es, die Geschichte mit dem Weitwinkel-Fundus-Datensatz [^ 1] zu untersuchen. Außerdem werde ich Anfängern erklären, wie man aus den trainierten Gewichten von ImageNet [^ 2] mithilfe des in tf.keras implementierten Netzwerks eine Feinabstimmung durchführt.

Alle Codes

2. Umwelt

  1. AI competitions don’t produce useful models [Artikel (KI-Wettbewerbe produzieren keine nützlichen Modelle)](https://lukeoakdenrayner.wordpress.com/2019/09/19/ai-competitions-dont-produce-useful-models/?utm_campaign=piqcy&utm_medium=email&utm_source=Revue Dies ist eine Übersicht über den% 20-Newsletter. Im Wettbewerb für maschinelles Lernen sind die endgültigen Testergebnisse nicht offen, so dass das Modell nur einmal ausgewertet werden kann. Dies macht es unmöglich, Gasha zu modellieren. Es scheint, dass diese Maßnahme funktioniert, da sie nur einmal pro Team bewertet werden kann. Dies ist jedoch bei der Betrachtung des gesamten Wettbewerbs nicht der Fall. Wenn zum Beispiel 100 Teams teilnehmen, bedeutet dies, dass sie 100 Mal Modellgasha machen. Das Gewinnerteam hatte das Glück, diese Gasha zu schlagen, aber nicht die beste Methode. Darüber hinaus treten die Ergebnisse der Top-Teams in einigen Wettbewerben an. Wenn der Test auf signifikante Unterschiede durchgeführt wird, sind die Ergebnisse der Top-Teams nur Fehler, und eine größere Menge von Testdaten muss vorbereitet werden, um einen signifikanten Unterschied zu bewirken. Es scheint, dass sich die Genauigkeit bis zu VGG verbessert hat, aber danach ist es zweifelhaft, und es besteht die Möglichkeit, dass nur die Testdaten übertrainiert werden.

image.png

Diesmal unter Verwendung des Weitwinkel-Fundus-Datensatzes [^ 1], VGG16 [^ 3], DenseNet121 [^ 4], ResNet50 [^ 5], InceptionV3 [^ 6], NASNetMobile [^ 7], EfficientNet-B0 [^ 8] ] Leistungsbewertung, um herauszufinden, ob sich das Netzwerk nach VGG16 wirklich verbessert.

4. Weitwinkel-Fundus-Datensatz & Datenaufteilung

In diesem Artikel (Bildklassifizierung nach Weitwinkel-Fundus-Bilddatensatz) finden Sie Erläuterungen zum Weitwinkel-Fundus-Datensatz und zur Aufteilung der Daten. ..

5. Modellbau & Lernen

In diesem Kapitel wird beschrieben, wie Sie mit dem trainierten Modell von Implemented Network & ImageNet [^ 2] eine Feinabstimmung vornehmen, um loszulegen. Übrigens trägt das Fine * -Drehen nicht zur Verbesserung der Genauigkeit bei, da sich die Bilddomäne zu stark von der von ImageNet im Weitwinkel-Fundus-Dataset unterscheidet, trägt jedoch zur Verbesserung der Konvergenzgeschwindigkeit bei. Weitere Informationen finden Sie unter [Artikel (Wirksamkeit des Transferlernens auf medizinische Bilder)](https://speakerdeck.com/uchi_k/lun-wen-shao-jie-yi-yong-hua-xiang-hefalsezhuan-yi- xue-xi-falseyou-xiao-xing-nituit-transfusionsverständnis-transfer-lernen-für-medizinische-bildgebung). Ändern Sie das Modellkonstruktionsteil aus diesem Artikel (Bildklassifizierung nach Weitwinkel-Fundusbilddatensatz). Der Lernparameter änderte die Lernrate auf "0,00001". Zuerst "importieren" Sie die Bibliothek.

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

Bauen Sie dann das Netzwerk auf. Dieses Mal werde ich die Verwendung von VGG16 als Beispiel erläutern. Laden Sie zunächst VGG16 als Basismodell. Dieses Mal besteht der Zweck darin, aus den trainierten Gewichten von ImageNet [^ 2] eine Feinabstimmung vorzunehmen. Bauen Sie also mit include_top = False ein Netzwerk bis zur endgültigen Faltungsschicht auf und lernen Sie ImageNet [^ 2] mit weight = 'imagenet'. Lesen Sie die fertigen Gewichte ab. Kombinieren Sie es dann wie Artikel (Bildklassifizierung nach Weitwinkel-Fundus-Bilddatensatz) mit dem vollständig verbundenen schichtgeladenen 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)

Wenn Sie ein anderes Netzwerk verwenden, z. B. ResNet50, können Sie es verwenden, indem Sie "VGG16" in "ResNet50" ändern. Beispielcode für andere Netzwerke wird hier hochgeladen [https://github.com/burokoron/StaDeep/tree/master/fine-turning]. EfficientNet-B0 wurde übrigens nicht veröffentlicht, aber implementiert, also keras-team / keras-applications'efficientnet.py auf GitHub. Ich habe Anwendungen / blob / master / keras_applications / componentnet.py heruntergeladen und verwendet.

Die Lernergebnisse sind wie folgt. NASNetMobile [^ 7] ist das einzige, das keine Diskrepanz zwischen Lernverlust und Verifizierungsverlust aufweist. Obwohl die Akkreditierung unterschiedlich ist. EfficientNet-B0 [^ 8] Ist es wirklich schön, weil es nur das neueste Modell gibt? ist. ネットワーク比較.png

6. Bewertung

Die Bewertung wurde unter Verwendung des F-Werts auf die gleiche Weise wie in diesem Artikel (Bildklassifizierung nach Weitwinkel-Fundusbild-Datensatz) durchgeführt. Die Ergebnisse sind unten gezeigt.

Detaillierte Ergebnisse
# 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

Darüber hinaus sind die Ergebnisse von ImageNet [^ 2] und die Ergebnisse dieser Zeit in der folgenden Tabelle zusammengefasst. Die Ergebnisse für ImageNet [^ 2] wurden von keras-team / keras-applications auf GitHub übernommen. In ImageNet [^ 2] ist das Netzwerk nach VGG16 sicherlich genauer als VGG16, aber in diesem Weitwinkel-Fundus-Datensatz [^ 1] ist DenseNet121 das einzige Netzwerk, das VGG16 überlegen ist. Da es 2390 Testdaten gibt, führt ein signifikanter Differenztest bei 95% zu einer Unschärfe von ± 1 bis 2%, sodass nicht gesagt werden kann, dass DenseNet121 VGG16 statistisch überlegen ist.

Netzwerk ImageNet Top-1 Acc [%] Weitwinkel-Fundus-Datensatz 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. Zusammenfassung

In diesem Artikel haben wir den Weitwinkel-Fundus-Datensatz [^ 1] verwendet, um zu untersuchen, ob sich das Netzwerk nach VGG16 wirklich verbessert. Außerdem habe ich Anfängern erklärt, wie man die trainierten Gewichte von Implemented Network & ImageNet [^ 2] fein dreht. Als Ergebnis des Experiments war nur DenseNet121 VGG16 überlegen. Es gab jedoch keinen signifikanten Unterschied und es war statistisch nicht überlegen. Diesmal habe ich es mit einem Weitwinkel-Fundus-Datensatz gemacht, aber ich denke, wenn ich es mit einem anderen Datensatz mache, wird das Ergebnis anders sein, und da ich kaum eine Bilderweiterungsverarbeitung durchgeführt habe, wird sich das Ergebnis ändern, wenn ich die neueste Methode verwende. Es gibt auch eine Möglichkeit. Normalerweise beschäftige ich mich jedoch hauptsächlich mit medizinischen Bildern auf dem Gebiet der Augenheilkunde, aber DenseNet liefert gute Ergebnisse, daher denke ich, dass das Ergebnis genauso erfahren ist. (Ich weiß nicht, warum DenseNet gut ist, also lass es mich wissen.) Übrigens betrug der F-Wert des einfachen 10-Schicht-CNN von Letztes Mal (Bildklassifizierung nach Weitwinkel-Fundus-Bilddatensatz) 0,59, also setzen Sie das Netzwerk auf DenseNet121. Ich konnte es um 0,08 bis 0,67 verbessern. Ich möchte weiterhin verschiedene neueste Methoden anwenden, um die Genauigkeit zu verbessern.

Recommended Posts

Geht das Netzwerk nach VGG wirklich voran? Die Geschichte
Die Startreihenfolge ist nach dem Aktualisieren des BIOS unterbrochen
Ist die Grundprüfung für die Python 3 Engineer-Zertifizierung wirklich einfach?
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit