1. В математике свертка - это операция, выполняемая над двумя функциями (f и g) для получения третьей функции. Свертка - одна из самых важных операций при обработке сигналов и изображений. Он может работать в 1D (например, обработка речи), 2D (например, обработка изображений) или 3D (обработка видео).
  2. При обработке изображений свертка - это процесс преобразования изображения путем применения ядра к каждому пикселю и его локальным соседям по всему изображению. Ядро - это матрица значений, размер и значения которой определяют эффект преобразования процесса свертки.
  3. Процесс свертки включает эти шаги. (1) Он помещает матрицу ядра на каждый пиксель изображения (гарантируя, что все ядро ​​находится внутри изображения), умножает каждое значение ядра на соответствующий пиксель, на котором оно завершено. (2) Затем суммирует полученные умноженные значения и возвращает полученное значение как новое значение центрального пикселя. (3) Этот процесс повторяется по всему изображению.
  4. Как мы видим на рисунке, ядро ​​3x3 свернуто поверх исходного изображения 7x7. Центральный элемент ядра помещается над исходным пикселем. Затем исходный пиксель заменяется взвешенной суммой самого себя и окружающих пикселей. Выходные данные помещаются в значение целевого пикселя. В этом примере в первой позиции у нас есть 0 в исходном пикселе и 4 в ядре. 4x0 равно 0, затем, переходя к следующему пикселю, мы получаем 0 и 0 в обоих местах. 0x0 равно 0. Затем снова 0x0 равно 0. Далее в центре стоит 1 в исходном изображении и 0 в соответствующей позиции ядра. 0x1 равно 0. Затем снова 0x1 равно 0. Тогда 0x0 равно 0, а 0x1 равно 0, а в последней позиции это -4x2, что равно -8. Теперь, суммируя все эти результаты, мы получаем -8 в качестве ответа, поэтому результат этой операции свертки будет -8. Этот результат обновляется в конечном изображении.
  5. Результат процесса свертки изменяется с изменением значений ядра. Например, ядро ​​идентификации, показанное ниже, при применении к изображению посредством свертки не повлияет на результирующее изображение. Каждый пиксель сохранит свое исходное значение, как показано на следующем рисунке.

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

Подобное ядро ​​размытия по Гауссу при применении к изображению посредством свертки применяет эффект размытия по Гауссу к результирующему изображению.

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

6. Свертка - ключевая концепция сверточных нейронных сетей. Сверточные нейронные сети (CNN) - это тип глубокой нейронной сети. CNN состоит из сверточного уровня, уровня пула и уровня с полным подключением. На уровне свертки CNN применяет свертку к своим входам, используя матрицу ядра, которую она калибрует во время обучения. По этой причине CNN очень хороши в сопоставлении признаков в изображениях и классификации объектов. Параметры слоя свертки состоят из набора обучаемых ядер. Каждое ядро ​​представляет собой небольшую матрицу, которая распространяется на всю глубину входного объема. Во время прямого прохода мы сворачиваем каждое ядро ​​по ширине и высоте входного изображения и вычисляем скалярные произведения между значениями пикселей источника и ядра в соответствующих положениях.

Код Python для получения результатов, показанных в примерах, приведен ниже.