Otra idea sobre la reducción de dimensionalidad en el contexto de los filtros 1x1:
Tomemos como ejemplo una capa fc7 de 4096x8x8 de una FCN. ¿Qué sucede si la siguiente capa (llamémosla fc8) es de 2048x8x8 con un tamaño de filtro de 1? fc7 está muy adentro de la red, cada una de sus 4096 características es semánticamente rica, pero cada neurona (por ejemplo, la imagen de entrada es de 250x250x3) tiene un campo receptivo grande. En otras palabras, si una neurona está muy activa, sabemos que en algún lugar de su campo semántico hay una característica correspondiente presente.
Tomemos como ejemplo una neurona en la esquina superior izquierda de fc8 con un filtro de 1x1. Se conecta a las 4096 neuronas/características solo en el mismo campo receptivo (esquina superior izquierda de la imagen), cada una de las cuales está activada por una sola característica. Algunas de ellas (digamos 500) son muy activas. 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 hacer esto 2048 veces para las neuronas en la esquina superior izquierda de fc8, bastante algunas de ellas (por ejemplo, 250) estarán muy activas, lo que significa que 'recogieron' características del mismo campo receptivo a través de fc7, y es muy probable que más de una.
Si sigues 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 de 8x8 permanecen iguales, no cambiamos la 'vista' de cada neurona, por lo tanto, no disminuimos la rugosidad espacial.
Puedes consultar 'Fully Convolutional Networks' de Long, Shelhamer y Darrel.
0 votos
También vea una pregunta relacionada.
1 votos
Aquí hay una publicación de blog sobre estos módulos que detalló sobre las convoluciones 1x1: hackathonprojects.wordpress.com/2016/09/25/…
2 votos
Para decirlo de forma sencilla, la idea principal es reducir el número de canales en el volumen 3D, acelerando así el cálculo.
0 votos
1x1 conv crea dependencias por canal con un costo insignificante. Esto es especialmente aprovechado en convoluciones separables por profundidad. Nadie dijo nada al respecto, pero estoy escribiendo esto como un comentario ya que no tengo suficiente reputación aquí.
0 votos
Esencialmente se trata de promediar (o reducir) los datos de entrada (digamos C∗H∗W) a lo largo de sus canales (es decir, C). La convolución con un filtro 1x1 genera un resultado promedio en forma H∗W. El filtro 1x1 es en realidad un vector de longitud C. Cuando tienes F filtros 1x1, obtienes F promedios. Eso significa que la forma de tus datos de salida es F∗H∗W. Ahora tu entrada C∗H∗W se convierte en salida $F*H*W.
0 votos
Sé que hay algunas respuestas aquí, pero pensé que compartiría una gran visualización de un núcleo convolucional de 1 x 1 que encontré aquí: youtube.com/watch?v=Q1JCrG1bJ-A 