¿Qué significa convolución 1x1 en una red neuronal?

106

Actualmente estoy haciendo el Tutorial de aprendizaje profundo de Udacity. En la Lección 3, hablan sobre una convolución 1x1. Esta convolución 1x1 se usa en el Módulo de inicio de Google. Tengo problemas para entender qué es una convolución 1x1.

También he visto esta publicación de Yann Lecun.

¿Alguien podría explicarme esto amablemente?

jkschin
fuente
Vea también una pregunta
gkcn
1
Aquí hay una publicación de blog sobre estos módulos que entró en detalles sobre las convoluciones 1x1: hackathonprojects.wordpress.com/2016/09/25/…
Tommy
1
En pocas palabras, la idea es reducir la cantidad de canales en el volumen 3D, acelerando así el cálculo.
onerhao

Respuestas:

113

Supongamos que tengo una capa conv que genera un tensor en forma de donde:(N,F,H,W)

  • es el tamaño del loteN
  • es el número de filtros convolucionalesF
  • son las dimensiones espacialesH,W

Supongamos que esta salida se alimenta a una capa conv con filtros 1x1, relleno cero y zancada 1. Entonces la salida de esta capa conv 1x1 tendrá forma ( N , F 1 , H , W ) .F1(N,F1,H,W)

Por lo tanto, los filtros conv 1x1 se pueden usar para cambiar la dimensionalidad en el espacio del filtro. Si entonces estamos aumentando la dimensionalidad, si F 1 < F estamos disminuyendo la dimensionalidad, en la dimensión del filtro.F1>FF1<F

De hecho, en el artículo de Google Inception Going Deeper with Convolutions , afirman (en negrita es mío, no por autores originales):

Un gran problema con los módulos anteriores, al menos en esta forma ingenua, es que incluso un número modesto de convoluciones de 5x5 puede ser prohibitivamente costoso encima de una capa convolucional con una gran cantidad de filtros.

Esto lleva a la segunda idea de la arquitectura propuesta: aplicar juiciosamente reducciones de dimensión y proyecciones donde los requisitos computacionales aumentarían demasiado de lo contrario. Esto se basa en el éxito de las incrustaciones: incluso las incrustaciones de baja dimensión pueden contener mucha información sobre un parche de imagen relativamente grande ... las convoluciones 1x1 se utilizan para calcular las reducciones antes de las costosas convoluciones 3x3 y 5x5. Además de ser utilizados como reducciones, también incluyen el uso de activación lineal rectificada que los hace de doble propósito.

Entonces, en la arquitectura Inception, utilizamos los filtros convolucionales 1x1 para reducir la dimensionalidad en la dimensión del filtro. Como expliqué anteriormente, estas capas conv de 1x1 se pueden usar en general para cambiar la dimensionalidad del espacio del filtro (aumentar o disminuir) y en la arquitectura Inception vemos cuán efectivos pueden ser estos filtros 1x1 para la reducción de la dimensionalidad, explícitamente en el espacio de dimensión del filtro , no el espacio de dimensión espacial.

Quizás haya otras interpretaciones de los filtros conv 1x1, pero prefiero esta explicación, especialmente en el contexto de la arquitectura Google Inception.

AI independiente
fuente
3
¿Es que la conversión 1x1 comprime la dimensión del filtro anterior a 1, antes de implementar la conversión 5x5?
Leonard Loo
1
@LeonardLoo cada núcleo 1x1 reduce la dimensión del filtro a 1, pero puede tener varios núcleos en una convolución 1x1, por lo que el número de "filtros" puede ser arbitrario de su elección.
Fazzolini
43

Una convolución 1x1 simplemente asigna un píxel de entrada con todos sus canales a un píxel de salida, sin mirar nada a su alrededor. A menudo se usa para reducir la cantidad de canales de profundidad, ya que a menudo es muy lento multiplicar volúmenes con profundidades extremadamente grandes.

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

El inferior es aproximadamente ~ 3.7x más lento.

Teóricamente, la red neuronal puede 'elegir' qué entrada 'colores' mirar usando esto, en lugar de que la fuerza bruta multiplique todo.

Debreuil gratis
fuente
19
Yo diría que 1x1 asigna no solo un píxel a un píxel de salida, sino que contrae todos los canales de píxeles de entrada a un píxel. En su ejemplo en la primera línea, hay 256 canales para entrada, y cada uno de los 64 núcleos 1x1 contrae los 256 canales de entrada en un solo "píxel" (número real). El resultado es que ahora tiene 64 canales en lugar de 256 con la misma dimensión espacial, lo que hace que la convolución 4x4 sea computacionalmente más barata que en su ejemplo de segunda línea.
Fazzolini
Buen punto, actualizará la publicación :)
Debreuil gratuito
3
¿De dónde sacaste 3,7 veces más lento?
CMCDragonkai
@CMCDragonkai Suponga que el costo de cálculo es proporcional al número de pesos. En el caso posterior, el num_weights = in_depth x out_depth x kernel_size = 256x256x4x4. En el primer caso num_weights = 256x64x1x1+64x265x4x4=256x64x17,. Take ratio y eso da 256/17 ~ 3.7. Consulte este documento, página 9, para ver cómo se relacionan los pesos numéricos con la profundidad de entrada y la profundidad de salida. arxiv.org/pdf/1603.07285.pdf
Nelson Dinh
11

any

https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work

En particular, el Tipo 2.2 es la descripción correcta de una convolución allí.

Otra respuesta útil:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

Esta respuesta explica cómo tiene un filtro separado para cada combinación de canal de entrada / salida . Después de calcular cada uno de estos, los resultados se suman sobre el eje del canal de entrada dejando el número de valores del canal de salida .

Aquí hay un video que encontré que me ayudó a entender cómo funciona una convolución 1x1.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

Estas son las principales cosas que obtuve:

  • mnf1(m,n,f1)f1mnf2(m,n,f2)
  • f2<f1f1f2
Simon Alford
fuente
(m,n,f1)
3

¡Intentaré explicar más intuitivamente y en resumen con ilustraciones!

Un 1 * 1 conv (también conocido como red en red )?

Digamos que su entrada es (n_H, n_W, n_c_prev). Puede pensar en (1 * 1 * n_c_prev) como una sola neurona (una red totalmente conectada, es decir, por qué N / w en N / w ) que está tomando (n_c_prev) números en la entrada multiplicándolos con (1 * 1 * n_c_prev ) y luego agregar y luego tomar ReLu y salida (n_H, n_W) y si tiene varios filtros (n_c), la salida sería (n_H, n_W, n_C).

Por lo tanto, puede usar la capa de agrupación para reducir las dimensiones espaciales (n_H, n_W) y puede usar 1 * 1 conv para reducir n_c_prev (es decir, el número de canales) que ahorra muchos cálculos. Por ejemplo

ingrese la descripción de la imagen aquí

Por lo tanto, una comida para llevar

  • Puede usar una capa convolucional 1x1 para reducir n_C pero no n_H, n_W.

  • Puede usar una capa de agrupación para reducir n_H, n_W y n_C.

En otras palabras, ingrese la descripción de la imagen aquí

  • ¿Qué estás haciendo usando el filtro CONV 1 * 1? básicamente toma "1 * 1 * num_input_channel_of_featureMap" ponderaciones de tamaño y convoluciona (elementwise * seguido de +) este volumen sobre image / featureMap de tamaño "W H num_input_channel_of_featureMap" y lo que obtienes es una salida de tamaño "W * H".

  • Ahora, puede usar el número "#filters" de ese tipo "1 * 1 * num_input_channel_of_featureMap" y obtener el volumen "W H #filter" como salida final.

  • Más, precisamente, está multiplicando "1 * 1" como 32 pesos diferentes (1 * 1 Volumen) con un segmento en la misma posición en el mapa de características de entrada seguido de ReLu y obtiene un único número correspondiente generado, visto como píxel de color verde !

  • 1 * 1 CONV ayuda a reducir la cantidad de canales y a ahorrar en cómputos en algunas redes (INCEPTIONS).!

  • Pero, por supuesto, si desea mantener el número de canales igual al del mapa de características de entrada, también está bien, lo único que hace 1 * 1 CONV es aplicarle la no linealidad ReLU que le permite aprender funciones complejas en NN .

anu
fuente
1

Una idea más sobre la reducción de dimensionalidad en el contexto de los filtros 1x1:

Tomemos, por ejemplo, una capa 4096x8x8 fc7 de FCN. ¿Qué sucede si la siguiente capa (llámela fc8) es 2048x8x8 con un tamaño de filtro 1? fc7 es muy profundo dentro de la red, cada una de sus características 4096 es semánticamente rica, pero cada neurona (por ejemplo, la imagen de entrada es 250x250x3) tiene un gran campo receptivo. En otras palabras, si una neurona es muy activa, sabemos que en algún lugar de su campo semántico hay presente una característica correspondiente.

Tomemos, por ejemplo, una neurona superior izquierda en fc8 con un filtro 1x1. Se conecta a todas las 4096 neuronas / características solo en el mismo campo receptivo (esquina superior izquierda de la imagen), cada una de las cuales es activada por una sola característica. Algunos (vamos al mismo 500) de ellos son muy activos. Si la neurona resultante también es muy activa, significa que probablemente aprendió a identificar 1 o más características en este campo receptivo. Después de haber hecho esto 2048 veces para las neuronas superiores izquierdas en fc8, bastantes de ellas (por ejemplo, 250) estarán muy activas, lo que significa que 'recolectaron' características del mismo campo receptivo a través de fc7, y muchas muy probablemente más que uno.

Si sigue reduciendo la dimensionalidad, un número decreciente de neuronas aprenderá un número creciente de características del mismo campo receptivo. Y dado que los parámetros espaciales 8x8 siguen siendo los mismos, no cambiamos la 'vista' de cada neurona, por lo tanto, no disminuimos la aspereza espacial.

Es posible que desee echar un vistazo a 'Redes totalmente convolucionales' de Long, Shelhamer y Darrel.

Alex
fuente
1
Yo creo que esta es otra buena intuición del mecanismo, pero voy a tener que volver a ella, porque encuentro la notación para las dimensiones confuso, y sobre todo "Después de haber hecho este 2048 veces de izquierda-superior neuronas en fc8 ".
WillC
No entendí muy bien lo que intentas decir, ¿podrías aclararlo?
Michael Heidelberg
0

La operación matemática de convolución significa calcular el producto de dos funciones (continua o discreta) sobre todas las posibles posiciones de desplazamiento.

v×v

Las aplicaciones de procesamiento de imágenes de redes neuronales, incluidas las redes neuronales convolucionales , se han revisado en: [M. Egmont-Petersen, D. de Ridder, H. Handels. Procesamiento de imágenes con redes neuronales: una revisión , Pattern Recognition , vol. 35, núm. 10, págs. 2279-2301, 2002].

Match Maker EE
fuente