[PYTHON] Classification des images de guitare par apprentissage automatique, partie 2

Résumé

Pour l'environnement d'exploitation, etc., veuillez vous référer au post précédent Classification des images de guitare par apprentissage automatique, partie 1.

** PostScript 2017/10/23: ** Le contenu de cet article semble être similaire à la méthode appelée Cutout [^ 1] / Random Erasing [^ 2].

** PostScript 25/02/2018: ** L'induction d'une identification erronée en ajoutant du bruit est appelée perturbation hostile et semble être activement étudiée. Le sujet de cet article est simplement "Je suis en difficulté à cause de faibles performances de généralisation", mais dans l'étude des perturbations hostiles, je parle principalement de tromperie plus habile et comment la protéger (robustesse). Il est discuté du point de vue de la sécurité. En ce qui concerne les perturbations hostiles, Très bon résumé a été publié, je vais donc le lier.

Tâche

Dans le défi de Publié la dernière fois, il y avait un phénomène selon lequel le résultat de la prédiction de classification a complètement changé avec un léger graffiti sur l'image d'entrée. Cela signifie que si une partie de la cible d'identification est cachée dans quelque chose, cela provoquera une erreur de classification imprévisible.

Les capacités cognitives humaines sont plus robustes et, dans de nombreux cas, il est possible d'identifier un objet avec un jugement complet même si une partie de l'objet n'est pas visible. Ne serait-il pas possible de donner plus de robustesse à la capacité de discrimination des modèles d'apprentissage automatique?

Ajout de bruit à l'image d'entrée

La plupart des données d'apprentissage utilisées dans le [post précédent] défi (http://qiita.com/coz-a/items/1275a0ff8cf40127b7a1) étaient de "belles" photos telles que des images de produits sur les sites de la CE. Il n'y a presque pas d'images où la cible de reconnaissance est partiellement masquée par autre chose. Dans ces conditions idéales, la classe peut être bien identifiée en ne regardant que les caractéristiques locales (par exemple, uniquement la disposition du pick-up et du contrôle), donc le modèle de "capturer les caractéristiques de manière complexe en regardant l'ensemble" est Je n'ai pas envie de grandir. (Les suradaptations aux conditions idéales et les performances de généralisation ne peuvent pas être obtenues)

Ensuite, faisons une composition qui "ne se distingue pas bien à moins de regarder l'ensemble et d'en saisir les traits de manière complexe".

C'est simple à faire et cela masque au hasard certaines des données d'entraînement. Cela rendra difficile la discrimination de classe avec seulement quelques caractéristiques locales, et conduira inévitablement à un apprentissage sélectif de caractéristiques plus globales et complexes.

Cette fois, j'ai ajouté plusieurs rectangles aux données d'entraînement avec le code suivant.

def add_dust_to_batch_images(x):
    batch_size, height, width, channels = x.shape
    for i in range(0, batch_size):
        num_of_dust = np.random.randint(32)
        dusts = zip(
            (np.clip(np.random.randn(num_of_dust) / 4. + 0.5, 0., 1.) * height).astype(int), # pos x
            (np.clip(np.random.randn(num_of_dust) / 4. + 0.5, 0., 1.) * width).astype(int), # pos y
            np.random.randint(1, 8, num_of_dust), # width
            np.random.randint(1, 8, num_of_dust), # height
            np.random.randint(0, 256, num_of_dust)) # brightness
        for pos_y, pos_x, half_w, half_h, b in dusts:
            top = np.clip(pos_y - half_h, 0, height - 1)
            bottom = np.clip(pos_y + half_h, 0, height - 1)
            left = np.clip(pos_x - half_w, 0, width - 1)
            right = np.clip(pos_x + half_w, 0, width - 1)
            x[i, top:bottom, left:right, :] = b
    return x

# ...

noised_train_flow = ((add_dust_to_batch_images(x), y) for x, y in train_flow)

Le nombre, la position, la taille et la luminosité des rectangles sont aléatoires. Je pense que la guitare du sujet est souvent reflétée près du centre, donc j'essaye de distribuer autant de rectangles que possible près du centre.

Il s'agit de l'image réellement traitée.

noise_demo.jpg

Vous pouvez voir que le contour du corps et une partie de l'assemblage sont masqués par le rectangle ajouté.

Du point de vue de l'ajout de bruit, nous avons également envisagé d'insérer Dropout immédiatement après l'entrée, mais cette fois, l'objectif est de "masquer les caractéristiques locales" comme mentionné ci-dessus, nous avons donc décidé que Dropout, qui ajoute du bruit uniformément à l'ensemble, ne convient pas. Fait.

Résultat d'apprentissage

Entraînons le modèle avec du bruit ajouté à l'entrée. Similaire à Dernière fois, il s'agit d'un apprentissage par transfert utilisant ResNet-50 qui a déjà été formé à ImageNet.

La transition de la précision est comme ça.

noised_trans.png

De manière surprenante, il n'y a presque aucun effet sur la vitesse d'apprentissage en raison de l'ajout de bruit.

Le meilleur score est la 54e étape, avec une précision d'apprentissage de 99,95% et une précision de vérification de 100%. Essayons à nouveau l'inférence en utilisant l'instantané à ce stade.

Laisse moi déduire ceci et cela

Jazzmaster, Les Paul et Akogi sans graffiti sont les mêmes bons résultats que la dernière fois, donc je vais les omettre.

Attention, l'image de Jazzmaster avec des graffitis, qui a été jugée comme "Flying V" pour une raison quelconque la dernière fois. Et cette fois?

jm2.jpg

Il a été amélioré avec succès.

En revanche, voici l'évolution de la partition, Duo Sonic.

ds.JPG

La dernière fois, il a été jugé "Mustang", mais cette fois, il s'agit de "Stratocaster". En raison de la capture de caractéristiques plus globales, la forme des protections et des ponts peut avoir été prise en compte.

Impressions

Je sens que j'ai atteint mon objectif d'une manière ou d'une autre. (adapté)

Je pense que ce que j'essaye cette fois est une technique semi-courante dans le domaine académique, mais quand je l'applique à des sujets familiers, cela approfondit ma compréhension et est intéressante.

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
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)
Bases de l'apprentissage automatique (mémoire)
Apprendre avec l'enseignant 1 Principes de base de l'apprentissage avec l'enseignant (classification)
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 ③ 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)
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.
Reconstruction d'images animées par Autoencoder en utilisant 3D-CNN
Apprentissage automatique à partir de Python Personal Memorandum Part2
Début de l'apprentissage automatique (matériel didactique / informations recommandés)
Essayez de prédire la demande de puissance par l'apprentissage automatique
Apprentissage automatique du sport-Analyse de la J-League à titre d'exemple-②
Bases de l'apprentissage avec un enseignant Partie 1-Régression simple- (Remarque)
Apprentissage automatique à partir de Python Personal Memorandum Part1
Tournoi Numerai - Fusion de quants traditionnels et apprentissage automatique -