[PYTHON] Klassifizierte ImageNet Hamburger und Fahrräder von Keras

Ich habe einen Datensatz mit Bildern erstellt, die von ImageNet stammen, und versucht, sie zu klassifizieren.

Mit demselben Code gibt es Zeiten, in denen es funktioniert, und Zeiten, in denen es nicht funktioniert, und ich bin mir nicht sicher, warum. [^ 1] Klicken Sie hier für das Notizbuch: https://gist.github.com/juntaki/263d9c43c0509c6610bdf95a59867e99 [^ 1]: Keras-Fehler? Das Folgende ist eine Beschreibung der Notizen.

Daten herunterladen

Speichern Sie die von ImageNet gesuchte URL-Liste an einem geeigneten Ort und laden Sie das Bild herunter. Verwerfen Sie solche mit ungewöhnlich geringer Kapazität oder Textdateien, da sie fehlgeschlagen sind.

cat ../urllist | xargs wget -T1

Bild wird geladen

Für RGB-Bilder müssen Sie etwa [3 (RGB), 50 (vertikal), 50 (horizontal)] ausführen, um an Keras zu übergeben. Da die mit Image.open () gelieferte [50,50,3] ist, wird die Reihenfolge mit transpose () geändert. Das Argument bedeutet, [0,1,2] in [2,0,1] zu ändern.

    im_reading = np.array( Image.open(i).resize((50,50)))
    im_reading = im_reading.transpose(2,0,1)

Datensatzerstellung

Darüber hinaus muss es für die Eingabe in Keras ein np.array von [Sample, 3,50,50 (RGB-Bild)] sein Ich habe einen Datensatz erstellt, indem ich ihn an ein leeres Array angehängt habe. Im Gegensatz zum Python-Array müssen Sie zuerst die Matrixgröße definieren. Da der dtype des Bildes uint8 ist, kann es mit imshow () nur dann gut als Bild angezeigt werden, wenn es mit unsigned ausgerichtet ist (obwohl es anscheinend kein Problem gibt, wenn es nur lernt) [^ 2].

[^ 2]: Das Laden dauert sehr lange, daher sollte es einen besseren Weg geben. Es wird nicht bestätigt, dass bei jeder Speicherung eine Speicherkopie erstellt wurde.

image = np.empty((0,3,50,50), dtype=np.uint8)
...
    image = np.append(image, [im_reading], axis=0)

Bildschirm

Sie kann durch Rücksendung der getauschten Bestellung angezeigt werden.

plt.imshow( image[number].transpose(1,2,0) )

Datensatzaufteilung

scikit-learn hat eine Funktion, die den Datensatz für Training und Test aufteilt. Da der Datensatz der Reihe nach angehängt wird, wird er vorher und nachher ordentlich geteilt. Wenn Sie diese Funktion jedoch bestehen, wird er zufällig aufgenommen und geteilt.

from sklearn.cross_validation import train_test_split
data_train, data_test, labels_train, labels_test = train_test_split(image, result, test_size=0.10, random_state=10)

Modelldefinition und Training

Der Inhalt des Modells besteht aus einer Kombinationsebene und einem entsprechend geschichteten Max-Pooling.

model = Sequential()
model.add(Convolution2D(96, 3, 3, border_mode="same", activation="relu" ,input_shape=(3, 50, 50) ))
model.add(Convolution2D(96, 3, 3, border_mode="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Convolution2D(96, 3, 3, border_mode="same", activation="relu"))
model.add(Convolution2D(96, 3, 3, border_mode="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Convolution2D(96, 3, 3, border_mode="same", activation="relu"))
model.add(Convolution2D(96, 3, 3, border_mode="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.5))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation("relu"))
model.add(Dense(10))
model.add(Activation("relu"))
model.add(Dense(2))
model.add(Activation("sigmoid"))
model.summary()
model.compile(loss='binary_crossentropy', optimizer="adadelta", metrics=['accuracy'])

Ergebnis

Es ist eine einfache Klassifizierung von zwei Klassen, aber ich konnte eine Genauigkeit von 90% erzielen, indem ich ein richtig ausgewähltes beschriftetes Bild las.

Recommended Posts

Klassifizierte ImageNet Hamburger und Fahrräder von Keras
Vergleichen Sie DCGAN und pix2pix mit Keras
Vergleichen Sie rohen TensorFlow mit tf.contrib.learn und Keras
Verwenden Sie TPU und Keras mit Google Colaboratory
Deep Learning Bildanalyse beginnend mit Kaggle und Keras
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Lernen Sie Wasserstein GAN mit Keras-Modell und TensorFlow-Optimierung
Bilderkennung mit Keras
Optuna, Keras und Titanic
CIFAR-10-Tutorial mit Keras
Multivariates LSTM mit Keras
Mit und ohne WSGI
Bildklassifizierung mit selbst erstelltem neuronalen Netzwerk von Keras und PyTorch