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.
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?
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.
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.
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.
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.
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?
Il a été amélioré avec succès.
En revanche, voici l'évolution de la partition, Duo Sonic.
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.
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