web-dev-qa-db-fra.com

Comment calculer le nombre de paramètres de réseaux de neurones convolutionnels?

Je ne peux pas donner le nombre correct de paramètres de AlexNet ou VGG Net .

Par exemple, pour calculer le nombre de paramètres d’une couche conv3-256 de VGG Net, la réponse est 0,59 M = (3 * 3) * (256 * 256), soit (taille du noyau) * (produit des deux nombres de canaux dans les couches jointes), mais de cette façon, je ne peux pas obtenir les paramètres 138M.

Alors, pourriez-vous s'il vous plaît me montrer où est mon problème de calcul ou me montrer la bonne procédure de calcul?

36
Eric

Si vous vous référez à VGG Net avec 16 couches (tableau 1, colonne D), alors 138M fait référence au nombre total de paramètres de ce réseau, c’est-à-dire toutes les couches convolutives, mais également celles qui sont entièrement connectées.

En regardant la 3ème étape de convolution composée de 3 couches conv3-256:

  • le premier a N = 128 plans d'entrée et F = 256 plans de sortie,
  • les deux autres ont N = 256 plans d’entrée et F = 256 plans de sortie.

Le noyau de convolution est 3x3 pour chacune de ces couches. En termes de paramètres cela donne:

  • 128x3x3x256 (poids) + 256 (biais) = 295,168 paramètres pour le premier,
  • 256x3x3x256 (poids) + 256 (biais) = 590,080 paramètres pour les deux autres.

Comme expliqué ci-dessus, vous devez le faire pour toutes les couches, mais également pour celles entièrement connectées, et additionner ces valeurs pour obtenir le nombre final de 138 millions.

-

UPDATE: la répartition entre les couches donne:

conv3-64  x 2       : 38,720
conv3-128 x 2       : 221,440
conv3-256 x 3       : 1,475,328
conv3-512 x 3       : 5,899,776
conv3-512 x 3       : 7,079,424
fc1                 : 102,764,544
fc2                 : 16,781,312
fc3                 : 4,097,000
TOTAL               : 138,357,544

En particulier pour les couches entièrement connectées (fc):

 fc1 (x): (512x7x7)x4,096 (weights) + 4,096 (biases)
 fc2    : 4,096x4,096     (weights) + 4,096 (biases)
 fc3    : 4,096x1,000     (weights) + 1,000 (biases)

(x) voir la section 3.2 de l'article: les couches entièrement connectées sont d'abord converties en couches convolutionnelles (la première couche FC en une couche 7 × 7 conv., les deux dernières couches FC en 1 × 1 couches conv.) .

Détails concernant fc1

Comme indiqué plus haut, la résolution spatiale juste avant d’alimenter les couches entièrement connectées est de 7x7 pixels. En effet, ce réseau VGG utilise le remplissage spatial spatial avant les convolutions, comme indiqué à la section 2.1 du document:

[...] le remplissage spatial de conv. l’entrée de la couche est telle que la résolution spatiale est conservée après la convolution, c’est-à-dire que le remplissage est de 1 pixel pour 3 × 3 conv. couches.

Avec un tel rembourrage et en travaillant avec une image d'entrée de 224x224 pixels, la résolution décroît comme suit le long des calques: 112x112, 56x56, 28x28, 14x14 et 7x7 après la dernière étape de convolution/mise en pool comportant 512 cartes de caractéristiques.

Cela donne un vecteur de fonctionnalité passé à fc1 avec la dimension: 512x7x7.

55
deltheil

Le calcul détaillé pour le réseau VGG-16 est également présenté dans CS231n notes de lecture.

INPUT:     [224x224x3]    memory:  224*224*3=150K   weights: 0
CONV3-64:  [224x224x64]   memory:  224*224*64=3.2M  weights: (3*3*3)*64 = 1,728
CONV3-64:  [224x224x64]   memory:  224*224*64=3.2M  weights: (3*3*64)*64 = 36,864
POOL2:     [112x112x64]   memory:  112*112*64=800K  weights: 0
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M weights: (3*3*64)*128 = 73,728
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M weights: (3*3*128)*128 = 147,456
POOL2:     [56x56x128]    memory:  56*56*128=400K   weights: 0
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*128)*256 = 294,912
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
POOL2:     [28x28x256]    memory:  28*28*256=200K   weights: 0
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*256)*512 = 1,179,648
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
POOL2:     [14x14x512]    memory:  14*14*512=100K   weights: 0
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
POOL2:     [7x7x512]      memory:  7*7*512=25K      weights: 0
FC:        [1x1x4096]     memory:  4096             weights: 7*7*512*4096 = 102,760,448
FC:        [1x1x4096]     memory:  4096             weights: 4096*4096 = 16,777,216
FC:        [1x1x1000]     memory:  1000             weights: 4096*1000 = 4,096,000

TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
TOTAL params: 138M parameters
40
Ray

Je sais que c’est un vieil article néanmoins, je pense que la réponse acceptée par @deltheil contient une erreur. Sinon, je serais heureux d'être corrigé. La couche de convolution ne devrait pas avoir de biais . 128x3x3x256 (poids) + 256 (biais) = 295,168 Devrait être 128x3x3x256 (poids) = 294,9112 

Merci

1
rav

Voici comment calculer le nombre de paramètres dans chaque couche cnn:
quelques définitions
n - largeur du filtre
m - hauteur du filtre
k - nombre de cartes de caractéristiques en entrée
L - nombre de cartes de caractéristiques en sortie
Puis nombre de paramètres # = (n * m * k + 1) * L dans lesquels la première contribution est de poids et la seconde est de biais. 

1
saunter

L’architecture de la VGG-16 ci-dessous se trouve dans le document original mis en évidence par @deltheil dans (tableau 1, colonne D) , et j'en cite

2.1 ARCHITECTURE

Pendant l’entraînement, nos ConvNets ont une entrée de 224 × 224 .__ de taille fixe. Images RVB. Le seul prétraitement que nous faisons consiste à soustraire le RVB moyen valeur, calculée sur l'ensemble d'apprentissage, à partir de chaque pixel.

L'image est passée à travers une pile de couches convolutionnelles (conv.), où nous utilisons des filtres avec un très petit champ récepteur: 3 × 3 (qui est la plus petite taille pour capturer la notion de gauche/droite, haut/bas, centre). La foulée de convolution est fixée à 1 pixel; le spatial rembourrage de conv. L'entrée de la couche est telle que la résolution spatiale est préservé après convolution, c’est-à-dire que le remplissage est de 1 pixel pour 3 × 3 conv. couches. Le pooling spatial est réalisé par cinq max-pooling couches, qui suivent certaines des conv. couches (toutes les couches conv . ne sont pas suivies d'un pool maximum). La mise en pool maximum est effectuée sur un 2 Fenêtre × 2 pixels, avec foulée 2.

Une pile de couches convolutives (dont la profondeur est différente dans Architectures différentes) est suivie de trois connexions entièrement connectées (FC) couches: les deux premiers ont 4096 canaux chacun, le troisième effectue Classification ILSVRC 1000 voies et contient donc 1000 canaux (un Pour chaque classe). 

La couche finale est la couche soft-max.

En utilisant ce qui précède, et 

  • Une formule pour trouver la forme d'activation d'un calque!

  • Une formule pour calculer les poids correspondant à chaque couche:

Remarque:

  • vous pouvez simplement multiplier la colonne de forme d'activation respective pour obtenir la taille d'activation

  • CONV3: signifie qu'un filtre de 3 * 3 convolve sur l'entrée!

  • MAXPOOL3-2: moyennes, 3ème couche de pooling, avec filtre 2 * 2, stride = 2, padding = 0 (joli standard dans les couches de pooling)

  • Stage-3: signifie que plusieurs couches de CONV sont empilées! avec le même remplissage = 1, stride = 1 et le filtre 3 * 3

  • Cin: signifie que la profondeur a.k.a canal provient de la couche d'entrée!

  • Cout: signifie la profondeur du canal a.k.a sortant (vous le configurez différemment pour apprendre des fonctionnalités plus complexes!),

Cin et Cout sont le nombre de filtres que vous empilez pour apprendre plusieurs caractéristiques à différentes échelles, comme dans le premier calque, des arêtes verticales et horizontales et des arêtes horizontales à 45 degrés, blah blah !, 64 filtres différents possibles. chacun de différents types de bords !! 

  • n: dimension d'entrée sans profondeur telle que n = 224 dans le cas d'une image INPUT!

  • p: remplissage pour chaque couche

  • s: foulée utilisée pour chaque couche

  • f: taille du filtre, à savoir 3 * 3 pour les couches CONV et 2 * 2 pour les couches MAXPOOL! 

  • Après MAXPOOL5-2, vous devez simplement aplatir le volume et l’interfacer avec la première couche FC.!

Nous obtenons la table: enter image description here

Enfin, si vous ajoutez tous les poids calculés dans la dernière colonne, vous vous retrouvez avec 138 357 544 (138 millions) de paramètres pour vous entraîner à VGG-15!

0
anu