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

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

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

Итак, постараюсь в двух словах изложить всю концепцию. CNN в основном работает с изображениями, а изображения имеют определенное измерение. Для этого объяснения давайте рассмотрим изображение 5x5 (пикселей), которое представлено синим прямоугольником. Теперь мы можем представить всю эту матрицу 5x5 с помощью коэффициента отображения, известного как свертка. Это все еще может не иметь никакого смысла, но если вы посмотрите на упомянутый выше GIF, каждый элемент матрицы свертки (белый блок) формируется с использованием матрицы 3x3 из огромного изображения 5x5. Таким образом, свертка имеет определенный коэффициент умножения, поэтому, когда каждый из пикселей умножается на значения из свертки, он представляет все пикселизированное изображение.

Посмотрите видео, приведенное ниже, для лучшего понимания.

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

Здесь мы можем видеть, как данный пиксель изображения масштабируется с помощью сверточной матрицы.

from learntools.core import binder
binder.bind(globals())
from learntools.deep_learning.exercise_1 import *
#These are the libraries which I am using as source to learn
horizontal_line_conv = [[1, 1], 
                        [-1, -1]]
# load_my_image and visualize_conv are utility functions provided for this exercise
original_image = load_my_image() 
visualize_conv(original_image, horizontal_line_conv)

Это покажет мне данный вывод.

Теперь, используя очень похожий код, мы получаем:

vertical_line_conv = [[-1,1],[-1,1]]
visualize_conv(original_image, vertical_line_conv)

Извилины, которые вы видели, имеют размер 2x2. Но у вас могут быть большие извилины. Они могут быть 3х3, 4х4 и т. д. Они даже не обязательно должны быть квадратными. Ничто не мешает использовать свертку 4x7.

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

Например, можно создать свертку 3x3, которая фильтрует яркие пиксели с темным посередине. Не существует конфигурации свертки 2x2, которая зафиксировала бы это. С другой стороны, все, что может быть захвачено сверткой 2x2, также может быть захвачено сверткой 3x3. Означает ли это, что мощные модели требуют чрезвычайно больших сверток? Не обязательно. На следующем уроке вы увидите, как модели глубокого обучения объединяют множество сверток для захвата сложных паттернов, в том числе паттернов, которые слишком сложны, чтобы их можно было захватить с помощью любой отдельной свертки.

Вот и все на сегодня, просто хотел осветить основы по теме. Спасибо за чтение. Продолжай учиться.

Ваше здоровье.