[PYTHON] Anwendung der CNN2-Bilderkennung

Aidemy 2020/10/3

Einführung

Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dies ist der zweite Beitrag von CNN. Freut mich, dich kennenzulernen.

Was diesmal zu lernen ・ Informationen zum Auffüllen von Daten (Image Data Generator) ・ Über Normalisierung ・ Über Transferlernen

Aufgeblasene Daten

Häufig verwendete Argumente in ImageDataGenerator

-__ Rotation_range__: Bereich, wenn rotation zufällig (x °) -__ Width_shift_range : Verhältnis zum Bild, wenn __ sich zufällig parallel in horizontaler Richtung bewegt (x% in Brüchen) - Height_shift_range__: Prozentsatz der Bilder, wenn sie sich zufällig parallel in vertikaler Richtung bewegen (x% in Brüchen) ・ Shear_range: __ Grad der Scherung __ Je größer der Wert, desto stärker wird das Bild diagonal gezogen (0 ~ 0,3925). -__ Zoom_Range : __ Prozentsatz der zufälligen Komprimierung und Vergrößerung von __ Bildern. (Untergrenze 1-x, Obergrenze 1 + x) - Channel_shift_range__: Für RGB3-Kanäle ändert sich jeder Wert von R, G, B zufällig im Bereich von 0 bis 255 (Farbänderungen) (0 bis 255). -__ Horizontal_flip__: Wenn True, dann Flip horizontal __ - Vertial_flip__: Wenn True, dann Flip __vertically __

· Fließen

-__ Flow__ wird verwendet, um Daten und Etiketten zu empfangen und einen Stapel erweiterter / normalisierter Daten zu generieren, die später beschrieben werden. In diesem Abschnitt werden auch bestimmte Vorgänge behandelt. -Verwenden Sie wie __flow (Daten, Argument) __, und seine Argumente werden unten erklärt. ・ X: Bilddaten (4 Dimensionen) ・ Y: Etikett -Batch_size: Stapelgröße der Daten (Anzahl der Daten, die gleichzeitig in das Modell eingegeben werden sollen → Deep Learning) ・ Mischen: Daten mischen (TrueorFalse) -Save_to_dir: Geben Sie das Verzeichnis an, in dem das generierte erweiterte / normalisierte Bild gespeichert werden soll (wirksam für die Visualisierung). -Save_prefix: Dateiname beim Speichern -Save_format: Format speichern ("png" oder "jpeg")

Normalisierung

Was ist Normalisierung?

-Normalisierung bedeutet, Daten nach einer bestimmten Regel zu verarbeiten und die Verwendung von __ zu vereinfachen. -Es gibt verschiedene Normalisierungsmethoden, und eine typische ist die "Batch-Normalisierung (BN)". Solche Normalisierungsmethoden können grob in __ "Standardisierung" __ und __ "Aufhellung" __ unterteilt werden. Einzelheiten finden Sie im nächsten Abschnitt.

Standardisierung

-Standardisierung ist eine Normalisierungsmethode, die die Verteilung der Daten für jedes Merkmal näher bringt, indem der Mittelwert der Merkmale auf 0 und die Varianz auf 1 gesetzt wird. -Das standardisierte Bild wird gemittelt, um eine graue Farbe zu erhalten, aber es macht die zuvor unauffälligen Farben genauso wichtig wie die anderen Farben, also __hidden. Es wird einfacher sein, die Funktionen zu finden, die Sie haben.

from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator
#CIFER-Datensatz von 10 abrufen
(X_train,y_train),(X_test,y_test)=cifar10.load_data()
#Erzeugung eines standardisierten Generators
datagen= ImageDataGenerator(samplewise_center=True,samplewise_std_normalization=True)
#Standardisiert mit Durchfluss
g=datagen.flow(X_train, y_train, shuffle=False)
X_batch,y_batch=g.next()

Bleaching

-Whitening ist eine Normalisierungsmethode, die die Korrelation zwischen Merkmalen beseitigt.


#
datagen = ImageDataGenerator(featurewise_center=True,zca_whitening=True)
#
g = datagen.flow(X_train, y_train, shuffle=False)
X_batch, y_batch = g.next()

-Für die Whitening-Methode geben Sie in ImageDataGenerator featurewise_center = True und __zca_whitening = True __ an. Erstellen Sie wie bei der Standardisierung einen Stapel mit flow (). Erzeugung eines Aufhellungsgenerators Die Aufhellungschargennormalisierung / Chargennormalisierung ist __normalisierung für jede Charge __. Infolgedessen kann die Normalisierung sogar in der Zwischenschicht (verborgene Schicht) durchgeführt werden. Insbesondere bei Verwendung der __ReLU-Funktion wird die Verwendung der Stapelnormalisierung für __ das Lernen reibungsloser gestalten. -Die Methode ist __model.add (BatchNormalization ()) __.

-Das Folgende ist ein Beispiel für eine Chargennormalisierung.

model.add(BatchNormalization())
model.add(Dense(128))
model.add(Activation('relu'))

Lernen übertragen

Was ist Transferlernen?

-Transferlernen ist __ Lernen eines neuen Modells unter Verwendung eines bereits trainierten Modells __. Auf diese Weise kann problemlos ein neues Modell erstellt werden, auch wenn eine große Datenmenge verarbeitet wird.

Übertragen Sie das VGG-Modell, um CIFER-10 zu klassifizieren

・ Der Lernfluss in diesem Fall ist ① Importieren und definieren Sie das VGG-Modell (2) Definieren Sie eine neue Ebene, die nach der Ebene des VGG-Modells hinzugefügt werden soll ③ Legen Sie fest, wie viele Ebenen des VGG-Modells verwendet werden sollen ④ Kompilieren und beenden

#① Importieren und definieren Sie das VGG-Modell
from keras.applications.vgg16 import VGG16
input_tensor=Input(shape=(32,32,3))
vgg16=VGG16(include_top=False,weights='imagenet',input_tensor=input_tensor)
#(2) Definieren Sie eine neue Ebene, die nach der Ebene des VGG-Modells hinzugefügt werden soll
top_model=Sequential()
top_model.add(Flatten(input_shape=vgg16.output_shape[1:]))
top_model.add(Dense(256,activation='sigmoid'))
top_model.add(Dropout(0.5))
top_model.add(Dense(10,activation='softmax'))
model = Model(inputs=vgg16.input,outputs=top_model(vgg16.output))
#③ Legen Sie fest, wie viele Ebenen des VGG-Modells verwendet werden sollen
for layer in model.layers[:19]:
    layer.trainable=False
#④ Kompilieren und beenden
model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
              metrics=['accuracy'])

・ Für ① ist __Input (shape = (32,32,3)) __ die Eingabe des Eingabebildes, include_top = False ist die Einstellung, ob die letzte vollständig verbundene Ebene des VGG-Modells verwendet werden soll, _weights = 'imagenet' _ Bedeutet, dass die verwendeten Gewichte die von ImageNet gelernten sind. ・ In Bezug auf ② bedeutet __Modell (Eingaben = vgg16.input, Ausgaben = top_model (vgg16.output)) __, das VGG-Modell und das neue Modell zu kombinieren. ・ In Bezug auf ③ bedeutet __für Ebene in model.layers [: 19]: __, dass bis zur 20. Ebene des VGG-Modells verwendet wird, und __layer.trainable = False __ ist so eingestellt, dass das VGG-Modell nicht trainiert wird. .. ・ In Bezug auf ④ ist die Kompilierung normal, aber wenn Sie __transfer lernen, ist es besser, die Optimierungsfunktion auf SGD __ zu setzen.

Zusammenfassung

-Daten werden aufgeblasen, indem ImageDataGenerator () __ ein Argument gegeben wird. Insbesondere wird das Bild invertiert. - Normalisierung__ dient dazu, Daten nach einer bestimmten Regel zu verarbeiten und deren Verwendung zu vereinfachen. Es gibt __ "Standardisierung" __ und __ "Aufhellung" __ als Normalisierungsmethoden. __ Normalisierung verbessert die Genauigkeit der Merkmalsextraktion und verbessert die Lerneffizienz __. -Transferlernen ist __ Lernen eines neuen Modells unter Verwendung eines bereits trainierten Modells __. Diesmal habe ich den Bilddatensatz VGG verwendet.

Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Anwendung der CNN2-Bilderkennung
Python: Anwendung der Bilderkennung mit CNN
Python: Grundlagen der Bilderkennung mit CNN
Grundlagen der CNN 1-Bilderkennung
Bilderkennung
Bilderkennung von Früchten mit VGG16
Bilderkennung mit CNN Pferden und Hirschen
Bild der Schließung
Ich habe versucht, Bilder mit CIFAR-10 mit Keras-Learning- zu erkennen.
Ich habe versucht, Bilder von CIFAR-10 mit Keras-Bilderkennung zu erkennen.
Grundprinzipien der Bilderkennungstechnologie (für Anfänger)
Implementierung eines Deep Learning-Modells zur Bilderkennung
Bilderkennung mit Keras
Pfeffer-Tutorial (7): Bilderkennung
Anwendung von Python 3 vars
[PyTorch] Bildklassifizierung von CIFAR-10
Deep Learning Bilderkennung 1 Theorie
Beurteilung des Sieges oder der Niederlage von Shadova anhand der Bilderkennung
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
CNN (1) zur Bildklassifizierung (für Anfänger)
Ich habe versucht, die handschriftliche Zeichenerkennung von Runenzeichen mit CNN mithilfe von Keras zu erkennen
Bilderkennung mit Keras + OpenCV
Python x Flask x PyTorch Einfacher Aufbau einer Webanwendung zur Nummernerkennung
Eine Geschichte, die die elektronische Bewertung von Prüfungen mit Bilderkennung unterstützt
Bilderfassung von Firefox mit Python
Beurteilung des hintergrundbeleuchteten Bildes mit OpenCV
Python: Anwendung des überwachten Lernens (Rückkehr)
Extrahieren Sie Feature-Punkte eines Bildes
Negative / Positive Analyse 1 Anwendung der Textanalyse
Python x Tensoflow x Gesichtserkennung
Implementierung von Light CNN (Python Keras)
Deep Learning Bilderkennung 2 Modellimplementierung
Spracherkennung: Genreklassifizierung Part2-Musikgenreklassifizierung CNN
Aufbau und Grundlagen der Bilderkennungsumgebung
Die Geschichte des erneuten Bereitstellens des Anwendungsservers
Plotten Anwenden von Diagrammen mit Schiebereglern
Auswirkungen von Bildrotation, -vergrößerung, -farbe usw. auf das Faltungsnetzwerk (CNN)
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT