Открыть сервисСервис

Свёртка ядра

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

Математическое определение

В дискретном случае, для одномерного сигнала \( f \) и ядра \( g \) свёртка \( (f * g)[n] \) определяется как:

\[ (f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] \cdot g[n - m] \]

На практике, поскольку сигналы и ядра имеют конечную длину, суммирование ведётся по области перекрытия. Для двумерного случая, например для изображения \( I \) и ядра \( K \) размером \( k \times k \), свёртка в точке \( (x, y) \) записывается как:

\[ (I * K)[x, y] = \sum_{i=-a}^{a} \sum_{j=-b}^{b} I[x + i, y + j] \cdot K[i, j] \]

где \( a = \lfloor k/2 \rfloor \), \( b = \lfloor k/2 \rfloor \). Ядро обычно симметрично относительно центра, и его размер чаще всего нечётный (3×3, 5×5, 7×7), чтобы центральный элемент был чётко определён.

Виды свёртки

Одномерная свёртка

Применяется к последовательностям данных: звуковым сигналам, временным рядам, текстовым данным (в контексте обработки естественного языка). Используется для фильтрации шума, выделения трендов, обнаружения событий.

Двумерная свёртка

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

Трёхмерная свёртка

Применяется к трёхмерным данным, таким как видео (временная ось + две пространственные) или объёмные медицинские изображения (например, КТ или МРТ). Ядро в этом случае имеет три измерения.

Разделимая свёртка

Ядро представляется как произведение двух одномерных ядер (например, по строкам и столбцам). Это позволяет сократить количество вычислений: вместо \( O(k^2) \) операций на пиксель требуется \( O(2k) \). Применяется в фильтрах Гаусса и в некоторых архитектурах нейронных сетей.

Применение в обработке изображений

Свёртка ядра лежит в основе большинства классических фильтров цифровой обработки изображений. Ядро определяет, как именно изменяется изображение.

Сглаживание (размытие)

  • Фильтр Гаусса: ядро аппроксимирует гауссово распределение. Уменьшает высокочастотные шумы, размывает детали.
  • Фильтр усреднения (box blur): все элементы ядра равны \( 1/(k^2) \). Простейший сглаживающий фильтр.

Выделение границ

  • Оператор Собеля: два ядра (для горизонтальных и вертикальных границ). Вычисляет приблизительное значение градиента яркости.
  • Оператор Лапласа: ядро, аппроксимирующее вторую производную. Выделяет области резкого изменения яркости.
  • Фильтр Кэнни: не является простой свёрткой, но включает этап свёртки с гауссовым ядром.

Повышение резкости

  • Фильтр резкости (unsharp mask): ядро, которое усиливает разницу между пикселем и его окружением. Типичное ядро: центральный элемент — положительное число (например, 5), окружающие — отрицательные (например, -1).

Обнаружение текстур и особенностей

Применение в свёрточных нейронных сетях

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

Параметры свёртки в CNN

  • Количество ядер (фильтров): определяет количество выходных каналов (карт признаков).
  • Размер ядра (kernel size): обычно 3×3, 5×5, 7×7. В современных архитектурах (ResNet, VGG) предпочитают маленькие ядра 3×3, так как они позволяют строить глубокие сети с меньшим количеством параметров.
  • Шаг (stride): шаг, с которым ядро скользит по изображению. Шаг 2 уменьшает размерность в два раза.
  • Дополнение (padding): добавление нулей или других значений по краям изображения, чтобы сохранить размерность (padding='same') или избежать потери информации на краях (padding='valid').
  • Дилатация (dilation): расширение ядра путём вставки нулей между элементами. Позволяет увеличить поле зрения без увеличения числа параметров (используется в архитектурах типа WaveNet, DeepLab).

Преимущества свёртки в нейронных сетях

  • Локальность: каждый нейрон обрабатывает только небольшую область входных данных (локальное рецептивное поле).
  • Разделение весов: одно и то же ядро применяется ко всем позициям, что резко сокращает количество обучаемых параметров по сравнению с полносвязными слоями.
  • Инвариантность к сдвигу: свёртка обнаруживает признаки независимо от их положения на изображении.

Примеры ядер свёртки

НазначениеЯдро 3×3Описание
Размытие (усреднение)\( \frac{1}{9} \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} \)Каждый выходной пиксель — среднее 9 соседних.
Размытие (Гаусс)\( \frac{1}{16} \begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix} \)Приближение гауссова распределения с σ ≈ 0.8.
Границы по горизонтали (Собель)\( \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} \)Выделяет вертикальные перепады яркости.
Границы по вертикали (Собель)\( \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} \)Выделяет горизонтальные перепады яркости.
Лапласиан\( \begin{bmatrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \end{bmatrix} \)Вторая производная; выделяет все границы.
Повышение резкости\( \begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix} \)Усиливает контраст между центром и окружением.

Реализация и вычислительные аспекты

На практике свёртка реализуется либо как прямая операция (для маленьких ядер), либо с использованием быстрого преобразования Фурье (БПФ) для больших ядер, так как свёртка в пространственной области эквивалентна поэлементному умножению в частотной области. В современных библиотеках глубокого обучения (TensorFlow, PyTorch) свёртка оптимизирована с помощью таких алгоритмов, как im2col (преобразование в умножение матриц) и алгоритм Винограда.

Ограничения и альтернативы

  • Краевые эффекты: при свёртке без дополнения размер выходного изображения уменьшается, а краевые пиксели обрабатываются неполно.
  • Вычислительная сложность: для больших ядер или глубоких сетей свёртка может быть ресурсоёмкой.
  • Альтернативы: в некоторых задачах используются развёртка (deconvolution, или транспонированная свёртка), разделимые свёртки, а также механизмы внимания (attention), которые могут заменять свёртку в трансформерах.

Источники

  • Гонсалес Р., Вудс Р. — «Цифровая обработка изображений» (3-е издание)
  • Гудфеллоу Я., Бенджио И., Курвилль А. — «Глубокое обучение»
  • LeCun Y., Bengio Y., Hinton G. — «Deep learning» (Nature, 2015)
  • Документация библиотеки OpenCV (раздел «Image Filtering»)
  • Документация PyTorch (раздел «torch.nn.Conv2d»)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru