El costo estadístico del relleno cero en redes neuronales convolucionales (CNN)

¿Qué es el relleno cero?

El relleno cero es una técnica utilizada en redes neuronales convolucionales donde se agregan píxeles adicionales con un valor de cero alrededor de los bordes de una imagen. Esto permite que los núcleos convolucionales se deslicen sobre los píxeles del borde y ayuda a controlar cuánto se reducen las dimensiones espaciales del mapa de características después de la convolución. El relleno se usa comúnmente para preservar el tamaño del mapa de características y permitir arquitecturas de red más profundas.

El problema oculto del relleno cero

Desde una perspectiva estadística y de procesamiento de señales, el relleno con ceros no es una operación neutral. Inyectar ceros en los límites de la imagen introduce discontinuidades artificiales que no existen en los datos originales. Estas transiciones bruscas actúan como bordes fuertes, lo que hace que los filtros convolucionales respondan al relleno en lugar de al contenido significativo de la imagen. Como resultado, el modelo aprende estadísticas diferentes en los bordes que en el centro, rompiendo sutilmente la equivarianza de traducción y sesgando las activaciones de características cerca de los bordes de la imagen.

Cómo el relleno cero altera las activaciones de funciones

Configurando las dependencias

pip instalar numpy matplotlib almohada scipy
importar numpy como np importar matplotlib.pyplot como plt desde PIL importar imagen desde scipy.ndimage importar correlacionar desde scipy.signal importar convolve2d

Importando la imagen

img = Image.open(‘/content/Gemini_Generated_Image_dtrwyedtrwyedtrw.png’).convert(‘L’) # Cargar como escala de grises img_array = np.array(img) / 255.0 # Normalizar a [0, 1]

plt.imshow(img, cmap=”gray”) plt.title(“Imagen original (sin relleno)”) plt.axis(“off”) plt.show()

En el código anterior, primero cargamos la imagen desde el disco usando PIL y la convertimos explícitamente a escala de grises, ya que es más fácil razonar sobre el análisis de convolución y detección de bordes en un solo canal de intensidad. Luego, la imagen se convierte en una matriz NumPy y se normaliza al [0,1][0, 1][0,1] rango de modo que los valores de píxeles representen magnitudes de señal significativas en lugar de intensidades de bytes sin formato. Para este experimento, utilizamos una imagen de un camaleón generada con Nano Banana 3, elegida porque es un objeto real con textura colocado dentro del marco, lo que hace que cualquier respuesta fuerte en los bordes de la imagen sea claramente atribuible al relleno en lugar de a los verdaderos bordes visuales.

Rellenar la imagen con ceros

pad_width = 50 padded_img = np.pad(img_array, pad_width, mode=”constant”, constante_values=0) plt.imshow(padded_img, cmap=”gray”) plt.title(“Imagen con relleno cero”) plt.axis(“off”) plt.show()

En este paso, aplicamos relleno cero a la imagen agregando un borde de ancho fijo alrededor de todos los lados usando la función de relleno de NumPy. El parámetro mode=’constant’ con valores_constantes=0 llena explícitamente la región rellena con ceros, rodeando efectivamente la imagen original con un marco negro. Esta operación no agrega nueva información visual; en cambio, introduce una marcada discontinuidad de intensidad en el límite entre los píxeles reales y los píxeles acolchados.

Aplicar un kernel de detección de bordes

edge_kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]) # Convoluciona ambas imágenes bordes_original = correlate(img_array, edge_kernel) bordes_padded = correlate(padded_img, edge_kernel)

Aquí, utilizamos un núcleo de detección de bordes simple de estilo laplaciano, que está diseñado para responder fuertemente a cambios repentinos de intensidad y señales de alta frecuencia, como los bordes. Aplicamos el mismo núcleo tanto a la imagen original como a la imagen rellena con ceros mediante correlación. Dado que el filtro permanece sin cambios, cualquier diferencia en la salida puede atribuirse únicamente al relleno. Las fuertes respuestas de los bordes cerca de los bordes de la imagen rellenada no son causadas por características de la imagen real, sino por los límites artificiales de valor cero introducidos mediante el relleno de ceros.

Visualización de artefactos de relleno y cambio de distribución

fig, axes = plt.subplots(2, 2, figsize=(12, 10)) # Mostrar ejes de imagen rellenada[0, 0].imshow(padded_img, cmap=’gris’) ejes[0, 0].set_title(“Imagen con relleno de ceros\n(‘Marco’ artificial agregado)”) # Mostrar ejes de respuesta del filtro (el problema de la función de paso)[0, 1].imshow(edges_padded, cmap=’magma’) ejes[0, 1].set_title(“Activaciones de filtro\n(Disparo extremo en el borde artificial)”) # Mostrar ejes de desplazamiento de distribución[1, 0].hist(img_array.ravel(), bins=50, color=”blue”, alpha=0.6, label=”Original”) ejes[1, 0].set_title(“Distribución de píxeles original”) ejes[1, 0].set_xlabel(“Intensidad”) ejes[1, 1].hist(padded_img.ravel(), bins=50, color=”red”, alpha=0.6, label=”Relleno”) ejes[1, 1].set_title(“Distribución de píxeles acolchados\n(Pico masivo en 0,0)”) ejes[1, 1].set_xlabel(“Intensidad”) plt.tight_layout() plt.show()

En la parte superior izquierda, la imagen rellena con ceros muestra un marco negro uniforme agregado alrededor de la imagen del camaleón original. Este marco no proviene de los datos en sí: es una construcción artificial introducida únicamente por conveniencia arquitectónica. En la parte superior derecha, la respuesta del filtro de borde revela la consecuencia: a pesar de que no hay bordes semánticos reales en el límite de la imagen, el filtro dispara fuertemente a lo largo del borde acolchado. Esto sucede porque la transición de los valores de píxeles reales a cero crea una función de paso brusco, que los detectores de bordes están diseñados explícitamente para amplificar.

La fila inferior destaca la cuestión estadística más profunda. El histograma de la imagen original muestra una distribución suave y natural de las intensidades de los píxeles. Por el contrario, la distribución de la imagen acolchada muestra un pico masivo con una intensidad de 0,0, que representa los píxeles inyectados de valor cero. Este pico indica un claro cambio en la distribución introducido únicamente por el relleno.

Conclusión

El relleno cero puede parecer una elección arquitectónica inofensiva, pero silenciosamente inyecta suposiciones sólidas en los datos. Al colocar ceros junto a los valores de píxeles reales, se crean funciones escalonadas artificiales que los filtros convolucionales interpretan como bordes significativos. Con el tiempo, el modelo comienza a asociar fronteras con patrones específicos, introduciendo un sesgo espacial y rompiendo la promesa central de la equivarianza de traducción.

Más importante aún, el relleno cero altera la distribución estadística en los límites de la imagen, lo que hace que los píxeles del borde sigan un régimen de activación diferente al de los píxeles interiores. Desde la perspectiva del procesamiento de señales, esto no es un detalle menor sino una distorsión estructural.

Para los sistemas de grado de producción, a menudo se prefieren estrategias de relleno como la reflexión o la replicación, ya que preservan la continuidad estadística en los límites y evitan que el modelo aprenda artefactos que nunca existieron en los datos originales.

Soy graduado en ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en diversas áreas.