web-dev-qa-db-fra.com

Qu'est-ce que la profondeur d'un réseau de neurones convolutionnels?

Je jetais un coup d'oeil au réseau de neurones convolutionnels de Réseaux de neurones de convolution CS231n pour la reconnaissance visuelle . Dans le réseau de neurones convolutifs, les neurones sont organisés en 3 dimensions (height, width, depth). J'ai des problèmes avec la depth de la CNN. Je ne peux pas visualiser ce que c'est. 

Dans le lien, ils ont dit The CONV layer's parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume

Par exemple, regardez cette image. Désolé si l'image est trop merdique.  crappy picture

Je peux saisir l’idée que nous prenons une petite zone de l’image, puis la comparons aux "Filtres". Les filtres seront donc une collection de petites images? Ils ont également dit We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron. Le champ de réception a-t-il la même dimension que les filtres? Aussi quelle sera la profondeur ici? Et que signifie-t-on en utilisant la profondeur d'un CNN?

Donc, ma question est principalement la suivante: si je prends une image de dimension [32*32*3] (disons que j'ai 50000 de ces images, ce qui rend l'ensemble de données [50000*32*32*3]), que dois-je choisir comme profondeur et que signifierait-il par profondeur? Aussi quelle sera la dimension des filtres?

En outre, il sera très utile que quiconque puisse fournir un lien qui donne une certaine intuition à ce sujet.

EDIT: Donc, dans une partie du didacticiel (partie exemple dans le monde réel), il est écrit The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96]. 

Nous voyons ici que la profondeur est de 96. La profondeur est-elle donc quelque chose que je choisis arbitrairement? ou quelque chose que je calcule? Dans l'exemple ci-dessus (Krizhevsky et al.), Ils avaient 96 profondeurs. Alors qu'est-ce que cela signifie par ses 96 profondeurs? Le didacticiel a également déclaré Every filter is small spatially (along width and height), but extends through the full depth of the input volume.

Cela signifie donc que la profondeur sera comme ça? Si oui, puis-je supposer que Depth = Number of Filters?  enter image description here

25
Shubhashis

Dans Deep Neural Networks, la profondeur fait référence à la profondeur du réseau, mais dans ce contexte, elle est utilisée pour la reconnaissance visuelle et correspond à la dimension 3rd d'une image.

Dans ce cas, vous avez une image et la taille de cette entrée est 32x32x3, qui est (width, height, depth). Le réseau de neurones devrait pouvoir apprendre en fonction de ces paramètres, car la profondeur se traduit par les différents canaux des images d'apprentissage.

UPDATE:

Chaque couche de votre réseau CNN apprend les régularités relatives aux images de formation. Dans les toutes premières couches, les régularités sont des courbes et des bords, puis lorsque vous approfondissez les couches, vous commencez à apprendre des niveaux de régularité plus élevés, tels que les couleurs, les formes, les objets, etc. Avant d’aller plus loin, essayez ceci: http://www.datarobot.com/blog/a-primer-on-deep-learning/

MISE À JOUR 2:

Regardez le premier chiffre du lien que vous avez fourni. 'Dans cet exemple, le calque d'entrée rouge contient l'image. Par conséquent, sa largeur et sa hauteur correspondent aux dimensions de l'image et sa profondeur est égale à 3 (canaux rouge, vert et bleu).' Cela signifie qu'un neurone ConvNet transforme l'image d'entrée en organisant ses neurones en trois dimensions. 

En réponse à votre question, profondeur correspond aux différents canaux de couleur d'une image.

De plus, à propos de la profondeur du filtre. Le tutoriel dit ceci.

Chaque filtre est petit (dans le sens de la largeur et de la hauteur), mais s'étend sur toute la profondeur du volume d'entrée.

Ce qui signifie fondamentalement que un filtre est une partie plus petite d’une image qui se déplace autour de la profondeur de l’image afin d’apprendre les régularités de l’image.

MISE À JOUR 3:

Pour l'exemple du monde réel, je viens de parcourir le papier d'origine et voici ce qu'il dit: Le premier calque de convolution filtre l'image d'entrée 224 × 224 × 3 avec 96 noyaux de taille 11 × 11 × 3 avec une foulée de 4 pixels.

Dans le didacticiel, la profondeur est désignée comme le canal, mais dans le monde réel, vous pouvez concevoir la dimension de votre choix. Après tout ce qui est votre conception

Le tutoriel a pour but de vous donner un aperçu du fonctionnement théorique de ConvNets, mais si je conçois un ConvNet, personne ne pourra m'empêcher de le proposer avec une profondeur différente.

Cela a-t-il un sens?

10
Semih Yagcioglu

La profondeur de la couche CONV est le nombre de filtres qu’elle utilise . La profondeur d’un filtre est égale à la profondeur de l’image qu’elle utilise en entrée.

Par exemple: Supposons que vous utilisiez une image de 227 * 227 * 3 . Supposons maintenant que vous utilisiez un filtre de taille 11 * 11 (taille spatiale) . Ce carré 11 * 11 sera glissé le long de image entière pour produire un seul tableau à 2 dimensions en réponse. Mais pour ce faire, il doit couvrir tous les aspects de la zone 11 * 11. Par conséquent, la profondeur du filtre sera la profondeur de l'image = 3 . Supposons maintenant que nous en avons 96, chacun produisant une réponse différente. Ce sera la profondeur de la couche convolutive. C'est simplement le nombre de filtres utilisés.

4
Adarsh Maurya

Depuis le volume d'entrée lorsque nous faisons un problème de classification d'image est N x N x 3. Au début, il n’est pas difficile d’imaginer ce que signifiera la profondeur - juste le nombre de canaux - Red, Green, Blue. Ok, la signification de la première couche est claire. Mais qu'en est-il des suivants? Voici comment j'essaie de visualiser l'idée.

  1. Sur chaque couche, nous appliquons un ensemble de filtres qui s’articulent autour de l’entrée. Imaginons qu'actuellement nous en sommes à la première couche et que nous convolions autour d'un volume V de taille N x N x 3. Comme @Semih Yagcioglu l’a mentionné au tout début, nous recherchons des caractéristiques rugueuses: courbes, bords, etc. courbe ou Edge en convolution autour de V. Bien sûr, le filtre a la même profondeur, nous voulons fournir toute l’information, pas seulement la représentation en niveaux de gris. 

  2. Maintenant, si M filtres rechercheront M différentes courbes ou arêtes. Et chacun de ces filtres produira une carte de caractéristiques composée de scalaires (la signification du scalaire est le filtre qui dit: La probabilité d'avoir cette courbe ici est de X%). Lorsque nous convolrons avec le même filtre autour du volume, nous obtenons cette carte de scalaires nous indiquant où exactement nous avons vu la courbe.

  3. Vient ensuite l’empilement de cartes de caractéristiques. Imaginez empiler comme la chose suivante. Nous avons des informations sur l'endroit où chaque filtre a détecté une courbe donnée. Bien, quand nous les empilons, nous obtenons des informations sur les courbes/arêtes disponibles pour chaque petite partie de notre volume d'entrée. Et ceci est la sortie de notre première couche convolutionnelle. 

  4. Il est facile de saisir l’idée de la non-linéarité en tenant compte de 3. Lorsque nous appliquons la fonction ReLU sur une carte de fonctions, nous disons: Supprimez toutes les probabilités négatives pour les courbes ou les arêtes à cet endroit. Et cela a du sens.

  5. Ensuite, l'entrée pour la couche suivante sera un volume $ V_1 $ portant des informations sur différentes courbes et arêtes à différents emplacements spatiaux (N'oubliez pas: chaque couche contient des informations sur une courbe ou un bord). 

  6. Cela signifie que la couche suivante pourra extraire des informations sur des formes plus sophistiquées en combinant ces courbes et ces arêtes. Pour les combiner, encore une fois, les filtres doivent avoir la même profondeur que le volume d'entrée.
  7. De temps en temps, nous appliquons le Pooling. La signification est exactement de réduire le volume. Depuis que nous utilisons strides = 1, nous regardons trop souvent un pixel (neurone) pour la même caractéristique. 

J'espère que cela a du sens. Regardez les graphiques étonnants fournis par le célèbre cours CS231 pour vérifier comment exactement la probabilité de chaque entité à un certain endroit est calculée. 

4
StefanL19

La première chose à noter est 

receptive field of a neuron is 3D 

par exemple, si le champ de réception est 5x5, le neurone sera connecté à un nombre de points de 5x5x (profondeur d'entrée). Donc quelle que soit votre profondeur d’entrée, une couche de neurones ne développera qu’une couche de sortie.

 Each neuron is connected to whole depth in receptive field

Maintenant, la prochaine chose à noter est

depth of output layer = depth of conv. layer

en d'autres termes, le volume de sortie est indépendant du volume d'entrée et dépend uniquement du nombre de filtres (profondeur). Cela devrait être assez évident du point précédent.

Notez que le nombre de filtres (profondeur de la couche cnn) est un paramètre hyper. Vous pouvez le prendre comme vous le souhaitez, indépendamment de la profondeur de l'image. Chaque filtre possède son propre ensemble de pondérations lui permettant d'apprendre une caractéristique différente sur la même région locale couverte par le filtre.

2
nithin

La profondeur du réseau est le nombre de couches dans le réseau. Dans le Krizhevsky papier, la profondeur est de 9 couches (modulo un problème de clôture pour le comptage des couches?)  Architecutre of the Krizhevsky et al CNN

1
user3450049

En termes simples, il peut expliquer ce qui suit, 

Supposons que vous avez 10 filtres chaque filtre a la taille de 5x5x3 . Qu'est-ce que ça veut dire? la profondeur de cette couche est 10 qui est égale au nombre de filtres. La taille de chaque filtre peut être définie comme nous le voulons, par exemple 5x5x3 dans ce cas où 3 est la profondeur de la couche précédente. Pour être précis, la profondeur de chaque fichier dans la couche suivante doit être de 10 (nxnx10), où n peut être défini comme vous le souhaitez, par exemple 5 ou autre. L'espoir rendra tout clair. 

0
GPrathap