tutorial redes neuronales neuronal imagenes explicacion convolucionales convolucional cnn clasificador machine-learning computer-vision neural-network

machine learning - imagenes - ¿Cómo calcular el número de parámetros de las redes neuronales convolucionales?



redes neuronales convolucionales python (3)

No puedo dar la cantidad correcta de parámetros de AlexNet o VGG Net .

Por ejemplo, para calcular el número de parámetros de una capa conv3-256 de VGG Net, la respuesta es 0.59M = (3 * 3) * (256 * 256), es decir (tamaño del núcleo) * (producto de ambos números de canales en las capas conjuntas), sin embargo, de esa manera, no puedo obtener los parámetros de 138M .

Entonces, ¿podría mostrarme dónde está mal mi cálculo o mostrarme el procedimiento de cálculo correcto?


Sé que esta es una publicación anterior, sin embargo, creo que la respuesta aceptada por @deltheil contiene un error. Si no, me gustaría que me corrijan. La capa de convolución no debe tener sesgo. es decir, 128x3x3x256 (pesos) + 256 (sesgos) = 295,168 debe ser 128x3x3x256 (pesos) = 294,9112

Gracias


Si se refiere a VGG Net con 16 capas (tabla 1, columna D), entonces 138M refiere a la cantidad total de parámetros de esta red, es decir, que incluye todas las capas convolucionales, pero también las totalmente conectadas.

Mirando la 3ra etapa convolucional compuesta por 3 capas de conv3-256 :

  • el primero tiene N = 128 planos de entrada y F = 256 planos de salida,
  • los otros dos tienen N = 256 planos de entrada y F = 256 planos de salida.

El kernel de convolución es 3x3 para cada una de estas capas. En términos de parámetros, esto da:

  • 128x3x3x256 (pesos) + 256 (sesgos) = 295,168 parámetros para el 1er,
  • 256x3x3x256 (pesos) + 256 (sesgos) = 590,080 parámetros para los otros dos.

Como se explicó anteriormente, tiene que hacer eso para todas las capas, pero también para las totalmente conectadas, y sumar estos valores para obtener el número final de 138M.

-

ACTUALIZACIÓN : el desglose entre capas da:

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 particular para las capas completamente conectadas (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) vea la sección 3.2 del artículo: las capas totalmente conectadas se convierten primero en capas convolucionales (la primera capa de FC a una capa de conv. 7 × 7, las dos últimas capas de FC a las capas de 1 × 1 conv.).

Detalles acerca de fc1

Como se especifica anteriormente, la resolución espacial justo antes de alimentar a las capas totalmente conectadas es de 7x7 píxeles. Esto se debe a que esta red VGG usa relleno espacial antes de las convoluciones, como se detalla en la sección 2.1 del documento:

[...] el relleno espacial de conv. la entrada de capa es tal que la resolución espacial se conserva después de la convolución, es decir, el relleno es de 1 píxel para 3 × 3 conv. capas.

Con dicho relleno, y trabajando con una imagen de entrada de 224x224 píxeles, la resolución disminuye a lo largo de las capas: 112x112, 56x56, 28x28, 14x14 y 7x7 después de la última etapa de convolución / agrupación que tiene 512 mapas de funciones.

Esto le da un vector de características pasado a fc1 con dimensión: 512x7x7.


También se proporciona un gran desglose del cálculo de la red VGG-16 en las notas de clase de CS231n .

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