Estaba examinando algo de literatura relacionada con las redes totalmente convolucionales y encontré la siguiente frase ,
Una red completamente convolucional se logra reemplazando las capas completamente conectadas ricas en parámetros en arquitecturas CNN estándar por capas convolucionales con $ 1 \ times 1 $ kernels.
Tengo dos preguntas.
-
¿Qué se entiende por rico en parámetros ? ¿Se le llama rico en parámetros porque las capas totalmente conectadas transmiten parámetros sin ningún tipo de reducción «espacial»?
-
Además, ¿cómo funcionan los núcleos $ 1 \ times 1 $ ? ¿No «t $ 1 \ times 1 $ kernel simplemente significa que uno está deslizando un solo píxel sobre la imagen? Estoy confundido acerca de esto.
Respuesta
Redes de convolución total
A red de convolución completa (FCN) es una red neuronal que solo realiza operaciones de convolución (y submuestreo o aumento de muestreo). De manera equivalente, una FCN es una CNN sin capas completamente conectadas.
Redes neuronales de convolución
La típica red neuronal de convolución (CNN) no es completamente convolucional porque a menudo también contiene capas completamente conectadas (que no realizan la operación de convolución), que son ricas en parámetros , en el sentido de que tienen muchos parámetros (en comparación con su convolución equivalente capas), aunque las capas completamente conectadas también se pueden ver como convoluciones con ker nels que cubren todas las regiones de entrada , que es la idea principal detrás de la conversión de una CNN a una FCN. Vea este video de Andrew Ng que explica cómo convertir una capa completamente conectada en una capa convolucional.
Un ejemplo de FCN
Un ejemplo de una red totalmente convolucional es la U-net (llamado de esta manera debido a su forma de U, que puede ver en la ilustración siguiente), que es una red famosa que se usa para semántica segmentación , es decir, clasificar los píxeles de una imagen de modo que los píxeles que pertenecen a la misma clase (por ejemplo, una persona) estén asociados con la misma etiqueta (es decir, una persona), también conocida como píxeles ( o denso).
Segmentación semántica
Entonces, en la segmentación semántica, desea asociar una etiqueta con cada píxel (o pequeño parche de píxeles) de la imagen de entrada. Aquí hay una ilustración más sugerente de una red neuronal que realiza la segmentación semántica.
Segmentación de instancias
También hay segmentación de instancias , donde también desea diferenciar diferentes instancias de la misma clase (por ejemplo, desea distinguir dos personas en la misma imagen etiquetándolas de manera diferente). Un ejemplo de una red neuronal que se usa para la segmentación de ejemplo es mask R-CNN . La publicación de blog Segmentación: U-Net, Mask R-CNN y aplicaciones médicas (2020) de Rachel Draelos describe muy bien estos dos problemas y redes.
A continuación se muestra un ejemplo de una imagen en la que las instancias de la misma clase (es decir, una persona) se han etiquetado de forma diferente (naranja y azul).
Tanto la segmentación semántica como la de instancia son tareas de clasificación densas (específicamente, caen en la categoría de segmentación de imágenes ), es decir, desea clasificar cada píxel o muchos pequeños parches de píxeles de una imagen.
$ 1 \ times 1 $ convoluciones
En el diagrama U-net de arriba, puede ver que solo hay convoluciones, copiar y recortar, max- pooling y upsampling. No hay capas completamente conectadas.
Entonces, ¿cómo asociamos una etiqueta a cada píxel (o un pequeño parche de p ixels) de la entrada? ¿Cómo realizamos la clasificación de cada píxel (o parche) sin una capa final completamente conectada?
Ahí es donde el $ 1 \ times 1 $ ¡Las operaciones de convolución y muestreo superior son útiles!
En el caso del diagrama U-net anterior (específicamente, la parte superior derecha del diagrama, que se ilustra a continuación para mayor claridad), dos $ 1 \ times 1 \ times 64 $ Los núcleos se aplican al volumen de entrada (¡no a las imágenes!) para producir dos mapas de características de tamaño $ 388 \ times 388 $ . Usaron dos núcleos $ 1 \ times 1 $ porque había dos clases en sus experimentos (celda y no celda). La publicación de blog mencionada también te da la intuición detrás de esto, así que debes leerla.
Si ha intentado analizar el diagrama U-net con cuidado, notará que los mapas de salida tienen dimensiones espaciales (altura y peso) diferentes a las de las imágenes de entrada, que tienen dimensiones $ 572 \ times 572 \ times 1 $ .
Eso es bien porque nuestro objetivo general es realizar una clasificación densa (es decir, clasificar parches de la imagen, donde los parches pueden contener solo un píxel ), aunque dije que habríamos realizado una clasificación por píxeles, por lo que quizás esperaba que las salidas tuvieran las mismas dimensiones espaciales exactas de las entradas. Sin embargo, tenga en cuenta que, en la práctica, también podría tener los mapas de salida la misma dimensión espacial que las entradas: simplemente ed para realizar una operación de muestreo superior (deconvolución) diferente.
¿Cómo funcionan las convoluciones de $ 1 \ times 1 $ ?
A $ 1 \ times 1 $ convolución es solo la convolución 2d típica pero con un $ 1 \ times1 $ kernel.
Como probablemente ya sepa (y si no lo sabía, ahora lo sabe), si tiene un $ g \ times g $ kernel que se aplica a una entrada de tamaño $ h \ times w \ times d $ , donde $ d $ es la profundidad del volumen de entrada (que, por ejemplo, en el caso de imágenes en escala de grises, es $ 1 $ ), el kernel en realidad tiene la forma $ g \ times g \ times d $ , es decir, la tercera dimensión del kernel es igual a la tercera dimensión de la entrada a la que se aplica. Este es siempre el caso, a excepción de las convoluciones 3D, ¡pero ahora estamos hablando de las típicas convoluciones 2D! Consulte esta respuesta para obtener más información.
Por lo tanto, en el caso de que deseemos aplicar un $ 1 \ times 1 $ convolución a una entrada de forma $ 388 \ times 388 \ times 64 $ , donde $ 64 $ es la profundidad de la entrada, luego los $ 1 \ times 1 $ reales que necesitaremos usar tienen forma $ 1 \ times 1 \ times 64 $ (como dije anteriormente para U-net). La forma de reducir la profundidad de la entrada con $ 1 \ times 1 $ está determinada por la cantidad de $ 1 \ times 1 $ kernels que desea utilizar. Esto es exactamente lo mismo que para cualquier operación de convolución 2d con diferentes kernels (por ejemplo, $ 3 \ times 3 $ ).
En el caso de U-net, las dimensiones espaciales de la entrada se reducen de la misma manera que se reducen las dimensiones espaciales de cualquier entrada a una CNN (es decir, convolución 2d seguida de operaciones de reducción de muestreo). La principal diferencia (además de no usar capas completamente conectadas) entre U-net y otras CNN es que U-net realiza operaciones de muestreo superior, por lo que puede verse como un codificador (parte izquierda) seguido de un decodificador (parte derecha) .
Comentarios
- Gracias por su respuesta detallada, ¡realmente lo aprecio!