[Keras] Mémo personnel pour classer les images par dossier [Python]

Trier les images par dossier

environnement

Python: 3.6.10 Keras: 2.2.4 Tensorflow: 1.14.0 numpy: 1.16.4 sklearn: 0.22.2

Créer un fichier npy à partir d'une image

create_datasets.py


from sklearn import model_selection
from PIL import Image
import os, glob
import numpy as np
import random


#Catégorie de classification
name = "name"
root_dir = "./datasets/" + name +"/"
savenpy = "./npy/"+name+".npy"
categories = os.listdir(root_dir)
nb_classes = len(categories)
image_size = 224

#Lire les données d'image pour chaque dossier
X = [] #données d'image
Y = [] #Données d'étiquette
for idx, category in enumerate(categories):
    dir_path = root_dir + category
    search_files = os.listdir(dir_path)
    for file in search_files:
        filepath = dir_path + "/" + file
        img = Image.open(filepath)
        img = img.convert("RGB")
        #img = img.convert("L")
        img = img.resize((image_size, image_size))
        data = np.asarray(img)
        X.append(data)
        Y.append(idx)

X = np.array(X)
Y = np.array(Y)
print(len(X), len(Y))

# #Séparez les données d'entraînement et les données de test
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, Y, test_size=0.2)
xy = (X_train, X_test, y_train, y_test)

#Enregistrer le tableau Numpy dans un fichier
np.save(savenpy, xy)
print("end")

Créer un modèle

create_model.py


import keras
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, Conv2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.utils import np_utils
import numpy as np
from keras.callbacks import EarlyStopping

#Catégorie à classer
name = "name"
root_dir = "./datasets/" + name +"/"
loadnpy = "./npy/"+name+".npy"
categories = os.listdir(root_dir)
nb_classes = len(categories)

#Définir la fonction principale
def main():
    X_train,X_test,y_train,y_test = np.load(loadnpy, allow_pickle=True)
    #Normalisation du fichier image
    X_train = X_train.astype('float') / 256
    X_test = X_test.astype('float') / 256
    y_train = np_utils.to_categorical(y_train, nb_classes)
    y_test = np_utils.to_categorical(y_test, nb_classes)

    model = model_train(X_train,y_train)
    model_eval(model,X_test,y_test)

#Apprendre le modèle
def model_train(X,y):
    model = Sequential()
    model.add(Conv2D(32,(3,3), padding='same',input_shape=X.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(nb_classes))

    model.add(Activation('softmax'))

    model.summary()

    #Méthode d'optimisation
    opt = keras.optimizers.rmsprop(lr=0.0001,decay=1e-6)

    #Compiler le modèle
    model.compile(loss='categorical_crossentropy',
                    optimizer=opt,metrics=['accuracy'])

    #Apprentissage de modèle
    model.fit(X, y, batch_size=32,epochs=100)

    #Enregistrer le modèle
    model.save('./save_model.h5')

    return model

#Évaluer le modèle
def model_eval(model, X, y):
    score = model.evaluate(X, y)
    print('loss=', score[0])
    print('accuracy=', score[1])

if __name__ == "__main__":
    main()

Utilisez le modèle créé pour en identifier un

from keras.models import load_model
import numpy as np
from keras.preprocessing.image import img_to_array, load_img

img_path = 'Chemin du fichier image que vous souhaitez identifier (jpg/png)'
model_file_path='Chemin du fichier modèle (fichier h5)'

root_dir = "./datasets/" + name +"/"#Chemin avec le nom du dossier à classer
categories = os.listdir(root_dir)#Obtenir l'étiquette du nom du dossier

model=load_model(model_file_path)

img = img_to_array(load_img(img_path, target_size=(224,224)))
img_nad = img_to_array(img)/255
img_nad = img_nad[None, ...]

pred = model.predict(img_nad, batch_size=1, verbose=0)
score = np.max(pred)
pred_label = categories[np.argmax(pred[0])]
print('name:',pred_label)
print('score:',score)

Recommended Posts

[Keras] Mémo personnel pour classer les images par dossier [Python]
Fonction pour enregistrer les images par date [python3]
Défiez la classification des images par TensorFlow2 + Keras 5 ~ Observez les images dont la classification échoue ~
Mémo de visualisation par Python
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
Comment utiliser cron (mémo personnel)
Comment collecter des images en Python
[Mémo personnel] Mémo de commande d'environnement virtuel Python
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
[Python] Un mémo pour faire fonctionner une ROM créée avec GBDK avec PyBoy
Publier une image de Python sur Tumblr
[Note personnelle] Type de séquence / type de mappage Python
Mémo Python ① Opérations sur les dossiers et fichiers
Mémo d'apprentissage de la planification des sections ~ par python ~
[Nanonets] Comment publier un mémo [Python]
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Convertir un mémo à la fois avec Python 2to3
Réintroduction aux décorateurs Python ~ Apprenons les décorateurs par type ~
Réponse à la sélection des débutants d'AtCoder par Python3
[Mémo d'apprentissage] Bases de la classe par python
Mémo pour demander des KPI avec python
Tentative de classification des polices de pictogrammes avec Keras
Livres recommandés par 3 types liés à Python
Essayez de classer les livres d'O'Reilly en les regroupant
Ajouter du bruit gaussien aux images avec python2.7
Organisez les données séparées par dossier avec Python
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Télécharger des images sur Google Drive avec Python
Mémo Python
Comment tracer plusieurs images ajustées côte à côte en utilisant Python
mémo python
Mémo Python
mémo python
J'ai fait un module en langage C qui filtre les images chargées par Python
Mémo Python
Mémo Python
Mémo n ° 4 que les débutants Python lisent "Explication détaillée de la grammaire Python"
[Personal memo] julia --Utiliser la bibliothèque Python avec Julia en utilisant PyCall
[python] Comment afficher les éléments de la liste côte à côte
Convertissez des PDF en images en masse avec Python
Mémo n ° 3 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Notes personnelles sur le code doc Python dans Sphinx
Mémo n ° 1 que les débutants Python lisent "Explication détaillée de la grammaire Python"
[Python] Mémo pour traduire Matplotlib en japonais [Windows]
Comment effacer les caractères générés par Python
Mémo n ° 2 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Comment obtenir les fichiers dans le dossier [Python]
[Je veux classer les images à l'aide de Tensorflow] (2) Classifions les images
[Python] Comment trier les instances par variables d'instance
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
Mémo n ° 7 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Notes sur la création d'un environnement python par les débutants
mémo d'apprentissage progate Python (mis à jour de temps en temps)
Mémo n ° 6 pour les débutants Python à lire "Explication détaillée de la grammaire Python"
[Windows] Mémo pour l'utilisation de Keras sur GPU [Tensorflow-GPU]
Exécutez Power Query en passant des arguments à Python
J'ai essayé de classer les boules de dragon par adaline