0% ont trouvé ce document utile (0 vote)
12 vues29 pages

Vision par ordinateur et réseaux neuronaux

Ce document décrit les réseaux de neurones convolutifs et leur application à la vision par ordinateur. Il présente les opérations de convolution et leur utilisation pour la détection de bords dans les images. Différents filtres de convolution sont discutés pour détecter les bords horizontaux et verticaux.

Transféré par

syslinux2000
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues29 pages

Vision par ordinateur et réseaux neuronaux

Ce document décrit les réseaux de neurones convolutifs et leur application à la vision par ordinateur. Il présente les opérations de convolution et leur utilisation pour la détection de bords dans les images. Différents filtres de convolution sont discutés pour détecter les bords horizontaux et verticaux.

Transféré par

syslinux2000
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

2 Vision par ordinateur - Réseaux de neurones convolutifs -

Computer vision - Convolutional Neural Networks

2.1 Introduction

La vision par ordinateur est l'un des domaines qui progresse rapidement grâce au deep learning. La vision
par ordinateur d'apprentissage en profondeur aide maintenant les voitures autonomes à déterminer où se
trouvent les autres voitures et les piétons afin de les éviter.

Premièrement, les progrès rapides de la vision par ordinateur permettent de visualiser de toutes nouvelles
applications, même si elles étaient tout simplement impossibles il y a quelques années. Et en apprenant ces
outils, vous pourrez peut-être inventer certains de ces nouveaux produits et applications. Deuxièmement,
même si vous ne finissez pas par construire des systèmes de vision par ordinateur en soi, parce que la
communauté de recherche en vision par ordinateur a été si créative et si inventive en proposant de
nouvelles architectures et algorithmes de réseau neuronal, est en fait une beaucoup de fertilisation croisée
dans d'autres domaines également.

Voici quelques exemples de problèmes de vision par ordinateur que nous étudierons dans ce chapitre. Vous
avez déjà vu des classifications d'images, parfois aussi appelées reconnaissance d'images, où vous pourriez
prendre comme entrée une image 64 par 64 et essayer de comprendre, est-ce un chat?

Un autre exemple du problème de vision par ordinateur est la détection d'objets. Donc, si vous construisez
une voiture autonome, vous n'avez peut-être pas simplement besoin de comprendre qu'il y a d'autres
voitures dans cette image. Mais au lieu de cela, vous devez déterminer la position des autres voitures sur
cette image, afin que votre voiture puisse les éviter. Dans la détection d'objets, généralement, nous devons
non seulement comprendre que ces autres objets disent des voitures et des images, mais aussi dessiner des
boîtes autour d'eux.
L'un des défis des problèmes de vision par ordinateur est que les entrées peuvent devenir vraiment
importantes. Par exemple, dans les cours précédents, vous avez travaillé avec 64 sur 64 images. Et donc
c'est 64 par 64 par 3 car il y a trois canaux de couleur.

Et ce n'est pas trop mal. Mais 64 par 64 est en fait une très petite image. Si vous travaillez avec des images
plus grandes, il s'agit peut-être d'une image de 1000 pixels sur 1000 pixels, et ce n'est en fait qu'un
mégapixel. Mais la dimension des entités d'entrée sera de 1 000 x 1 000 x 3, car vous avez trois canaux RGB,
et cela fait trois millions.

Mais si vous avez trois millions d'entités d'entrée, cela signifie que X ici aura trois millions de dimensions. Et
donc, si dans la première couche cachée vous n'avez peut-être que 1000 unités cachées, alors le nombre
total de poids qui est la matrice W1, si vous utilisez un réseau standard ou entièrement connecté comme
nous l'avons dans le chapitre 02.
Et avec autant de paramètres, il est difficile d'obtenir suffisamment de données pour empêcher un réseau
neuronal de se surajouter. Et aussi, les exigences de calcul et les exigences de mémoire pour entraîner un
réseau de neurones avec trois milliards de paramètres sont juste un peu irréalisables. Mais pour les
applications de vision par ordinateur, vous ne voulez pas être bloqué en utilisant seulement de minuscules
petites images. Vous souhaitez utiliser de grandes images. Pour ce faire, vous devez mieux implémenter
l'opération de convolution, qui est l'un des éléments fondamentaux des réseaux de neurones convolutifs.

2.2 Détection des bords - I

Dans cette section, nous allons utiliser la détection des contours comme exemple, et vous verrez comment
fonctionne l'opération de convolution.

Prenons un exemple. Étant donné une image comme celle-ci pour qu'un ordinateur détermine quels sont
les objets de cette image

La première chose que vous pourriez faire est peut-être de détecter les bords verticaux de cette image. Par
exemple, cette image a toutes ces lignes verticales, où se trouvent les bâtiments, ainsi que des sortes de
lignes verticales qui représentent toutes les lignes de ces piétons et ainsi celles-ci sont détectées dans cette
sortie de détecteur de bord vertical. Et vous voudrez peut-être aussi détecter les bords horizontaux, par
exemple, il y a une ligne horizontale très forte où se trouve ce garde-corps et qui est également détectée à
peu près ici. Comment détectez-vous les bords d'une image comme celle-ci?

Regardons avec un exemple. Voici une image en niveaux de gris 6 par 6 et comme il s'agit d'une image en
niveaux de gris, il ne s'agit que d'une matrice 6 par 6 par 1 plutôt que de 6 par 6 par 3 car ils sont sur des
canaux RGB séparés.

Afin de détecter des bords ou disons des bords verticaux dans son image, ce que vous pouvez faire est de
construire une matrice 3 par 3 et dans les pollens lorsque la terminologie des réseaux de neurones
convolutifs, cela va être appelé un filtre. Et je vais construire un filtre 3 par 3 ou une matrice 3 par 3 qui
ressemble à ceci 1, 1, 1, 0, 0, 0, -1, -1, -1.

Et ce que vous allez faire est de prendre l'image 6 par 6 et de la convoluer et l'opération de convolution est
indiquée par cet astérisque et de la convoluer avec le filtre 3 par 3.

La sortie de cet opérateur de convolution sera une matrice 4 sur 4, que vous pouvez interpréter, que vous
pouvez considérer comme une image 4 sur 4.
La façon dont vous calculez cette sortie 4 par 4 est la suivante, pour calculer les premiers éléments,
l'élément supérieur gauche de cette matrice 4 par 4, ce que vous allez faire est de prendre le
filtre 3 par 3 et de le coller sur le dessus du Région 3 par 3 de votre image d'entrée d'origine.

Ensuite, pour déterminer quel est ce deuxième élément, vous allez prendre le carré bleu et le décaler d'un
pas vers la droite comme ça. Vous allez faire le même produit élément par élément, puis ajouter.
Ensuite, pour obtenir cet élément dans la rangée suivante , prenez le carré bleu et déplacez-le
maintenant d'un vers le bas.
Finalement, une matrice 6 par 6 convolve de la matrice 3 par 3 vous donne une matrice 4 par 4. Et ce sont
des images et des filtres. La matrice de gauche est pratique à interpréter comme une image, et celle du
milieu que nous interprétons comme un filtre et celle de droite, vous pouvez interpréter cela comme peut-
être une autre image. Et cela s'avère être un détecteur de bord vertical. Tous les frameworks de deep
learning qui supportent bien la vision par ordinateur auront des fonctions pour implémenter cet opérateur
de convolution.

Pourquoi cela fait-il une détection des bords verticaux?

Regardons un autre exemple. Pour illustrer cela, nous allons utiliser une image simplifiée. Voici une simple
image 6 par 6 où la moitié gauche de l'image est 10 et la moitié droite est zéro. Si vous tracez cela sous
forme d'image, cela pourrait ressembler à ceci, où la moitié gauche, les 10, vous donnent des valeurs
d'intensité de pixels plus brillantes et la moitié droite vous donne des valeurs d'intensité de pixels plus
sombres.

Mais dans cette image, il y a clairement un bord vertical très fort au milieu de cette image alors qu'il passe
du blanc au noir ou du blanc à une couleur plus foncée. Lorsque vous convolutez ceci avec le filtre 3 par 3 et
que ce filtre 3 par 3 peut être visualisé comme suit. Ce que vous obtenez est cette matrice sur la droite.
L'opération de convolution vous offre un moyen pratique de spécifier comment trouver ces bords verticaux
dans une image.

2.3 Détection des bords - II

Vous avez vu comment l'opération de convolution vous permet de mettre en œuvre un détecteur de bord
vertical. Dans cette section, vous apprendrez la différence entre les bords positifs et négatifs, c'est-à-dire la
différence entre les transitions de bord clair à foncé et sombre à clair. Et vous verrez également d'autres
types de détecteurs de bord, ainsi que la façon de faire apprendre un algorithme, plutôt que de nous faire
coder en dur un détecteur de bord comme nous l'avons fait jusqu'à présent.

Voici l'exemple que vous avez vu de la section précédente, où vous avez cette image, six par six, il y a de la
lumière à gauche et de l'obscurité à droite, et la convolution avec le filtre de détection de bord vertical
permet de détecter le bord vertical au milieu de l'image.

Que se passe-t-il dans une image où les couleurs sont inversées, où elle est plus sombre à gauche et plus
lumineuse à droite?
Si vous le convoluez avec le même filtre de détection de bord, vous vous retrouvez avec 30s négatifs, au lieu
de 30 au milieu, et vous pouvez tracer cela comme une image qui ressemble peut-être à ça. Ainsi, comme la
nuance des transitions est inversée, les 30s sont également inversées. Ce filtre particulier fait une différence
entre les bords clairs à foncés et les bords foncés à clairs.

Exemples:

Ce filtre trois par trois que nous avons vu à gauche vous permet de détecter les bords verticaux. Alors peut-
être que cela ne devrait pas trop vous surprendre que ce filtre trois par trois vous à droite permette de
détecter les bords horizontaux.

Celui-ci est un exemple plus complexe, où vous avez ici des 10 dans les coins supérieur gauche et inférieur
droit. Et si vous convoluez cela avec un détecteur de bord horizontal, vous vous retrouvez avec la matrice à
droite.

Donc en résumé, différents filtres vous permettent de trouver des bords verticaux et horizontaux. Il s'avère
que le filtre de détection de bord vertical trois par trois que nous avons utilisé n'est qu'un choix possible. Et
historiquement, dans la littérature sur la vision par ordinateur, il y avait pas mal de débats sur le meilleur
ensemble de nombres à utiliser. Alors, voici quelque chose d'autre que vous pourriez utiliser, qui est peut-
être 1, 2, 1, 0, 0, 0, -1, -2, -1. C'est ce qu'on appelle un filtre Sobel. Et l'avantage de cela est que cela donne
un peu plus de poids à la rangée centrale, le pixel central, ce qui le rend peut-être un peu plus robuste.
Et avec le progrès de Deep Learning, l'une des choses que nous avons apprises est que lorsque vous voulez
vraiment détecter les contours d'une image compliquée, vous n'avez peut-être pas besoin de demander à
des chercheurs en vision par ordinateur de sélectionner ces neuf nombres. Peut-être que vous pouvez
simplement les apprendre et traiter les neuf nombres de cette matrice comme des paramètres, que vous
pouvez ensuite apprendre en utilisant la propagation arrière.

Et ce que vous voyez dans les sections ultérieures, c'est qu'en traitant simplement ces neuf nombres comme
des paramètres, le back propagation peut choisir d'apprendre 1, 1, 1, 0, 0, 0, -1, -1, s'il le souhaite, ou
apprendre le Sobel filtrez ou apprenez le filtre Scharr, ou apprenez plus probablement quelque chose
d'autre qui est encore meilleur pour capturer les statistiques de vos données que n'importe lequel de ces
filtres codés à la main.

Et donc, en laissant simplement tous ces nombres être des paramètres et en les apprenant
automatiquement à partir de données, nous constatons que les réseaux de neurones peuvent réellement
apprendre des caractéristiques de bas niveau, peuvent apprendre des caractéristiques telles que les bords,
encore plus robustes que les chercheurs en vision par ordinateur sont généralement capables de coder ces
choses à la main.

2.4 Padding (Remplissage)

Afin de construire des réseaux de neurones profonds, une modification de l'opération convolutive de base
que vous devez vraiment utiliser est le Padding. Ce que nous avons vu dans les sections précédentes, c'est
que si vous prenez une image six par six et que vous la convollez avec un filtre trois par trois, vous vous
retrouvez avec une sortie quatre par quatre avec une matrice quatre par quatre, et c'est parce que le
nombre de positions possibles avec le filtre trois par trois, il n'y a que, en quelque sorte, quatre par quatre
positions possibles, pour que le filtre trois par trois s'adapte à votre matrice six par six.

Et le calcul de ceci s'avère être que si vous avez une image fin par fin et impliquée avec un filtre f par f, alors
la dimension de la sortie sera
Donc, les deux inconvénients à cela:

L'un est que, si chaque fois que vous appliquez un opérateur convolutif, votre image se rétrécit, donc

vous passez de six par six à quatre par quatre alors, vous ne pouvez le faire que quelques fois avant

que votre image ne commence à devenir vraiment petite, peut-être qu'elle rétrécit jusqu'à un par un,

alors peut-être que vous ne voulez pas que votre image se rétrécisse à chaque fois que vous détectez
des contours ou que vous définissez d'autres caractéristiques dessus

Le deuxième inconvénient est que, si vous regardez le pixel au coin ou au bord(vert), ce petit pixel est

touché comme utilisé uniquement dans l'une des sorties, car il touche cette région trois par trois. Alors

que si vous prenez un pixel au milieu(rouge), alors il y a beaucoup de régions trois par trois qui

chevauchent ce pixel et donc, c'est comme si les pixels sur les coins ou sur les bords étaient beaucoup

moins utilisés dans la sortie. Vous jetez donc beaucoup d'informations près du bord de l'image.

Afin de résoudre ces deux problèmes, vous pouvez appliquer pleinement l'opération convolutive. Vous
pouvez remplir l'image. Donc, dans ce cas, disons que vous remplissez l'image avec une bordure
supplémentaire, avec la bordure supplémentaire d'un pixel tout autour des bords. Donc, si vous faites cela,
au lieu d'une image de six par six, vous l'avez maintenant complétée à une image de huit par huit et si vous
convollez une image de huit par huit avec une image de trois par trois. Maintenant, vous avez donc réussi à
conserver la taille d'entrée d'origine de six par six. Donc par convention quand vous pad, vous avez rempli
avec des zéros.
si est les montants de remplissage. dans notre cas

En termes de quantité à remplir, il s'avère qu'il existe deux choix courants appelés, les convolutions valides
et les mêmes convolutions.(Valid Convolutions & Same Convolutions)

2.4.1 Valid convolutions

Dans une convolution valide, cela signifie essentiellement pas de remplissage. Et donc, dans ce cas, vous
pourriez avoir n par n image convolue avec un filtre f par f et cela vous donnerait une sortie (n-f)(n-f). Donc,
c'est comme l'exemple que nous avions précédemment où nous avions une image 6 par 6 convolue avec le
filtre 3 par 3 et qui vous donnait une sortie 4 par 4.

2.4.2 Same Convolutions

L'autre choix de remplissage le plus courant est appelé la même convolution et cela signifie que lorsque
vous remplissez, la taille de sortie est la même que la taille d'entrée. Et par convention en vision par
ordinateur, est généralement impair.

2.5 Convolutions foulées(Strided Convolutions)

Les convolutions foulées sont un autre élément du bloc de construction de base des convolutions telles
qu'elles sont utilisées dans les réseaux de neurones convolutifs.

Disons que vous voulez convoluer cette image sept par sept avec ce filtre trois par trois, sauf qu'au lieu de
faire de la manière habituelle, nous allons le faire avec une foulée de deux.
Cela signifie que vous prenez le produit comme d'habitude dans cette région supérieure gauche de trois par
trois, puis multipliez et ajoutez et cela vous donne 91. Mais au lieu de franchir la boîte bleue d'un pas, nous
allons passer au-dessus en deux étapes.

Donc, nous allons le faire sauter sur deux étapes comme ça. Remarquez comment le coin supérieur gauche
est passé de ce début à ce début, sautant par-dessus une position. Et puis vous faites le produit habituel et
en additionnant il s'avère 100. Et maintenant nous allons le faire à nouveau, et faire sauter la boîte bleue de
deux étapes. Vous vous retrouvez là-bas, et cela vous donne 83. Maintenant, lorsque vous passez à la ligne
suivante, vous faites à nouveau deux pas au lieu d'un pas

Les dimensions d'entrée et de sortie est décrites par la formule suivante:


si vous avez une image par , ils convoluent avec un filtre par . Et si vous utilisez le rembourrage
et la foulée .

Maintenant, juste un dernier détail qui est ce que de cette fraction n'est pas un entier? Dans ce cas, nous
allons arrondir cela pour que cette notation indique le plancher de quelque chose. Ceci est également
appelé le plancher de Z. Cela signifie prendre Z et arrondir à l'entier inférieur le plus proche.

2.6 Convolutions sur volume

Vous avez vu comment fonctionnent les convolutions sur les images 2D. Voyons maintenant comment vous
pouvez implémenter des convolutions non seulement sur des images 2D, mais sur des volumes
tridimensionnels.

Commençons par un exemple, disons que vous souhaitez détecter des caractéristiques, non seulement dans
une image de style gris, mais dans une image RGB. Ainsi, une image RGB pourrait être au lieu d'une image
de six par six, elle pourrait être de six par six par trois, où les trois ici répondent aux trois canaux de couleur.
Donc, vous pensez à cela comme une pile(ou un tenseur) de trois six par six images. Afin de détecter les
contours ou une autre caractéristique de cette image, vous pouvez le convolluer, non pas avec un filtre trois
par trois, comme nous l'avons fait précédemment, mais maintenant avec également un filtre 3D, cela va
être trois par trois par trois.

Ainsi, le filtre lui-même aura également trois couches correspondant aux canaux rouge, vert et bleu. Donc,
pour donner des noms à ces choses, ce six premier, c'est la hauteur de l'image, le deuxième c'est la largeur,
et ce troisième est donc le nombre de canaux. Et votre filtre a également une hauteur, une largeur et le
nombre de canaux. Et le nombre de canaux dans votre image doit correspondre au nombre de canaux dans
votre filtre. mais la sortie de ceci sera une image quatre par quatre. Et remarquez que c'est quatre par
quatre par un, il n'y a plus de trois à la fin.
Voyons en détail comment cela fonctionne.

Voici donc l'image six par six par trois, et voici un filtre trois par trois par trois, et ce dernier nombre, le
nombre de canaux correspond à l'image 3D et au filtre.

Donc, pour simplifier le dessin de ce filtre trois par trois par trois, au lieu de le joindre, c'est une pile de
matrices, je vais aussi, parfois, simplement le dessiner comme ce cube en trois dimensions, comme ça.
Donc, pour calculer la sortie de cette opération convolutive, ce que vous feriez est de prendre le filtre trois
par trois par trois et d'abord, placez-le dans la position la plus en haut à gauche. Alors, notez que ce filtre
trois par trois par trois a 27 nombres, ou 27 paramètres, soit trois cubes.

Et donc, ce que vous faites est de prendre chacun de ces 27 nombres et de les multiplier par les nombres
correspondants des canaux rouge, vert et bleu de l'image, alors prenez les neuf premiers nombres du canal
rouge, puis les trois en dessous vers le canal vert, puis les trois en dessous au canal bleu, et multipliez-le
avec les 27 nombres correspondants qui sont couverts par ce cube jaune apparaissent sur la gauche.
Additionnez ensuite tous ces nombres et cela vous donne ce premier nombre dans la sortie, puis pour
calculer la sortie suivante, vous prenez ce cube et faites-le glisser d'un, et encore une fois, en raison de 27
multiplications, additionnez les 27 nombres, que vous donne cette sortie suivante, faites-le pour le numéro
suivant, pour la position suivante, cela donne la troisième sortie et ainsi de suite.
Alors, qu'est-ce que cela vous permet de faire? Eh bien, voici un exemple, ce filtre est trois par trois par trois.
Donc, si vous voulez détecter les bords dans le canal rouge de l'image, alors vous pouvez avoir le premier
filtre, les 1 et -1 comme d'habitude, et avoir le canal vert être tous des zéros et que le filtre bleu soit tous
des zéros. Et si vous avez ces trois actions ensemble pour former votre filtre trois par trois par trois, alors ce
serait un filtre qui détecte les bords, les bords verticaux mais uniquement dans le canal rouge.

Et par convention, en vision par ordinateur, lorsque vous avez une entrée avec une certaine hauteur, une
certaine largeur et un certain nombre de canaux, alors votre filtre aura une hauteur potentielle différente,
une largeur différente, mais le même nombre de canaux.

Maintenant que vous savez comment convoluer sur des volumes, il y a une dernière idée qui sera cruciale
pour la construction de réseaux de neurones convolutifs, que se passerait-il si nous ne voulions pas
seulement détecter les bords verticaux? Et si nous voulions détecter les bords verticaux et horizontaux et
peut-être les bords à 45 degrés et peut-être les bords à 70 degrés également, mais en d'autres termes, que
se passe-t-il si vous souhaitez utiliser plusieurs filtres en même temps?
Donc, voici l'image que nous avions précédemment, nous avions six par six par trois convolués avec trois
par trois par trois, obtenons quatre par quatre, et peut-être qu'il s'agit d'un détecteur de bord vertical, ou
peut-être qu'il est exécuté pour détecter un autre fonctionnalité. Maintenant, peut-être qu'un deuxième
filtre peut être désigné par cette couleur orangée, qui pourrait être un détecteur de bord horizontal. Donc,
peut-être que la convolution avec le premier filtre vous donne cette première sortie quatre par quatre et la
convolution avec le deuxième filtre vous donne une sortie quatre par quatre différente. Et ce que nous
pouvons faire, c'est alors prendre ces deux sorties quatre par quatre, prendre cette première à l'avant et
vous pouvez prendre cette deuxième sortie de filtre le mettre à l'arrière comme suit, de sorte qu'en
empilant ces deux ensemble, vous vous retrouvez avec un volume de sortie quatre par quatre par deux,
non?

Donc si est le nombre de canaux, d'où est le nombre de filtres que vous utilisez, dans notre exemple,
2. en supposant que vous utilisiez une foulée d'un seul et pas de remplissage.

Donc cette idée de convolution sur les volumes, s'avère vraiment puissante. Seule une petite partie de celui-
ci est que vous pouvez désormais opérer directement sur des images RBG avec trois canaux. Mais ce qui est
encore plus important, c'est que vous pouvez maintenant détecter deux caractéristiques, comme des bords
verticaux, horizontaux, ou 10, ou peut-être 128 caractéristiques différentes. Et la sortie aura alors un nombre
de canaux égal au nombre de filtres que vous détectez.

2.7 Une couche d'un réseau convolutif

2.7.1 Rappel: Fonctions d'activation ReLU & GeLU(Rectified Linear Unit)

Dans le contexte des réseaux de neurones artificiels, la fonction d'activation du redresseur ou ReLU
(Rectified Linear Unit) est une fonction d'activation définie comme la partie positive de son argument:

Gaussian Error Linear Unit (GELU)

GELU est une approximation douce du redresseur. Il a une «bosse» non monotone lorsque x <0.
Où est est la fonction de distribution cumulative de la distribution normale standard.

2.7.2 Construction d'une couche d'un réseau convolutif

Comment construire une couche d'un réseau neuronal convolutif? Prenons l'exemple suivant:
Disons que la convolution avec le premier filtre donne cette première sortie 4 par 4, et la convolution avec
ce deuxième filtre donne une sortie 4 par 4 différente. La dernière chose à faire pour transformer cela en
une couche de réseau neuronal convolutif, c'est que pour chacun d'entre eux, nous allons ajouter un biais,
donc ce sera un nombre réel. Et là où python diffuse, vous devez en quelque sorte ajouter le même nombre
pour chacun de ces 16 éléments. Et puis appliquez une non-linéarité(fonction d'activation) qui pour cette
illustration qui dit ReLU non-linéarité, et cela vous donne une sortie 4 par 4. Après avoir appliqué le biais et
la non-linéarité. Et puis pour cette chose en bas également, vous ajoutez un biais différent, encore une fois,
c'est un nombre réel. Vous ajoutez donc le nombre unique aux 16 nombres, puis appliquez une certaine
non-linéarité(ReLU aussi). Et cela vous donne une sortie 4 par 4 différente. Ensuite, comme nous l'avons fait
auparavant, si nous prenons cela et l'empilons comme suit, nous nous retrouvons donc avec des sorties 4
par 4 par 2. Ensuite, ce calcul où vous venez d'un 6 par 6 par 3 à 4 par 4 par 2, c'est une couche d'un réseau
de neurones convolutifs.

2.7.3 Processus de calcul dans la couche

Donc, pour mapper cela à une couche de quatre propagation dans le réseau de neurones standard, dans un
réseau de neurones non convolutif.

Notre input est cette image de 6 par 6 par 3.

Et ces filtres jouent un rôle similaire à .


Et vous vous souvenez pendant l'opération de convolution, vous preniez ces 27 nombres, ou

vraiment bien, 27 fois 2, car vous avez deux filtres. Vous prenez tous ces nombres et vous les multipliez.
Vous calculez donc vraiment une fonction linéaire pour obtenir cette matrice 4 x 4. Donc, cette matrice 4 x 4,
la sortie de l'opération de convolution, qui joue un rôle similaire à .

Et puis l'autre chose que vous faites est d'ajouter le biais. Donc cela(d'appliquer la ReLU)

joue un rôle similaire à .

Et puis c'est finalement en appliquant la non-linéarité. Cela devient vraiment votre

activation .

C'est ainsi que vous passez de à , dans la mesure où l'opération linéaire puis la convolution ont tout
multiplié. Donc, la convolution applique vraiment une opération linéaire et vous avez les biais et l'opération
de valeur appliquée. Et vous êtes passé d'un 6 par 6 par 3, dimension de , à travers une couche de
réseau neuronal à un 4 par 4 par 2 dimensions de . Et donc 6 sur 6 sur 3 est passé à 4 sur 4 sur 2, et c'est
donc une couche de réseau convolutif.

Maintenant, dans cet exemple, nous avons deux filtres, donc nous avions deux caractéristiques de vous,
c'est pourquoi nous avons terminé avec notre sortie 4 par 4 par 2. Mais si, par exemple, nous avions à la
place 10 filtres au lieu de 2, alors nous aurions enroulé avec le volume de sortie dimensionnel 4 par 4 par
10. Parce que nous allons prendre 10 de ces filters, pas seulement deux, et les empiler pour former un
volume de sortie 4 par 4 par 10, et c'est ce que serait .


Exercice 4.7.3 - 1 Supposons que vous ayez 10 filtres, pas seulement deux filtres, qui sont 3 par 3 par 3
et 1 couche d'un réseau de neurones, combien de paramètres cette couche a-t-elle?

270

260

✔ 280

300

Explication:

Chaque filtre est un volume de 3 x 3 x 3, donc 3 x 3 x 3, donc chaque filtre a 27 paramètres

Avec le biais vous donne 28 paramètres.


10 filtres, donc 29*10 = 280 paramètres
Remarquez qu'une chose intéressante à ce sujet est que, quelle que soit la taille de l'image d'entrée,
l'image d'entrée peut être de 1000 sur 1000 ou 5000 sur 5000, mais le nombre de paramètres que vous

avez reste fixe à 280.

Donc, c'est vraiment une propriété du réseau de neurones à convolution qui rend moins enclin au
overfitting que si vous le pouviez. Donc, une fois que vous avez appris 10 détecteurs de caractéristiques qui
fonctionnent, vous pouvez l'appliquer même à très grades images. Et le nombre de paramètres est toujours
fixe et relativement petit, comme 280 dans cet exemple.

2.7.4 Résumé avec la notation

Supposons que la couche est une couche de convolution

la taille de filtre

le montant du padding

le stride(les foulées)

le nombre des filtres

Input initiale: où est le nombre des canaux d'image initiale

Input vient de la couche précédente :

Output de la couche :

est aussi le nombre des filtres

Dimension de chaque filtre

Dimension d'activation:

W - Weights:

Biais:

2.8 Exemple de CNN simple

Supposons que vous ayez une image et que vous souhaitiez effectuer une classification d'image ou une
reconnaissance d'image. Où vous voulez prendre comme entrée une image, x, et décider est-ce un chat ou
non, 0 ou 1. Pour cet exemple, je vais utiliser une image assez petite. Disons que cette image mesure 39 x 39
x 3. Disons que la première couche utilise un ensemble de 3 par 3 filtres ( ) pour détecter les
caractéristiques
Et disons que nous utilisons une foulée de 1, et aucun remplissage. Donc, en utilisant une valide
convolution, et disons que vous avez 10 filtres. Ensuite, les activations dans cette couche suivante du réseau
neutre seront de 37 x 37 x 10 (10 filtres).

Disons que vous avez maintenant une autre couche convolutive et disons que cette fois, vous utilisez des
filtres 5 sur 5. Donc, dans notre notation au prochain réseau de neurones = 5, et disons utiliser une
foulée de 2 cette fois. Et peut-être que vous n'avez pas de remplissage et dites 20 filtres.
Disons donc que vous utilisez un filtre 5 sur 5 encore et encore une foulée de 2, pas de remplissage , 40
filtres

mage et calculé vos caractéristiques 7 x 7 x 40 pour cette image. Et puis enfin, ce qui est couramment fait,
c'est si vous prenez ce 7 x 7 x 40, 7 fois 7 fois 40, c'est en fait 1 960. Et donc, ce que nous pouvons faire, c'est
prendre ce volume et l'aplatir ou le dérouler en seulement 1 960 unités. Il suffit de l'aplatir en un vecteur,
puis de le transmettre à une unité de régression logistique ou à une unité softmax. Selon que vous essayez
de reconnaître ou que vous essayez de reconnaître l'un des différents objets clés, puis que cela donne
simplement la sortie finale prévue pour le réseau de neurones.

Et il s'avère que dans un ConvNet typique, il existe généralement trois types de couches. L'un est la couche
convolutive, et souvent nous la désignerons comme couche Conv. Et c'est ce que nous utilisions dans le
réseau précédent. Il s'avère qu'il existe deux autres types courants de couches que vous n'avez pas encore
vus, mais nous en parlerons dans les prochaines sections. L'une s'appelle une couche de pooling, souvent
j'appellerai cette piscine. Et puis le dernier est une couche entièrement connectée appelée FC. Et bien qu'il
soit possible de concevoir un assez bon réseau de neurones en utilisant uniquement des couches
convolutives, la plupart des architectures de réseau de neurones auront également quelques couches de
mise en commun et quelques couches entièrement connectées.

CONV

POOL
FC

2.9 Couche de Pooling

2.9.1 Max Pooling

Les ConvNets(CNNs) utilisent souvent également des couches de regroupement(Pooling) pour réduire la
taille de la représentation, pour accélérer le calcul, ainsi que pour rendre certaines des caractéristiques qui
détectent un peu plus robustes. Passons en revue un exemple de mise en commun, puis nous expliquerons
pourquoi vous voudrez peut-être faire cela.
Supposons que vous ayez une entrée et que vous souhaitiez appliquer un type de pooling appelé
pooling max. Et la sortie de cette implémentation particulière de la mise en commun maximale sera une
sortie deux par deux.

Prenez votre entrée quatre par quatre et divisez-la en différentes régions et je vais colorier les quatre
régions comme suit. Et puis, dans la sortie, qui est deux par deux, chacune des sorties sera juste le
maximum de la région remodelée correspondante. Pour calculer chacun des nombres sur la droite, nous
avons pris le maximum sur deux par deux régions. Donc, c'est comme si vous appliquez une taille de filtre
de deux parce que vous prenez une région deux par deux et que vous faites un pas de deux. ( )

Donc, ce que fait le max, c'est vraiment de dire, si ces caractéristiques sont détectées n'importe où dans ce
filtre, alors gardez un nombre élevé. Mais si cette fonctionnalité n'est pas détectée, alors peut-être que cette
fonctionnalité n'existe pas dans le quadrant supérieur droit.

Une propriété intéressante du pooling max est qu'il a un ensemble d'hyperparamètres mais il n'a pas de
paramètres à apprendre.

Passons en revue un exemple avec différents hyperparamètres. Vous avez une entrée de cinq par cinq et
nous allons appliquer une max Pooling avec une taille de filtre de trois par trois. Donc et utilisons
une foulée de un . Donc, dans ce cas, la taille de sortie sera de trois par trois. La formule précédente
fonctionne également pour déterminer la taille de sortie de la pooling maximale.
Maintenant, jusqu'à présent, j'ai montré la pooling maximale sur une entrée 2D. Si vous avez une entrée 3D,
les sorties auront la même dimension. Ainsi, par exemple, si vous avez cinq par cinq par deux, la sortie sera
de trois par trois par deux et la façon dont vous calculez la mise en pool maximale est que vous effectuez le
calcul que nous venons de décrire sur chacun des canaux indépendamment.

2.9.2 Average Pooling

Donc, c'est la pooling maximale. Celui-ci est le type de mise en commun qui n'est pas utilisé très souvent,
mais je mentionnerai brièvement qui est une pooling moyenne. Donc, il fait à peu près ce à quoi vous vous
attendez, c'est-à-dire qu'au lieu de prendre le maximum dans chaque filtre, vous prenez la moyenne.

2.10 Exemple CNN

Vous connaissez maintenant à peu près tous les éléments constitutifs de la construction d'un réseau
neuronal convolutif complet. Regardons un exemple. Disons que vous entrez une image de 32 x 32 x 3, donc
c'est une image RGB et peut-être que vous essayez de faire une reconnaissance de chiffres manuscrits.
Vous avez donc un nombre comme 7 dans un initié RVB 32 x 32 essayant de reconnaître lequel des 10
chiffres de zéro à neuf est celui-ci. Jetons le réseau de neurones pour ce faire. Ce réseau est inspiré par un
réseau de neurones classiques appelé LeNet-5 qui est créé par Yann LeCun.

Donc, avec une entrée 32 x 32 x 3, disons que la première couche utilise un filtre 5 x 5 et une foulée de 1, et
aucun padding (remplissage). Donc, la sortie de cette couche, si vous utilisez 6 filtres, serait de 28 x 28 x 6,
et nous allons appeler cette couche conv 1. Donc, vous appliquez 6 filtres, ajoutez un biais, appliquez la
non-linéarité, peut-être une non-linéarité ReLU, et c'est la sortie conv 1.

Ensuite, appliquons une couche de Max pooling, donc je vais appliquer le pooling de masse ici et utilisons
un f = 2, s = 2. et un padding égal à 0. Cela devrait donc réduire la hauteur et la largeur de la représentation
d'un facteur 2. Donc 28 x 28 devient maintenant 14 x 14, et le nombre de canaux reste le même donc 14 x 14
x 6, et nous allons appeler il s'agit de la sortie du pool 1.

Ensuite, étant donné un volume de 14 x 14 x 6, appliquons-lui une autre couche convolutive, utilisons une
taille de filtre de 5 x 5, et utilisons une foulée de 1, et utilisons 16 filtres cette fois padding toujours à 0. Alors
maintenant, vous vous retrouvez avec, un volume 10 x 10 x 16, donc j'appellerai ce Conv 2. Puis dans ce
réseau, faisons à nouveau max pulling avec , . Vous pouvez donc probablement deviner la sortie
de ceci, , , cela devrait réduire la hauteur et la largeur d'un facteur 2, il vous reste donc 5 x 5 x
16. Et donc je vais appeler ce pool 2, et dans notre convention c'est la couche 2 du réseau neuronal(Couche
Conv + Couche Pooling).

Maintenant 5 x 5 x 16 est égal à 400. Alors, engraissons maintenant notre Pool 2 en un vecteur dimensionnel
de 400 x 1.

Et ce que nous allons faire est ensuite de prendre ces 400 unités et de construire la couche suivante, comme
ayant 120 unités. C'est donc en fait notre première couche entièrement connectée. Je vais appeler ce FC3
parce que nous avons 400 unités densément connectées à 120 unités.

Donc, cette unité entièrement connectée, cette couche entièrement connectée est exactement comme la
couche de réseau neuronal unique que vous avez vue dans les chapitres précédents. Il s'agit simplement
d'un réseau neuronal standard où vous avez une matrice de poids appelée W3 de dimension 120 x 400. Et
ceci est entièrement connecté car chacune des 400 unités ici est connectée à chacune des 120 unités ici, et
vous avez également le paramètre de polarisation, oui, cela ne sera que 120 dimensions, car il y a 120
sorties.
Et enfin, prenons 120 unités et ajoutons une autre couche, cette fois plus petite, mais disons que nous
avions 84 unités ici, je vais appeler cette couche 4 entièrement connectée(FC4). Et enfin, nous avons
maintenant 84 nombres réels que vous pouvez adapter à une unité SoftMax. Alors ce serait un softmax avec
10 sorties. C'est un exemple typique de ce à quoi un réseau neuronal convolutif pourrait ressembler.

Ainsi, au fur et à mesure que vous approfondissez, la hauteur et la largeur diminuent, tandis que le nombre
de canaux augmente. Il est passé de 3 à 6 à 16, puis votre couche entièrement connectée est à la fin. Et un
autre modèle assez courant que vous voyez dans les réseaux de neurones est d'avoir des couches de Conv,
peut-être une ou plusieurs couches de Conv suivies d'une couche de Pooling, puis une ou plusieurs couches
de Conv suivies d'une couche de Pooling. Et puis à la fin, vous avez quelques couches entièrement
connectées, suivies peut-être d'un softmax.

Passons donc simplement en revue pour ce réseau de neurones quelques détails supplémentaires sur la
forme d'activation:

Activation Forme Activation Taille #Parameters

Input: (32, 32, 3) 3072 0

CON1(f=5, s=1) (28, 28, 6) 4704 156

POOL1 (14, 14, 6) 1176 0

CON2(f=5, s=1) (10, 10, 16) 1600 2416

POOL2 (5, 5, 16) 400 0

FC3 (120, 1) 120 48120

FC4 (84, 1) 84 10164

Softmax (10, 1) 10 850


Donc, juste pour souligner quelques choses. Tout d'abord, notez que les couches de pooling max n'ont
aucun paramètre. Deuxièmement, notez que les couches de convection ont tendance à avoir relativement
peu de paramètres, comme nous en avons discuté dans les sections précédentes. Et en fait, de nombreux
paramètres ont tendance à se trouver dans les couches entièrement collectées du réseau neuronal. Et puis
vous remarquez aussi que la taille d'activation a peut-être tendance à diminuer progressivement au fur et à
mesure que vous approfondissez le réseau neuronal.

Vous constatez que beaucoup d’auront des propriétés auront des motifs similaires à ceux-ci. Vous avez donc
maintenant vu les éléments de base des réseaux de neurones, vos réseaux de neurones convolutifs, la
couche convolutive, la couche de regroupement(Pooling) et la couche entièrement connectée. De
nombreuses recherches de la division informatique ont été menées pour déterminer comment assembler
ces éléments de base pour créer des réseaux de neurones efficaces. Et mettre ces choses ensemble
nécessite en fait un peu de perspicacité. Je pense que l'un des meilleurs moyens pour vous d'acquérir de
l'intuition est de savoir comment mettre ces choses ensemble est de voir un certain nombre d'exemples
concrets de la façon dont d'autres l'ont fait.

Vous aimerez peut-être aussi