211 votos

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

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 utiliza en el Módulo Inception de Google. Me cuesta entender qué es una convolución 1x1.

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

¿Podría alguien amablemente explicarme esto?

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.

2voto

udpsunil Puntos 598

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.

1 votos

Creo que esta es otra buena intuición del mecanismo, pero tendré que regresar a ella, ya que encuentro confusa la notación de las dimensiones, y especialmente "Después de hacer esto 2048 veces para las neuronas superiores izquierdas en fc8".

0 votos

No entendí muy bien lo que estás tratando de decir, ¿podrías hacerlo más claro, por favor?

0 votos

Es una buena explicación... excepto por las dimensiones que están reorganizadas. Aquí tenemos muchas filtros de 1*1 - 2048 de ellos para ser precisos. Cada 1*1 es como una neurona única completamente conectada. Se conecta a los 4096 valores en fc7 y después del ponderación, suma y activación termina con 1 valor. Tal vez esta neurona se enciende cuando se observa un cierto patrón en los 4096 valores (que a su vez se encienden cuando se observa un cierto patrón en la esquina superior izquierda de la imagen). Pero por supuesto esto no es suficiente. No podemos reducir 4096 características a solo 1. Así que repetimos este proceso... en este ejemplo lo hacemos 2048 veces.

0voto

user203465 Puntos 1

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

En una imagen 2-dimensional (nivel de gris), se realiza una convolución mediante una operación de ventana deslizante, donde la ventana (el núcleo de convolución 2-d) es una matriz de v×v.

Las aplicaciones de procesamiento de imágenes de redes neuronales - incluyendo redes neuronales convolucionales - han sido revisadas en: [M. Egmont-Petersen, D. de Ridder, H. Handels. Procesamiento de imágenes con redes neuronales - una revisión, Reconocimiento de patrones, Vol. 35, No. 10, pp. 2279-2301, 2002].

0voto

Chad Huneycutt Puntos 1546

Convolución 3x3 vs 1x1

import torch
import torch.nn as nn

image = torch.randn(1, 3, 1280, 1920)

# Convolución 3x3 + padding, que mantiene las dimensiones espaciales constantes
model = nn.Conv2d(in_channels=3, out_channels=2, kernel_size=3, padding=1)
output = model(image)

print(output.shape)  # torch.Size([1, 2, 1280, 1920])

num_elements = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(num_elements)  # 56 == pesos + sesgo

# pesos = in_channels * out_channels * kernel_size * kernel_size
#    => 3 * 2 * 3 * 3 = 54
# sesgo = out_channels => 2

###

# Convolución 1x1
model = nn.Conv2d(in_channels=3, out_channels=2, kernel_size=1, padding=0)
output = model(image)

print(output.shape)  # torch.Size([1, 2, 1280, 1920])

num_elements = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(num_elements)  # 8 == pesos + sesgo

# pesos = in_channels * out_channels * kernel_size * kernel_size
#    => 3 * 2 * 1 * 1 = 6
# sesgo = out_channels => 2

# 8 << 56 :)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X