[PYTHON] Hamburgers et vélos ImageNet classés par Keras

J'ai créé un ensemble de données avec des images obtenues à partir de ImageNet et j'ai essayé de les classer.

Avec le même code, il y a des moments où cela fonctionne pour une raison quelconque et des moments où ce n'est pas le cas, et je ne sais pas pourquoi. [^ 1] Cliquez ici pour le notebook: https://gist.github.com/juntaki/263d9c43c0509c6610bdf95a59867e99 [^ 1]: bogue Keras? Voici une description des notes.

Télécharger les données

Enregistrez la liste d'URL recherchée par ImageNet dans un emplacement approprié, puis téléchargez l'image. Jetez ceux dont la capacité ou les fichiers texte sont inhabituellement petits car ils ont échoué.

cat ../urllist | xargs wget -T1

Chargement d'image

Pour les images RVB, vous devez faire quelque chose comme [3 (RVB), 50 (vertical), 50 (horizontal)] pour passer à Keras. Puisque celui fourni avec Image.open () est [50,50,3], l'ordre est changé avec transpose (). L'argument signifie changer [0,1,2] en [2,0,1].

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

Création de l'ensemble de données

De plus, pour entrer dans Keras, il doit s'agir d'un np.array de [Sample, 3,50,50 (RGB image)], donc J'ai créé un ensemble de données en l'ajoutant à un tableau vide. Contrairement au tableau de python, vous devez d'abord définir la taille de la matrice. De plus, comme le dtype de l'image est uint8, elle ne peut pas être bien affichée comme une image avec imshow () à moins qu'elle ne soit alignée avec unsigned (bien qu'il semble qu'il n'y ait pas de problème si elle est juste en train d'apprendre) [^ 2].

[^ 2]: Le chargement prend beaucoup de temps, il devrait donc y avoir un meilleur moyen. Il n'est pas confirmé qu'une copie mémoire s'est produite à chaque fois qu'elle est stockée.

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

Affichage de l'image

Il peut être affiché en retournant la commande permutée.

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

Division de l'ensemble de données

scikit-learn a une fonction qui divise l'ensemble de données pour l'entraînement et les tests. Puisque l'ensemble de données s'ajoute dans l'ordre, il est soigneusement divisé avant et après, mais si vous passez cette fonction, il sera sélectionné au hasard et divisé.

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)

Définition du modèle et formation

Le contenu du modèle est une couche combinée et une mise en commun maximale superposées de manière appropriée.

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'])

résultat

C'est une classification simple de deux classes, mais j'ai pu obtenir une précision de 90% en lisant une image étiquetée correctement sélectionnée.

Recommended Posts

Hamburgers et vélos ImageNet classés par Keras
Comparez DCGAN et pix2pix avec Keras
Comparez le TensorFlow brut avec tf.contrib.learn et Keras
Utilisez TPU et Keras avec Google Colaboratory
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
Découvrez Wasserstein GAN avec le modèle Keras et l'optimisation TensorFlow
Reconnaissance d'image avec keras
optuna, keras et titanic
Tutoriel CIFAR-10 avec Keras
LSTM multivarié avec Keras
Avec et sans WSGI
Classification d'images avec un réseau de neurones auto-fabriqué par Keras et PyTorch