Статистическая стоимость дополнения нулями в свёрточных нейронных сетях (CNN)

Что такое дополнение нулями?

Дополнение нулями — это метод, используемый в свёрточных нейронных сетях, при котором вокруг границ изображения добавляются дополнительные пиксели со значением ноль. Это позволяет свёрточным ядрам проходить по краевым пикселям и контролировать степень сжатия пространственных размеров карты признаков после свёртки. Дополнение обычно используется для сохранения размера карты признаков и обеспечения возможности создания более глубоких сетевых архитектур.

Скрытая проблема дополнения нулями

С точки зрения обработки сигналов и статистики дополнение нулями не является нейтральной операцией. Введение нулей на границах изображения приводит к появлению искусственных разрывов, которых нет в исходных данных. Эти резкие переходы действуют как сильные края, заставляя свёрточные фильтры реагировать на дополнение, а не на значимое содержимое изображения. В результате модель изучает другую статистику на границах, чем в центре, что незаметно нарушает эквивариантность перевода и искажает активацию признаков вблизи краёв изображения.

Как дополнение нулями изменяет активацию признаков

Настройка зависимостей

Импорт изображения

«`python
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from scipy.ndimage import correlate
from scipy.signal import convolve2d

img = Image.open(‘/content/GeminiGeneratedImage_dtrwyedtrwyedtrw.png’).convert(‘L’) # Load as Grayscale
img_array = np.array(img) / 255.0 # Normalize to [0, 1]

plt.imshow(img, cmap=»gray»)
plt.title(«Original Image (No Padding)»)
plt.axis(«off»)
plt.show()
«`

В коде выше мы сначала загружаем изображение с диска с помощью PIL и явно преобразуем его в оттенки серого, поскольку анализ свёртки и обнаружения краёв проще выполнять в одном канале интенсивности. Затем изображение преобразуется в массив NumPy и нормализуется до диапазона [0,1], чтобы значения пикселей представляли значимые величины сигнала, а не необработанные интенсивности байтов.

Для этого эксперимента мы используем изображение хамелеона, сгенерированное с помощью Nano Banana 3, выбранное потому, что это реальный текстурированный объект, помещённый в кадр, — что позволяет чётко определить сильные отклики на границах изображения, которые можно отнести к дополнению, а не к истинным визуальным краям.

Дополнение изображения нулями

«`python
pad_width = 50
paddedimg = np.pad(imgarray, padwidth, mode=’constant’, constantvalues=0)

plt.imshow(padded_img, cmap=»gray»)
plt.title(«Zero-Padded Image»)
plt.axis(«off»)
plt.show()
«`

На этом этапе мы применяем дополнение нулями к изображению, добавляя границу фиксированной ширины вокруг всех сторон с помощью функции pad в NumPy. Параметр mode=’constant’ с constant_values=0 явно заполняет дополненную область нулями, эффективно окружая исходное изображение чёрной рамкой. Эта операция не добавляет новой визуальной информации; вместо этого она вводит резкий разрыв интенсивности на границе между реальными пикселями и дополненными пикселями.

Применение ядра обнаружения краёв

«`python
edge_kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])

Convolve both images

edgesoriginal = correlate(imgarray, edge_kernel)
edgespadded = correlate(paddedimg, edge_kernel)
«`

Здесь мы используем простое ядро обнаружения краёв в стиле Лапласа, которое предназначено для сильного реагирования на резкие изменения интенсивности и высокочастотные сигналы, такие как края. Мы применяем одно и то же ядро как к исходному изображению, так и к дополненному изображению с помощью корреляции. Поскольку фильтр остаётся неизменным, любые различия в выходных данных можно отнести исключительно к дополнению.

Визуализация артефактов дополнения и сдвига распределения

«`python
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

Show Padded Image

axes[0, 0].imshow(padded_img, cmap=’gray’)
axes[0, 0].set_title(«Zero-Padded Image\n(Artificial ‘Frame’ added)»)

Show Filter Response (The Step Function Problem)

axes[0, 1].imshow(edges_padded, cmap=’magma’)
axes[0, 1].set_title(«Filter Activations\n(Extreme firing at the artificial border)»)

Show Distribution Shift

axes[1, 0].hist(img_array.ravel(), bins=50, color=’blue’, alpha=0.6, label=’Original’)
axes[1, 0].set_title(«Original Pixel Distribution»)
axes[1, 0].set_xlabel(«Intensity»)

axes[1, 1].hist(padded_img.ravel(), bins=50, color=’red’, alpha=0.6, label=’Padded’)
axes[1, 1].set_title(«Padded Pixel Distribution\n(Massive spike at 0.0)»)
axes[1, 1].set_xlabel(«Intensity»)

plt.tight_layout()
plt.show()
«`

В верхнем левом углу дополненное нулями изображение показывает равномерную чёрную рамку, добавленную вокруг исходного изображения хамелеона. Эта рамка не исходит из самих данных — она является искусственной конструкцией, введённой исключительно для удобства архитектуры.

В верхнем правом углу ответ фильтра показывает следствие: несмотря на отсутствие реальных семантических краёв на границе изображения, фильтр сильно срабатывает вдоль дополненной границы. Это происходит потому, что переход от реальных значений пикселей к нулю создаёт резкую ступенчатую функцию, которую детекторы краёв специально предназначены для усиления.

Нижний ряд подчёркивает более глубокую статистическую проблему. Гистограмма исходного изображения показывает плавное, естественное распределение интенсивностей пикселей. Напротив, распределение дополненного изображения демонстрирует массивный всплеск при интенсивности 0,0, представляющий введённые нулевые пиксели. Этот всплеск указывает на явный сдвиг распределения, введённый только дополнением.

Заключение

Дополнение нулями может показаться безобидным архитектурным выбором, но оно незаметно вносит сильные предположения в данные. Размещая нули рядом с реальными значениями пикселей, оно создаёт искусственные ступенчатые функции, которые свёрточные фильтры интерпретируют как значимые края. Со временем модель начинает ассоциировать границы с определёнными шаблонами, что вносит пространственный уклон и нарушает основное обещание эквивариантности перевода.

Что ещё более важно, дополнение нулями изменяет статистическое распределение на границах изображения, заставляя краевые пиксели следовать другому режиму активации, чем внутренние пиксели. С точки зрения обработки сигналов это не мелкая деталь, а структурное искажение.

Для систем производственного уровня часто предпочтительны такие стратегии дополнения, как отражение или репликация, поскольку они сохраняют статистическую непрерывность на границах и не позволяют модели изучать артефакты, которых никогда не было в исходных данных.

1. Какие проблемы может вызвать дополнение нулями в свёрточных нейронных сетях?

Ответ: дополнение нулями может привести к появлению искусственных разрывов на границах изображения, которые действуют как сильные края. Это заставляет свёрточные фильтры реагировать на дополнение, а не на значимое содержимое изображения. В результате модель изучает другую статистику на границах, чем в центре, что нарушает эквивариантность перевода и искажает активацию признаков вблизи краёв изображения.

2. Какие альтернативные стратегии дополнения существуют и чем они предпочтительнее дополнения нулями?

Ответ: для систем производственного уровня часто предпочтительны такие стратегии дополнения, как отражение или репликация. Они сохраняют статистическую непрерывность на границах и не позволяют модели изучать артефакты, которых никогда не было в исходных данных.

3. Как влияет дополнение нулями на активацию признаков в свёрточных нейронных сетях?

Ответ: дополнение нулями изменяет статистическое распределение на границах изображения, заставляя краевые пиксели следовать другому режиму активации, чем внутренние пиксели. Это нарушает основное обещание эквивариантности перевода и может привести к пространственному уклону в модели.

4. Какие методы можно использовать для визуализации артефактов, вызванных дополнением нулями?

Ответ: для визуализации артефактов можно использовать метод корреляции с ядром обнаружения краёв. Этот метод позволяет наглядно увидеть, как фильтр реагирует на дополненные границы изображения. Также можно использовать гистограммы распределения интенсивностей пикселей до и после дополнения, чтобы наглядно продемонстрировать сдвиг распределения.

5. Какие практические рекомендации можно дать разработчикам нейронных сетей по использованию дополнения нулями?

Ответ: разработчикам нейронных сетей рекомендуется избегать использования дополнения нулями в ситуациях, где критична точность и отсутствие искажений. Вместо этого стоит рассмотреть альтернативные методы дополнения, такие как отражение или репликация, которые сохраняют статистическую непрерывность на границах и не позволяют модели изучать артефакты, которых не было в исходных данных.

Источник