¿Las convoluciones "aplanan las imágenes"?

8

Estoy buscando una buena explicación de cómo funcionan las convoluciones en el aprendizaje profundo cuando se aplican a imágenes multicanal. Por ejemplo, supongamos que tengo una imagen de 100 x 100 píxeles con tres canales, RGB. El tensor de entrada tendría entonces dimensiones de 100 x 100 x 3.

Si aplico una convolución con N filtros y una zancada de uno, la dimensión de salida será:

100 x 100 x 3 x N?

o

100 x 100 x N?

En otras palabras, ¿la convolución que se aplica "aplana" la imagen, o la convolución se aplica canal por canal?

David Ruiz
fuente

Respuestas:

7

En todas las implementaciones para imágenes de procesamiento de CNN que he visto, el resultado en cualquier capa es

Width x Height x Channels

o alguna permutación. Este es el mismo número de dimensiones que la entrada, las capas convolucionales no agregan dimensiones adicionales. Cada canal de mapa de características en la salida de una capa CNN es una matriz 2D "aplanada" creada al agregar los resultados de múltiples núcleos 2D (uno para cada canal en la capa de entrada).

Por lo general, se espera que incluso las imágenes de entrada en escala de grises se representen de Width x Height x 1manera que se ajusten al mismo patrón y se pueda usar el mismo modelo de capa.

Es completamente factible construir un diseño de capa que convierta una capa de entrada de canales 2D + estándar en una capa de canales 3D +. No es algo que haya visto hacer antes, pero nunca se puede descartar que pueda ser útil en un problema específico.

También puede ver convoluciones de canales 3D + en CNN aplicadas al video, pero en ese caso, la estructura será una variación de

Width x Height x Frames x Channels
Neil Slater
fuente
Muchas gracias. De hecho, encontré otra buena explicación que incluye la forma del núcleo de convolución aquí: enlace
David Ruiz
2

Depende de la cantidad de filtros que elija. Digamos que ha elegido 64 filtros.

su tensor de peso tendrá forma [3, 3, 3, 64] (3er 3 es el número de canales en la capa de entrada y 64 es el número de canales en la capa de salida) y forma de tensor de polarización [64]

la salida será si Pad = "SAME" y stride 1 para una imagen de entrada de 224 * 224 * 3 = 224 * 224 * 64

la salida será si Pad = "Valid" y stride 1 para una imagen de entrada de 224 * 224 * 3 = 221 * 221 * 64

Ahora con una entrada de 221 * 221 * 64 si desea crear 128 filtros en la siguiente capa, su forma de vector de peso será [3, 3, 64, 128] y la forma de vecotr sesgo será [128]

y forma de salida - si Pad = "MISMO" [221, 221, 128] - si Pad = "VÁLIDO" [198, 198, 128] considerando zancada = [1,1,1,1]

puede verificar estos resultados mientras construye el gráfico usando layername.get_shape ().

Prakash Vanapalli
fuente
1
Técnicamente, la respuesta a la pregunta del OP no depende de la cantidad de filtros. Entonces su primera oración podría hacer con cambio / aclaración. Sin embargo, los valores de ejemplo son útiles, especialmente para aclarar la forma de la matriz de pesos.
Neil Slater
1

La dimensión de salida de una convolución en el aprendizaje profundo depende de múltiples factores

  1. el tamaño del filtro (también conocido como kernel)
  2. el relleno (si agrega ceros o no alrededor de su imagen y cuántos)
  3. los números de filtro que usas
  4. el paso

La dependencia más simple es la del número de filtros N. Le da la cantidad de mapas de características que tiene su salida. Para la entrada que pueden ser los canales RGB, es decir, 3, para la salida, este número se puede elegir libremente.

El siguiente factor es el relleno cero. Si utiliza un tamaño de filtro de (3,3) y un relleno "válido", es decir, sin agregar ceros alrededor de la imagen, terminará con una salida de dimensión.

(100, 100, 3) -> (98, 98, N)

Porque usa un paso de 1. Si mueve el filtro a través de la imagen al final de la imagen en cada dirección, el filtro tocará el borde después de 98 pasos.

Sin embargo, si utiliza el relleno "SAME", compensa el tamaño del filtro, en el caso de un tamaño de filtro de (3,3) que correspondería a una línea de ceros alrededor de la imagen, terminará con:

(100, 100, 3) -> (100, 100, N)

Con una zancada de 2, por ejemplo, cambia la posición del filtro en dos píxeles. Por lo tanto, obtienes

(100, 100, 3) -> (50, 50, N)
Sören
fuente
1

Los tres canales RGB están convolucionados por diferentes núcleos y se agregan en cada mapa de características. Entonces, tendrá 100 x 100 x N como salida de la primera capa.

Jessé Andrade
fuente