Articles

Le Guide complet du Débutant sur l’Apprentissage en profondeur: Réseaux de neurones convolutifs et Classification des images

Posted by admin

« Une chose qui m’a frappé tôt est que vous ne mettez pas sur une photo ce qui va sortir. Ou, vice versa, ce qui sort n’est pas ce que vous mettez dedans. »

― Diane Arbus

Une notification apparaît sur votre réseau social préféré que quelqu’un a posté une photo qui pourrait vous contenir.

C’est vrai.

C’est la pire photo de toi qui soit.

GIF via GIPHY

Comment cela s’est-il produit?

Classification des images!

Le réseau de neurones convolutionnels (CNN) est une classe de réseaux de neurones d’apprentissage profond. Les CNN représentent une énorme percée dans la reconnaissance d’images. Ils sont le plus souvent utilisés pour analyser les images visuelles et travaillent fréquemment en coulisse dans la classification des images. Ils peuvent être trouvés au cœur de tout, du marquage de photos de Facebook aux voitures autonomes. Ils travaillent dur en coulisses dans tout, des soins de santé à la sécurité.

Ils sont rapides et efficaces. Mais comment fonctionnent-ils ?

La classification d’image est le processus de prise d’une entrée (comme une image) et de sortie d’une classe (comme « cat”) ou d’une probabilité que l’entrée soit une classe particulière (« il y a une probabilité de 90% que cette entrée soit un chat”). Vous pouvez regarder une photo et savoir que vous regardez une photo terrible de votre propre visage, mais comment un ordinateur peut-il apprendre à le faire?

Avec un réseau neuronal convolutif!

Un CNN a des couches convolutives

  • Couches ReLU
  • Couches de mise en commun
  • une couche entièrement connectée
  • Une architecture CNN classique ressemblerait à ceci:

    Input ->Convolution ->ReLU ->Convolution ->ReLU ->Pooling ->
    ReLU ->Convolution ->ReLU ->Pooling ->Fully Connected

    A CNN convolves (not convolutes…) learned features with input data and uses 2D convolutional layers. This means that this type of network is ideal for processing 2D images. Par rapport à d’autres algorithmes de classification d’images, les CNN utilisent très peu de prétraitement. Cela signifie qu’ils peuvent apprendre les filtres qui doivent être fabriqués à la main dans d’autres algorithmes. Les CNN peuvent être utilisés dans des tonnes d’applications allant de la reconnaissance d’images et de vidéos, de la classification d’images et des systèmes de recommandation au traitement du langage naturel et à l’analyse d’images médicales.

    Les CNN s’inspirent de processus biologiques. Ils sont basés sur des recherches intéressantes effectuées par Hubel et Wiesel dans les années 60 concernant la vision chez les chats et les singes. Le modèle de connectivité dans un CNN provient de leurs recherches sur l’organisation du cortex visuel. Dans l’œil d’un mammifère, les neurones individuels ne répondent aux stimuli visuels que dans le champ réceptif, qui est une région restreinte. Les champs réceptifs des différentes régions se chevauchent partiellement de sorte que tout le champ de vision est couvert. C’est ainsi qu’un CNN fonctionne !

    Image par NatWhitePhotography sur

    Les CNN ont une couche d’entrée, une couche de sortie et des couches cachées. Les couches cachées sont généralement constituées de couches convolutives, de couches ReLU, de couches de regroupement et de couches entièrement connectées.

    • Les couches convolutives appliquent une opération de convolution à l’entrée. Cela transmet les informations à la couche suivante.
    • La mise en commun combine les sorties d’amas de neurones en un seul neurone dans la couche suivante.
    • Des couches entièrement connectées relient chaque neurone d’une couche à chaque neurone de la couche suivante.

    Dans une couche convolutive, les neurones ne reçoivent l’entrée que d’une sous-zone de la couche précédente. Dans une couche entièrement connectée, chaque neurone reçoit une entrée de chaque élément de la couche précédente.

    Un CNN fonctionne en extrayant des caractéristiques des images. Cela élimine le besoin d’extraction manuelle des fonctionnalités. Les fonctionnalités ne sont pas formées! Ils sont appris pendant que le réseau s’entraîne sur un ensemble d’images. Cela rend les modèles d’apprentissage en profondeur extrêmement précis pour les tâches de vision par ordinateur. Les CNN apprennent la détection des fonctionnalités à travers des dizaines ou des centaines de couches cachées. Chaque couche augmente la complexité des entités apprises.

    GIF via GIPHY

    Un CNN

    • commence par une image d’entrée
    • lui applique de nombreux filtres différents pour créer une carte d’entités
    • applique une fonction ReLU pour augmenter la non-linéarité
    • applique une couche de regroupement à chaque carte d’entités
    • aplatit les images regroupées en un seul vecteur long.
    • entre le vecteur dans un réseau de neurones artificiels entièrement connecté.
    • traite les fonctionnalités via le réseau. La couche finale entièrement connectée fournit le « vote » des classes que nous recherchons.
    • s’entraîne par propagation vers l’avant et rétropropagation pour de nombreuses époques. Cela se répète jusqu’à ce que nous ayons un réseau neuronal bien défini avec des poids entraînés et des détecteurs de caractéristiques.

    Alors qu’est-ce que cela signifie?

    Au tout début de ce processus, une image d’entrée est décomposée en pixels.

    GIF via GIPHY

    Pour une image en noir et blanc, ces pixels sont interprétés comme un tableau 2D (par exemple, 2×2 pixels). Chaque pixel a une valeur comprise entre 0 et 255. (Zéro est complètement noir et 255 est complètement blanc. La gamme de gris existe entre ces nombres.) Sur la base de ces informations, l’ordinateur peut commencer à travailler sur les données.

    Pour une image couleur, il s’agit d’un tableau 3D avec un calque bleu, un calque vert et un calque rouge. Chacune de ces couleurs a sa propre valeur entre 0 et 255. La couleur peut être trouvée en combinant les valeurs dans chacune des trois couches.

    Convolution

    L’objectif principal de l’étape de convolution est d’extraire des entités de l’image d’entrée. La couche convolutive est toujours la première étape d’un CNN.

    Vous disposez d’une image d’entrée, d’un détecteur d’entités et d’une carte d’entités. Vous prenez le filtre et l’appliquez pixel par pixel à l’image d’entrée. Vous le faites par la multiplication des matrices.

    Disons que vous avez une lampe de poche et une feuille de papier bulle. Votre lampe de poche brille une zone de 5 bulles x 5 bulles. Pour regarder la feuille entière, vous feriez glisser votre lampe de poche sur chaque carré de 5×5 jusqu’à ce que vous ayez vu toutes les bulles.

    Photo de stux sur

    La lumière de la lampe de poche ici est votre filtre et la région sur laquelle vous glissez est le champ réceptif. La lumière glissant à travers les champs réceptifs convolve votre lampe de poche. Votre filtre est un tableau de nombres (également appelés poids ou paramètres). La distance entre la lumière et votre lampe de poche glisse au fur et à mesure qu’elle se déplace (déplacez-vous votre filtre sur une rangée de bulles à la fois? Deux ?) s’appelle la foulée. Par exemple, un pas de un signifie que vous déplacez votre filtre sur un pixel à la fois. La convention est un pas de deux.

    La profondeur du filtre doit être la même que la profondeur de l’entrée, donc si nous regardions une image couleur, la profondeur serait de 3. Cela rend les dimensions de ce filtre 5x5x3. Dans chaque position, le filtre multiplie les valeurs du filtre avec les valeurs d’origine dans le pixel. C’est une multiplication par élément. Les multiplications sont résumées, créant un seul nombre. Si vous avez commencé dans le coin supérieur gauche de votre papier bulle, ce nombre est représentatif du coin supérieur gauche. Maintenant, vous déplacez votre filtre à la position suivante et répétez le processus tout autour du film à bulles. Le tableau avec lequel vous vous retrouvez s’appelle une carte d’entités ou une carte d’activation ! Vous pouvez utiliser plus d’un filtre, ce qui permettra de mieux préserver les relations spatiales.

    GIF via GIPHY

    Vous spécifiez des paramètres tels que le nombre de filtres, la taille du filtre, l’architecture du réseau, etc. Le CNN apprend lui-même les valeurs des filtres pendant le processus de formation. Vous avez beaucoup d’options avec lesquelles vous pouvez travailler pour créer le meilleur classificateur d’images possible pour votre tâche. Vous pouvez choisir de tamponner la matrice d’entrée avec des zéros (remplissage de zéro) pour appliquer le filtre aux éléments limitrophes de la matrice d’image d’entrée. Cela vous permet également de contrôler la taille des cartes d’entités. L’ajout d’un rembourrage nul est une convolution large. Ne pas ajouter de remplissage nul est une convolution étroite.

    C’est essentiellement ainsi que nous détectons les images! Nous ne regardons pas chaque pixel d’une image. Nous voyons des caractéristiques comme un chapeau, une robe rouge, un tatouage, etc. Il y a tellement d’informations dans nos yeux à tout moment que nous ne pouvions pas en traiter chaque pixel. Nous permettons à notre modèle de faire la même chose.

    Le résultat de ceci est la carte des entités convolues. Il est plus petit que l’image d’entrée d’origine. Cela le rend plus facile et plus rapide à gérer. Perdons-nous des informations ? Certains, oui. Mais en même temps, le but du détecteur de caractéristiques est de détecter les caractéristiques, ce qui est exactement ce que cela fait.

    Nous créons de nombreuses cartes d’entités pour obtenir notre première couche convolutive. Cela nous permet d’identifier de nombreuses fonctionnalités différentes que le programme peut utiliser pour apprendre.

    Les détecteurs de caractéristiques peuvent être configurés avec des valeurs différentes pour obtenir des résultats différents. Par exemple, un filtre peut être appliqué pour affiner et focaliser une image ou flouter une image. Cela donnerait la même importance à toutes les valeurs. Vous pouvez améliorer les bords, détecter les bords, etc. Vous le feriez en appliquant différents détecteurs d’entités pour créer différentes cartes d’entités. L’ordinateur est capable de déterminer quels filtres ont le plus de sens et de les appliquer.

    Le but principal ici est de trouver des entités dans votre image, de les placer dans une carte d’entités, tout en préservant la relation spatiale entre les pixels. C’est important pour que les pixels ne soient pas tous brouillés.

    Visualisons ce truc !

    Dis bonjour à mon petit ami:

    Photo by Kirgiz03 on

    We’re going to use this guy for our input image.

    We’ll make him black and white

    Let’s define and visualize our filters

    import numpy as npfilter_vals = np.array(, , , ])print('Filter shape: ', filter_vals.shape)

    Filter shape: (4, 4)

    et nous voyons:

    Filter 1: 



    ]

    Voici une visualisation de nos quatre filtres

    Définissons maintenant une couche convolutive (j’aime PyTorch en ce moment, c’est donc ce que nous utilisons ici.)

    Nous verrons

    Net(
    (conv): Conv2d(1, 4, kernel_size=(4, 4), stride=(1, 1), bias=False)
    )

    Ajoutez un peu plus de code

    Puis un peu plus

    Et nous pouvons visualiser la sortie d’une couche convolutive avant qu’une fonction d’activation ReLu ne soit appliquée !

    Créons maintenant un noyau personnalisé en utilisant un opérateur Sobel comme filtre de détection de périphérie. Le filtre Sobel est très couramment utilisé dans la détection des bords. Il fait un bon travail pour trouver des modèles d’intensité dans une image. L’application d’un filtre de Sobel à une image est un moyen de prendre une approximation de la dérivée de l’image séparément dans la direction x ou y.

    Nous allons convertir notre petit gars en niveaux de gris pour le filtrage

    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

    C’est parti !

    Vous voulez vérifier les mathématiques? Jetez un coup d’œil à l’Introduction aux réseaux de neurones convolutionnels par Jianxin Wu

    Couche ReLU

    La couche ReLU (unité linéaire rectifiée) est une autre étape de notre couche de convolution. Vous appliquez une fonction d’activation à vos cartes d’entités pour augmenter la non-linéarité du réseau. En effet, les images elles-mêmes sont très non linéaires! Il supprime les valeurs négatives d’une carte d’activation en les mettant à zéro.

    La convolution est une opération linéaire avec des choses comme la multiplication et l’addition de matrices par élément. Les données du monde réel que nous voulons que notre CNN apprenne seront non linéaires. Nous pouvons expliquer cela avec une opération comme ReLU. Vous pouvez utiliser d’autres opérations comme tanh ou sigmoid. ReLU, cependant, est un choix populaire car il peut entraîner le réseau plus rapidement sans pénalité majeure pour la précision de la généralisation.

    Découvrez C.-C. Jay Kuo Comprendre Les Réseaux de Neurones Convolutifs Avec un Modèle Mathématique.

    Vous voulez creuser plus profondément? Essayez Kaiming He, et al. Approfondir les Redresseurs: Surpasser les Performances au Niveau Humain sur la Classification ImageNet.

    Si vous avez besoin d’un peu plus d’informations sur les bases absolues des fonctions d’activation, vous pouvez le trouver ici!

    Voici comment notre petit copain s’occupe d’une fonction d’activation ReLU qui noircit toutes les valeurs de pixels négatifs

    viz_layer(activated_layer)

    Related Post

    Leave A Comment