Capas convolucionales: ¿rellenar o no rellenar?

19

La arquitectura AlexNet utiliza rellenos cero como se muestra en la imagen: ingrese la descripción de la imagen aquí Sin embargo, no hay explicación en el documento por qué se introduce este relleno.

El curso Standford CS 231n enseña que usamos relleno para preservar el tamaño espacial: ingrese la descripción de la imagen aquí

Me pregunto si es la única razón por la que necesitamos relleno. Quiero decir, si no necesito preservar el tamaño espacial, ¿puedo eliminar los rellenos? Sé que dará como resultado una disminución muy rápida del tamaño espacial a medida que avanzamos a niveles más profundos. Sin embargo, puedo compensar eso eliminando las capas de agrupación. Sería muy feliz si alguien pudiera darme alguna razón detrás del relleno cero. ¡Gracias!

Jumabek Alihanov
fuente

Respuestas:

20

Hay un par de razones por las que el relleno es importante:

  1. Es más fácil diseñar redes si conservamos el heighty widthy no tenemos que preocuparnos demasiado por las dimensiones del tensor al pasar de una capa a otra porque las dimensiones simplemente "funcionarán" .

  2. Nos permite diseñar redes más profundas . Sin relleno, la reducción en el tamaño del volumen se reduciría demasiado rápido.

  3. El relleno realmente mejora el rendimiento al mantener la información en los bordes .

Cita de las conferencias de Stanford: "Además del beneficio antes mencionado de mantener constantes los tamaños espaciales después de CONV, esto realmente mejora el rendimiento. Si las capas de CONV no rellenaran con cero las entradas y solo realizaran convoluciones válidas, entonces el tamaño del los volúmenes se reducirían en una pequeña cantidad después de cada CONV, y la información en las fronteras sería "eliminada" demasiado rápido ". - fuente

  1. Como ya dijo @dontloo, las nuevas arquitecturas de red deben concatenar capas convolucionales con filtros 1x1, 3x3 y 5x5 y no sería posible si no usaran relleno porque las dimensiones no coincidirían. Consulte esta imagen del módulo de inicio para comprender mejor por qué el relleno es útil aquí.

ingrese la descripción de la imagen aquí

Arrastrar0
fuente
44
¿Por qué el relleno cero es tan omnipresente? En el procesamiento de imágenes, se utilizan muchos modos de borde diferentes, como varios tipos de reflejo o continuar con el valor en el borde. Los ceros puros tienen una estructura muy diferente en comparación con las imágenes / características reales.
isarandi
3

Me parece que la razón más importante es preservar el tamaño espacial. Como dijiste, podemos compensar la disminución del tamaño espacial eliminando las capas de agrupación. Sin embargo, muchas estructuras de red recientes (como redes residuales , redes de Inception , redes fractal ) operan en las salidas de las diferentes capas, lo que requiere un tamaño espacial constante entre ellos.

Otra cosa es que, si no hay relleno, los píxeles en la esquina de la entrada solo afectan a los píxeles en la esquina correspondiente de la salida, mientras que los píxeles en el centro contribuyen a una vecindad en la salida. Cuando varias capas sin relleno se apilan juntas, la red ignora los píxeles del borde de la imagen.

Solo algunos de mis entendimientos, creo que hay otras buenas razones.

dontloo
fuente
2

Gran pregunta Drag0 explicó bien pero estoy de acuerdo, algo está mal.

Es como mirar una fotografía y tener que lidiar con la frontera. En la vida real, puedes mover los ojos para mirar más allá; No existen fronteras reales. Por lo tanto, es una limitación del medio.

Además de preservar el tamaño, ¿importa? No conozco una respuesta satisfactoria, pero supongo (no comprobado) que con los experimentos de atención y oclusión (objetos parciales), no necesitamos que la información se pierda en los bordes. Si hicieras algo más inteligente (por ejemplo, copia el píxel al lado), no cambiaría la respuesta, aunque no he experimentado yo mismo. El relleno con 0s es rápido y conserva el tamaño, por eso lo hacemos.

ignorante
fuente
1

Este es mi pensamiento. el relleno cero es importante en el momento inicial para mantener el tamaño del vector de características de salida. y alguien arriba dijo que el relleno cero tiene más rendimiento.

pero ¿qué tal la última vez? La resolución del vector de la función de imagen es muy pequeña, y el valor de píxel significa una especie de vector de cierto tamaño global.

Creo que en el último caso es mejor algún tipo de reflejo que cero relleno.

usuario225549
fuente
1

Al elaborar la información en el borde, básicamente, el píxel en la esquina (sombreado en verde) cuando se realiza una convolución solo se usaría una vez, mientras que el que está en el medio, como el rojo sombreado, contribuiría al mapa de características resultante varias veces. , rellenamos la imagen Ver figura: 2 .

Jatin
fuente
1

Trataré de decir desde el punto de vista de la información que cuándo está bien rellenar y cuándo no.

Tomemos como ejemplo el caso de la funcionalidad de relleno de tensorflow. Proporciona dos escenarios, "Válido" o "igual". Igual conservará el tamaño de la salida y lo mantendrá igual que el de la entrada al agregar el relleno adecuado, mientras que válido no lo hará y algunas personas afirman que conducirá a la pérdida de información, pero aquí está el truco .

Esta pérdida de información depende del tamaño del núcleo o del filtro que está utilizando. Por ejemplo, supongamos que tiene una imagen de 28x28 y el tamaño del filtro es de 15x15 (digamos). La salida debe tener una dimensión de 16x16, pero si rellena con "lo mismo" en tensorflow será 28x28. Ahora las 12 filas y las 12 columnas en sí mismas no contienen ninguna información significativa, pero aún están allí como una forma de ruido. Y todos sabemos cuán susceptibles son los modelos de aprendizaje profundo hacia el ruido. Esto puede degradar mucho el entrenamiento. Entonces, si usa filtros grandes, mejor no use relleno.

Saurabh Kumar
fuente