[PYTHON] Classification des images de guitare par apprentissage automatique Partie 1

Résumé

introduction

Cet article est un compte rendu de recherches gratuites pendant les vacances d'été par Alafor Engineer. J'ai mis au défi de classer les images de guitare en utilisant CNN. Il n'y a pas beaucoup d'histoires techniquement nouvelles, mais il semble peu probable qu'il y ait un cas de guitare comme sujet, donc je publierai les résultats d'une manière ou d'une autre.

environnement

C'est un ordinateur personnel à la maison.

Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
Memory: 32GB
Geforce GTX 1080 (Founders Edition)
Ubuntu 16.04
Python 3.5.3
Keras(backend: Tensorflow)

Préparation du jeu de données

L'ensemble de données a été extrait d'une recherche sur le Web et modifié manuellement dans diverses étiquettes. Il existe 13 types d'étiquettes ci-dessous.

La raison pour laquelle les étiquettes sont biaisées vers le modèle solide Fender / Gibson est qu'il est arrivé qu'il était facile de se procurer des images étiquetées, donc il n'y a pas de signification profonde.

Cette fois, 250 images pour chaque classe seront préparées, 50 sélectionnées au hasard parmi elles seront utilisées comme échantillons de vérification et les 200 autres seront utilisées comme échantillons d'apprentissage.

Construire un modèle

Keras a 50 couches de ResNet comme préréglage (?), J'ai donc décidé de l'utiliser pour le moment. Puisqu'il s'agit d'un modèle de classification de 1000 classes tel quel, la couche entièrement connectée est excisée (include_top = False) et la couche entièrement connectée pour la classification souhaitée est jointe. La partie commune est un minimum, entièrement connecté 1 couche + Softmax.

resnet = ResNet50(include_top=False, input_shape=(224, 224, 3), weights="imagenet")
h = Flatten()(resnet.output)
model_output = Dense(len(classes), activation="softmax")(h)
model = Model(resnet.input, model_output)

Ici, si vous définissez weights =" imagenet ", le résultat de l'entraînement utilisant ImageNet sera défini comme valeur initiale du poids. En commençant à apprendre à partir de cet état, cela devient un réglage fin, c'est-à-dire un apprentissage par transfert. À propos, cette fois, nous ne gelerons pas les couches entraînées, mais mettrons à jour les poids de toutes les couches pendant l'entraînement.

Avec weights = None, les poids sont initialisés avec des nombres aléatoires. En d'autres termes, vous apprendrez à partir de zéro sans transitions.

Cette fois, j'ai expérimenté avec et sans métastases.

Apprentissage

Puisqu'il y a relativement peu d'images échantillons, il est nécessaire de gonfler les données pour la formation. Cette fois, nous implémentons l'augmentation des données à l'aide de ImageDataGenerator de Keras.

train_gen = ImageDataGenerator(
    rotation_range=45.,
    width_shift_range=0.2,
    height_shift_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    vertical_flip=True)

train_flow = train_gen.flow_from_directory(
    directory="./image/train",
    batch_size=32,
    target_size=(224, 224),
    classes=[_["key"] for _ in classes]
)

Il est très facile de gonfler les données d'entraînement par conversion Affin. ~~ De plus, le chargement du fichier image + Augmentation est une belle spécification qui fonctionne en parallèle et asynchrone avec l'apprentissage. Personnellement, je pensais que cela valait la peine d'utiliser Keras. ~~ </ font>

** Ajouts / corrections: ** Dans Keras, le prétraitement des données s'exécute en parallèle et de manière asynchrone avec l'apprentissage [fonction du moteur d'apprentissage Keras (à l'aide de OrderedEnqueuer / GeneratorEnqueuer dans fit_generator)](https://github.com/fchollet/keras/ blob / 135efd66d00166ca6df32f218d086f98cc300f1e /keras/engine/training.py#L1834-L2096), qui n'était pas une fonction fournie par ImageDataGenerator. C'était une expression trompeuse en raison de mon malentendu, je vais donc la corriger.

Pour l'optimisation, Momentum + SGD a été adopté à la suite de l'article original de ResNet.

optimizer = SGD(decay=1e-6, momentum=0.9, nesterov=True)

J'ai aussi essayé Adam etc., mais comme on le dit dans la rue, Momentum + SGD était excellent pour ResNet.

Cette fois, nous vérifierons l'exactitude de la vérification pour chaque étape, avec 1000 mini-lots d'apprentissage de 32 échantillons en une seule étape. La formation est interrompue lorsque la précision de la vérification a convergé. (Arrêt anticipé)

es_cb = EarlyStopping(patience=20)

Résultat d'apprentissage

Voyons le résultat.

Premièrement, dans le cas de l'apprentissage par transfert. La transition de la précision est comme ça. trans.PNG

Le bleu est la courbe d'apprentissage et l'orange la courbe de vérification.

La précision de vérification flotte, mais en 36 étapes, la précision d'apprentissage est de 99,9% et la précision de vérification est de 100%. Après cela, la précision augmentera ou diminuera, mais pour le moment, nous utiliserons cet instantané de la 36e étape comme livrable. À propos, il a fallu environ 5 heures pour effectuer 36 étapes.

Par contre, lorsqu'il n'y a pas de transfert. non_trans.PNG

Par rapport à l'apprentissage par transfert, la progression de l'apprentissage est lente et la précision n'est pas bonne. Le meilleur score est une précision d'apprentissage de 99% et une précision de vérification de 84%. On peut constater qu'il existe un écart important de précision entre la formation et la vérification, et que les performances de généralisation du modèle sont faibles.

L'effet de l'apprentissage par transfert est énorme.

Laisse moi déduire ceci et cela

J'ai pris une photo de ma guitare et j'ai essayé de deviner. J'ai utilisé le modèle avec transfert.

Jazzmaster jm.jpg

LesPaul lp.jpg

** Akogi ** ac.jpg

Cela semble fonctionner correctement.

Qu'en est-il d'une guitare qui ne figure pas dans les données d'entraînement?

Duo Sonic ds.jpg

C'est un résultat convaincant car il s'agit du même modèle étudiant que Mustang.

** Guitare mystérieuse avec haut-parleur intégré (fabriquée par Crews, modèle inconnu) ** xx.jpg

Cela ne ressemble pas à Jaguar. Alors c'est difficile de dire à quoi ça ressemble, mais j'ai l'impression que Les Paul et Telecaster sont encore plus proches. Il semble que la manière de comprendre les caractéristiques soit un peu différente de celle des humains.

Enfin, jouons un peu avec.

Si vous griffonnez un peu sur Jazzmaster avec l'outil de peinture, ... jm2.jpg

Pour une raison quelconque, Flying V. Hmm. .. Je me demande où j'ai regardé et où j'ai pensé.

Impressions

J'ai essayé la reconnaissance d'image avec Deep Learning pour la première fois, et c'était plus précis que prévu. Il existe de nombreux cas où le marquage et la classification des produits sont incorrects sur le site de la CE et le site de vente aux enchères d'instruments de musique, donc je pense que vous devriez le vérifier à cause de cela.

Il a également été confirmé que l'apprentissage par transfert à partir d'un modèle général de classification d'images est efficace pour la classification d'images d'un domaine spécifique.

D'autre part, nous avons pu confirmer le problème du Deep Learning qu'il est difficile de corriger les erreurs de classification car nous ne connaissons pas les critères de base et de jugement de la sortie. Ce modèle montre l'instabilité que si l'entrée idéale (image sans bruit) peut être classée avec une grande précision, le jugement change considérablement avec une petite quantité de bruit. En ajoutant intentionnellement du bruit à l'entrée pendant l'entraînement, il semble qu'un modèle plus robuste puisse être généré, alors j'aimerais l'essayer si j'ai le temps. (⇒ Je l'ai essayé.) Il semble y avoir une technique appelée Grad-CAM qui estime le point d'intérêt du modèle, alors j'aimerais l'essayer ensemble et voir les changements.

J'ai utilisé ResNet-50 comme modèle cette fois, mais j'ai le sentiment (d'une manière ou d'une autre) qu'un modèle plus léger peut faire ce genre de tâche de classification, j'ai donc utilisé un réseau peu profond en réseau pour réduire le modèle par distillation. Je veux aussi contester.

Recommended Posts

Classification des images de guitare par apprentissage automatique Partie 1
Classification des images de guitare par apprentissage automatique, partie 2
Classification de l'apprentissage automatique
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Classification EV3 x Pyrhon Machine Learning Partie 3
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Analyse de l'utilisation de l'espace partagé par l'apprentissage automatique
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Estimation raisonnable du prix de Mercari par apprentissage automatique
Prédire les travaux de courte durée de Weekly Shonen Jump par apprentissage automatique (Partie 2: Apprentissage et évaluation)
Prédire les travaux de courte durée de Weekly Shonen Jump par apprentissage automatique (Partie 1: Analyse des données)
Techniques liées à l'apprentissage automatique / à la classification
Bases de l'apprentissage automatique (mémoire)
Apprendre avec l'enseignant 1 Principes de base de l'apprentissage avec l'enseignant (classification)
Importance des ensembles de données d'apprentissage automatique
Machine learning supervisé (classification / régression)
4 [/] Quatre arithmétiques par apprentissage automatique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Prédire la présence ou l'absence d'infidélité par l'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Apprentissage automatique par python (1) Classification générale
Résumé de l'apprentissage automatique par les débutants de Python
Apprentissage automatique ③ Résumé de l'arbre de décision
Classification et régression dans l'apprentissage automatique
Faire remplacer la guitare d'Hisako par la sienne par l'apprentissage automatique -Exécution-
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 4)
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)
Approximation de bas rang des images par HOSVD étape par étape
Approximation de bas rang de l'image par décomposition de Tucker
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Classification multi-étiquette d'images multi-classes avec pytorch
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
Deep learning 2 appris par l'implémentation (classification d'images)
Faire le contrôle d'un homme sandwich par l'apprentissage automatique ver4
[Mémo d'apprentissage] Bases de la classe par python
Amplifiez les images pour l'apprentissage automatique avec Python
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
Est-il possible de manger avec la prévision du cours des actions par apprentissage automatique [Machine learning partie 1]
Détection de visage en collectant des images d'Angers.
20 sélections recommandées en 2020 de livres d'introduction à l'apprentissage automatique
[Échec] Trouvez Maki Horikita par apprentissage automatique
Quatre règles de fonctionnement avec l'apprentissage automatique 6 [Commercial]
Apprentissage automatique
Résumé de la classification et de la mise en œuvre des algorithmes d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Bases du réseau neuronal
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
[Apprentissage automatique] Liste des packages fréquemment utilisés
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
Apprentissage automatique: reconnaissance d'image de MNIST à l'aide de PCA et de Gaussian Native Bayes
Chapitre 6 Apprentissage supervisé: Classification pg212 ~ [Apprenez en vous déplaçant avec Python! Nouveau manuel d'apprentissage automatique]
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning