[PYTHON] CNN mit Keras Versuchen Sie es mit dem Bild, das Sie aufgenommen haben

Ich werde verschiedene Dinge mit den Bildern versuchen, die ich mit Keras von CNN aufgenommen habe

Hier Python2.7.Es ist in 6 gemacht. Darüber hinaus verwenden wir hauptsächlich die folgenden Pakete.
Keras (2.0.4)
tensorflow (1.1.0)

Einführung


Ich habe CNN mit Keras herausgefordert. Da es nicht interessant ist, nur den Beispieldatensatz zu verwenden, habe ich die von CNN aufgenommenen Bilder klassifiziert.

Hier nehmen wir an, dass der theoretische Teil von CNN bis zu einem gewissen Grad bekannt ist, und konzentrieren uns auf den Verarbeitungsteil. Die Analyseumgebung verwendet EC2 von AWS.

Darüber hinaus wird das Bild nach dem Ausschneiden des erforderlichen Teils ausgeführt. (Ich habe es mit OpenCV gemacht)

Informationen zur Analyseumgebung


Ich wollte eine Umgebung erstellen, damit TensorFlow auf einer GPU ausgeführt werden kann, aber für Anfänger ist es schwierig ... Ich habe ein AMI (Bitfusion Ubuntu 14 TensorFlow), dessen Umgebung bereits auf AWS basiert, also verwende ich dieses. Die notwendigen Pakete sind bereits enthalten.

https://aws.amazon.com/marketplace/pp/B01EYKBEQ0

Das obige AMI enthält auch Python3, daher denke ich, dass es auch dort verwendet werden kann. (Es kostet Geld, überprüfen Sie diesen Punkt. Die Standard-EBS-Größe beträgt 100 GB. Seien Sie also auch dort vorsichtig.)

Importieren Sie die erforderlichen Pakete



# coding:utf-8

import keras
from keras.utils import np_utils
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.preprocessing.image import array_to_img, img_to_array, list_pictures, load_img
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

Den Inhalt entnehmen Sie bitte der Homepage von Keras. Die Vorverarbeitung kann einfach mit keras.preprocessing durchgeführt werden.

Bilder importieren und in Matrizen konvertieren Datensätze erstellen


temp_img = load_img('./test/test1.jpg', target_size=(64,64))

Jetzt können Sie das Bild laden. Sie können die Lesegröße auch mit target_size angeben. Da ein Bild mit einer festen Größe in das Modell eingegeben wird, richten Sie es hier aus, wenn die Größe des Bildes in der Vorverarbeitung nicht ausgerichtet ist.

Konvertieren Sie es in eine Matrix und geben Sie es in das Modell ein. Sie können ein Bild in eine Matrix konvertieren mit:

temp_img_array  = img_to_array(temp_img)

Wenn man die Form für Form betrachtet, ist es (64, 64, 3). Ich denke, dies bedeutet, dass wir Informationen über die Farbe (RGB) jedes Pixels für ein 64x64-Bild haben.

Verwenden Sie diese nun, um ein Dataset zu erstellen. Hierbei wird angenommen, dass sich das Bild von Ziel A (z. B. eine Katze) im Ordner test1 und ein anderes Ziel B (z. B. ein Hund) im Ordner test2 befinden.

#Lesen Sie die Bilder im Ordner nacheinander
#Kategorie beginnt bei 0

X = []
Y = []

#Bild von Ziel A.
for picture in list_pictures('./test1/'):
    img = img_to_array(load_img(picture, target_size=(64,64)))
    X.append(img)
    
    Y.append(0)
    

#Bild von Ziel B.
for picture in list_pictures('./test2/'):
    img = img_to_array(load_img(picture, target_size=(64,64)))
    X.append(img)
    
    Y.append(1)
    

#In Array konvertieren
X = np.asarray(X)
Y = np.asarray(Y)

Bildinformationen werden in X eingegeben, und Klasseninformationen werden an Y gegeben. Normalisieren Sie als Nächstes die Pixelwerte und konvertieren Sie die Klassendaten (dies scheint als One-Hot-Ausdruck bezeichnet zu werden).


#Konvertieren Sie Pixelwerte von 0 in 1
X = X.astype('float32')
X = X / 255.0

#Klassenformat konvertieren
Y = np_utils.to_categorical(Y, 2)

#Trainingsdaten und Testdaten
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=111)

Ein Modell bauen


Nachdem wir einen Datensatz haben, erstellen wir ein Modell. Was das Modell betrifft, denke ich, dass es verschiedene Beispiele gibt, wenn Sie danach suchen, also baue ich es unter Bezugnahme auf diese.


#Erstellen Sie CNN
model = Sequential()

model.add(Conv2D(32, (3, 3), padding='same',
                 input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2))       #2 Klassen
model.add(Activation('softmax'))

#kompilieren
model.compile(loss='categorical_crossentropy',
              optimizer='SGD',
              metrics=['accuracy'])

#Lauf. Ohne Ausgabe einstellen(verbose=0)。
history = model.fit(X_train, y_train, batch_size=5, epochs=200,
                   validation_data = (X_test, y_test), verbose = 0)

Sie können die Geschichte des Lernens in der Geschichte überprüfen. Im Folgenden wird die Genauigkeit von Trainingsdaten und Testdaten dargestellt.


plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(['acc', 'val_acc'], loc='lower right')
plt.show()

Wenden Sie es auf die Validierungsdaten an und wenden Sie es tatsächlich an, um eine Verwirrungsmatrix zu erstellen.


#Auf Testdaten anwenden
predict_classes = model.predict_classes(X_test)

#verschmelzen. Stellen Sie Ihre Daten wieder her
mg_df = pd.DataFrame({'predict': predict_classes, 'class': np.argmax(y_test, axis=1)})

# confusion matrix
pd.crosstab(mg_df['class'], mg_df['predict'])

Zusammenfassung


Deep Learning hatte eine hohe Schwelle, aber ich dachte, es wäre einfacher zu schreiben, wenn ich Keras verwenden würde. Es ist auch einfach, die bereits erstellte Analyseumgebung zu verwenden.

Ich werde mich von nun an mit der Verfeinerung des Modells befassen. Da ich ein Anfänger bin, kann es einige Fehler geben, aber ich würde es begrüßen, wenn Sie auf etwas hinweisen könnten. Bis zum Ende Danke fürs Lesen.

Recommended Posts

CNN mit Keras Versuchen Sie es mit dem Bild, das Sie aufgenommen haben
Versuchen Sie, das Bild mit opencv2 zu verwischen
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras CNN 1 heraus ~ Bewegen Sie sich vorerst ~
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Bilderkennung mit Keras
Identifizieren Sie den Namen aus dem Blumenbild mit Keras (Tensorfluss)
POST das Bild mit json und erhalte es mit der Flasche
Versuchen Sie zu normalisieren Schneiden Sie das Bild mit einem Scikit-Bild aus (obwohl es unterwegs wütend wird)
Versuchen Sie, CNN mit ChainerRL auszuführen
Erstellen Sie einfach CNNs mit Keras
Bilderkennung mit Keras + OpenCV
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Schreiben Sie Python nicht, wenn Sie es mit Python beschleunigen möchten
Bis Sie die Google Cloud Vision-API ausprobieren (Erkennung schädlicher Bilder)
QR-Code mit CNN entschlüsseln
Anfänger RNN (LSTM) | Versuchen Sie es mit Keras
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Bildanzeige mit dem eingebauten ISIGHT
Versuchen Sie, XOR mit der Keras Functional API zu implementieren
Probieren Sie den Variational-Quantum-Eigensolver (VQE) -Algorithmus mit Blueqat aus
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
[Python] Runden Sie nur mit dem Operator ab
Klicken Sie mit der rechten Maustaste auf das Bild → Realisieren Sie "Mit TinyPNG komprimieren"
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Probieren Sie ganz einfach die automatische Bilderzeugung mit DCGAN-Tensorfluss aus
Versuchen Sie, die Datei mit dem Befehl less neu zu schreiben
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Versuchen Sie die Feinabstimmung (Transferlernen), die bei Bildern mit Keras der Mainstream ist, mit Datenlernen
Flächenextraktionsmethode mit dem Zellautomaten Versuchen Sie die Flächenextraktion aus dem Bild mit Growcut (Python).
Bis Sie versuchen, DNN mithilfe von Colab die Wahrheit des Bildes mitteilen zu lassen
Wenn ihr in der Scope-Küche das mit einem Rand machen könnt ~ ♪
Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen