[PYTHON] Principes de base de la reconnaissance d'image CNN 1

Aidemy 2020/10/2

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Je vous remercie! Ceci est le premier message de CNN. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ À propos de la reconnaissance d'image ・ Mise en œuvre de CNN ・ Hyper paramètres dans CNN

À propos de la reconnaissance d'image

Qu'est-ce que la reconnaissance d'image?

-La reconnaissance d'image est une technologie qui détecte les «choses» et les «caractéristiques» telles que les personnages et les visages qui apparaissent dans les images et les vidéos. ・ Cette fois, nous allons apprendre __CNN (Convolutional Neural Network) __, une méthode d'apprentissage en profondeur largement utilisée dans la reconnaissance d'images.

À propos de CNN

-CNN est un réseau neuronal qui extrait des caractéristiques en utilisant une couche appelée __ "couche pliante" __ qui a une structure similaire au champ visuel du cerveau humain. Il présente des performances particulièrement élevées dans le domaine de la reconnaissance d'images. -La couche de convolution CNN peut traiter des données d'image qui restent bidimensionnelles. Autrement dit, __ est excellent pour extraire des caractéristiques bidimensionnelles telles que des lignes et des coins. -En plus de la couche de pliage, il y a aussi une __ "couche de pooling" __. La couche de regroupement contracte les informations obtenues à partir de la couche __folding et classe finalement les images __.

À propos de la couche de pliage

-Le calque de pliage est un calque qui se concentre sur une partie des données __input et examine (= replie) les caractéristiques de l'image dans cette partie __. -Les caractéristiques à extraire sont automatiquement apprises par les données d'entraînement et la valeur de la fonction de perte! -Chaque caractéristique (nez, bouche, etc. pour un visage humain) est traitée comme une matrice de poids appelée __filter (noyau) __ dans le programme, et un filtre est utilisé pour chaque caractéristique.

À propos de la couche de pooling

-La couche de pooling est une couche qui réduit (compresse) les données de sortie de la couche __folding et réduit la quantité de données __. La raison de la sous-traitance est que parmi les caractéristiques des données d'image, les mêmes caractéristiques sont souvent regroupées au même endroit, tandis que les endroits sans caractéristiques sont souvent largement distribués, donc si vous les pliez tels quels __ C'est parce que la sortie devient inutile __. -En tant que méthode de réduction (compression), prenez la valeur maximale de chaque fonctionnalité (Max pooling) ou prenez la moyenne (Avarage pooling).

Mise en œuvre de CNN

-Implémenter CNN en utilisant Keras + TensorFlow. La plupart d'entre eux sont utilisés dans la pratique. -La méthode de création est la même que l '"apprentissage supervisé" qui a été fait auparavant. __ Tout d'abord, créez une instance séquentielle, puis ajoutez des couches couche par couche avec la méthode add, et enfin compilez avec la méthode de compilation __.

#Créer une instance
model=Sequential()
#Ajouter une couche (les paramètres seront décrits plus tard)
model.add(Dense(128))
#Ajout d'une couche de convolution
model.add(Conv2D(filters=64, kernel_size=(3, 3)))
#Ajout d'une couche de pooling
model.add(MaxPooling2D(pool_size=(2,2)))
#compiler
model.compile(optimizer=sgd,loss="categorical_crossentropy",metrics=["accuracy"])

Classification des caractères manuscrits

-Classez le jeu de données de caractères manuscrits MNIST en utilisant CNN. Bien que les détails soient omis, la procédure décrite dans la section précédente peut être utilisée. -En plus des caractères manuscrits, nous avons également classé "CIFER-10", qui est un ensemble de données d'images de véhicules et d'animaux.

Hyper paramètres

Présentation des hyperparamètres CNN

・ Hyper paramètre de la couche de convolution (Conv) -__ Filtres__: Nombre de fonctionnalités à extraire -__ Kernel_size__: taille du noyau -__ Strides__: Distance pour déplacer le noyau ・ Padding: La taille de la marge créée à l'extérieur de l'image ・ Hyper paramètres de la couche de pooling (Pool) -__ Taille du pool__: spécifiez la plage à regrouper à la fois -__ Foulées__: Distance pour déplacer la plage de regroupement (intervalle de regroupement) ・ Padding: La taille de la marge créée à l'extérieur de l'image

Hyperparamètres de la couche de convolution (Conv)

filters -Filters spécifie le nombre de mappages d'entités à générer, c'est-à-dire __type d'entités à extraire __. ・ Si les filtres sont trop petits, les fonctionnalités ne peuvent pas être extraites suffisamment, et si elles sont trop grandes, un surapprentissage se produira.

kernel_size -Kernel_size indique la taille du __kernel __. -Un noyau est une matrice de poids utilisée pour la convolution, c'est-à-dire qu'elle ressemble à une lentille __ qui détecte __ caractéristiques. ・ Si kernel_size est trop petit, même les petites fonctionnalités ne rentreront pas dans l'objectif et ne pourront pas être détectées correctement. Au contraire, si elle est trop grande, une entité qui doit être détectée comme petite entité est extraite comme une seule grande entité.

strides -Strides spécifie l'intervalle d'extraction des fonctionnalités, c'est-à-dire la distance __ pour déplacer le noyau. -Plus la valeur des rayures est petite, plus l'intervalle d'extraction des entités est court, de sorte que la quantité d'entités peut être extraite en détail. Cependant, comme de nombreuses pièces se chevauchent, la détection de la même pièce augmente. ・ Cependant, __ en général, plus les foulées sont petites, mieux __. La valeur par défaut est la plus basse (1,1).

padding ・ Le remplissage indique la taille de la marge créée à l'extérieur de l'image __. La marge est créée pour empêcher une réduction d'image involontaire pendant le pliage. De plus, il existe divers avantages tels que les caractéristiques des données finales prises en considération, la fréquence des mises à jour des données augmentant et le nombre d'unités d'entrée / sortie de chaque couche pouvant être ajusté. -En général, réglez le pixel à ajouter à 0. C'est ce qu'on appelle le «remplissage nul». ・ En plus d'exprimer la largeur de la marge comme __padding = (1,1) __, dans la couche Conv2D, elle peut également être exprimée comme padding = valid, padding = same. Le premier ne remplit pas et le second est la sortie. Faites une marge pour que la taille corresponde à la taille de l'entrée.

Hyper paramètres de la couche de pooling (Pool)

pool_size -Pool_size est la plage __ qui peut être regroupée en une seule fois. Le traitement est le même que le noyau, comme __lens __. -Si pool_size est grand, on peut dire que c'est préférable car la sortie ne change pas même si la position de la fonction change un peu. __ En général, il devrait être (2x2) __.

strides -Strides est la distance __ qui déplace la plage __pool. Il se comporte de la même manière que dans le noyau de la couche de convolution.

padding -Le rembourrage fonctionne de la même manière que celui de la couche de pliage. La méthode de réglage est la même, alors reportez-vous à cela.

Résumé

・ Dans le domaine de la reconnaissance d'image, l'apprentissage en profondeur est réalisé à l'aide de __CNN (réseau neuronal convolutif) __. -Dans CNN, une partie de l'image est extraite pour trouver des caractéristiques __ "couche de convolution (Conv)" _, et les informations extraites sont réduites et classées pour réduire le gaspillage de données et améliorer la précision _ Il y a un "Pool" __. En plus, il y a aussi le "Dense" appris dans "Teached Learning". -Il y a aussi des hyper paramètres. Les hyper paramètres de la couche de convolution sont filters, qui indique le nombre d'entités à extraire, kernel_size, qui indique la taille du noyau (objectif pour l'extraction d'entités), strides, qui indique la distance pour déplacer le noyau, et la marge créée à l'extérieur de l'image. Il y a padding indiquant la taille. -Les hyper paramètres de la couche de regroupement (Pool) incluent pool size, qui indique la plage à regrouper à la fois, strides, qui indique la distance pour déplacer la plage de regroupement, et padding, qui indique la taille de la marge créée en dehors de l'image.

Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.

Recommended Posts

Principes de base de la reconnaissance d'image CNN 1
Application de la reconnaissance d'image CNN2
Reconnaissance d'image
Construction et bases de l'environnement de reconnaissance d'image
Python: Application de la reconnaissance d'image à l'aide de CNN
Reconnaissance d'image à l'aide de chevaux et de cerfs CNN
Reconnaissance d'image avec keras
Tutoriel Pepper (7): Reconnaissance d'image
Reconnaissance d'image par apprentissage profond 1 théorie
CNN (1) pour la classification des images (pour les débutants)
Reconnaissance d'image avec Keras + OpenCV
Principes de base du traitement d'image en temps réel avec opencv
python x tensoflow x reconnaissance de visage d'image
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Reconnaissance vocale: Classification des genres Part2-Classification des genres musicaux CNN
Reconnaissance d'image des fruits avec VGG16
Bases du traitement d'images binarisées par Python
Estimation de catégorie à l'aide de l'API de reconnaissance d'image de docomo
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Reconnaissance d'image en apprentissage profond 3 après la création du modèle
J'ai essayé la reconnaissance d'image simple avec Jupyter