Свёрточный слой Conv2D и его параметры

Свёрточный слой Conv2D является ключевым компонентом при построении свёрточных нейронных сетей (CNN) для обработки изображений. Его основная задача — выявление локальных признаков на входных данных, таких как контуры, текстуры или сложные объекты, через применение обучаемых фильтров.

Основная концепция

Слой Conv2D принимает на вход тензор с формой (height, width, channels) и применяет к нему множество фильтров (ядер свёртки), каждый из которых сканирует входное изображение, вычисляя свёртку для выявления определённого признака. Результатом работы слоя является новый тензор признаков (feature map), в котором каждая карта отображает наличие соответствующего признака в разных областях изображения.

Основные параметры Conv2D

1. filters Количество фильтров, которые будут обучены в слое. Каждый фильтр создаёт отдельную карту признаков. Чем больше фильтров, тем более богатые признаки сможет извлекать сеть, но увеличивается и количество параметров.

2. kernelSize Размер ядра свёртки, задаваемый как одно число или массив [height, width]. Например, 3 соответствует ядру 3x3, а [5, 5] — ядру 5x5. Размер ядра влияет на область локального восприятия: большие ядра позволяют захватывать более глобальные паттерны, малые — тонкие локальные детали.

3. strides Шаг сканирования фильтра по входной матрице. Может быть задан числом или массивом [strideHeight, strideWidth]. Стандартное значение — 1. Увеличение шага уменьшает размер выходного тензора, эффективно уменьшая разрешение карты признаков.

4. padding Определяет стратегию обработки границ входного изображения. Два наиболее распространённых значения:

  • "valid" — без добавления нулей; выходной тензор уменьшается по сравнению с входом.
  • "same" — добавляются нули, чтобы выходной тензор имел те же размеры, что и входной (при stride=1).

5. activation Функция активации, применяемая к выходу свёртки. Часто используют relu для добавления нелинейности и ускорения обучения, но возможны и sigmoid, tanh или другие функции.

6. useBias Логическое значение, указывающее, будет ли слой использовать смещение (bias) для каждого фильтра. Обычно по умолчанию включено (true), чтобы фильтры могли смещать активацию независимо от нуля.

7. kernelInitializer и biasInitializer Определяют метод инициализации весов фильтров и смещений. Наиболее популярны glorotUniform и heNormal, которые помогают избежать проблем с градиентами на старте обучения.

8. dataFormat Формат входных данных:

  • "channelsLast"(height, width, channels)
  • "channelsFirst"(channels, height, width) На практике в Keras.js чаще используется "channelsLast", так как это совместимо с WebGL и стандартными изображениями.

Пример создания слоя Conv2D в Keras.js

const convLayer = new KerasJS.layers.Conv2D({
  filters: 32,
  kernelSize: [3, 3],
  strides: 1,
  padding: 'same',
  activation: 'relu',
  useBias: true,
  kernelInitializer: 'glorotUniform',
  biasInitializer: 'zeros',
  dataFormat: 'channelsLast'
});

Этот слой создаёт 32 фильтра размером 3x3, применяет функцию ReLU и сохраняет размер карты признаков благодаря padding='same'.

Вычисление выходной формы

Размер выходного тензора (H_out, W_out) можно рассчитать по формуле:

  • Для padding='valid': [ H_{out} = + 1 , W_{out} = + 1 ]

  • Для padding='same': [ H_{out} = , W_{out} = ]

где (H_{in}, W_{in}) — размеры входного изображения, (K_h, K_w) — размеры ядра, (S_h, S_w) — шаги свёртки по высоте и ширине.

Примечания по использованию

  • Малые ядра (3x3) часто предпочтительнее, чем большие (7x7), так как позволяют строить более глубокие сети с меньшим числом параметров.
  • Сочетание нескольких Conv2D с последующей активацией и нормализацией (BatchNormalization) увеличивает устойчивость и точность сети.
  • Stride больше 1 сокращает размер карты признаков, но может теряться точность локальных признаков. Для уменьшения размерности часто используют слои Pooling после Conv2D.

Оптимизация и производительность

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

  • Использование меньшего числа фильтров при глубокой сети.
  • Минимизация размеров входного изображения без потери информативности.
  • Применение padding='same' для упрощения согласования размеров между слоями.

Эффективная настройка Conv2D — ключ к успешной работе свёрточной сети в реальном времени, особенно при ограниченных ресурсах клиента.