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?
Respuestas:
Supongamos que tengo una capa conv que genera un tensor en forma de donde:( N, F, H, 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> F F1< F
De hecho, en el artículo de Google Inception Going Deeper with Convolutions , afirman (en negrita es mío, no por autores originales):
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.
fuente
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.
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.
fuente
num_weights = in_depth x out_depth x kernel_size = 256x256x4x4
. En el primer casonum_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.pdfhttps://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:
fuente
¡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
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,
fuente
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.
fuente
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.
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].
fuente