Основная идея сверточной нейронной сети, дать возможность ей самостоятельно определять признаки (фичи) по картинке.

На вход подается картинка. Далее она обрабатывается сверточными слоями. Они преобразуют картинку в набор признаков. Далее эти признаки передаются на вход многослойному персептрону (полносвязные слои), который по этим признакам классифицирует картинку.

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

Операция сверстки — это поэлементное умножение элементов слоя на элементы карты активации.

Карта активации — это матрица на которую умножается свертка, чтобы на выходе получить фичи. Для каждой фичи нужна своя карта активации. Соотвественно, если мы хотим получить 32 фичи то нужно 32 карты активации.

Пример работы сверточного слоя

Сверточные нейронные сети: основы

Шаг 1

_x000D_1*1 + 2*-1 + 3*1 + 5*1 + 6*-1 + 7*1 + 9*1 + 10*-1 + 11*1 = 18

Сверточные нейронные сети: основы

Шаг 2

_x000D_2*1 + 3*-1 + 4*1 + 6*1 + 7*-1 + 8*1 + 10*1 + 11*-1 + 12*1 = 21

Сверточные нейронные сети: основы

Шаг 3

_x000D_5*1 + 6*-1 * 7*1 + 9*1 + 10*-1 + 11*1 + 13*1 + 14*-1 + 15*1 = 30

Сверточные нейронные сети: основы

Шаг 4

_x000D_6*1 + 7*-1 + 8*1 + 10*1 + 11*-1 + 12*1 + 14*1 + 15*-1 + 16*1 = 33

Сверточные нейронные сети: основы

Размер карты активации

kernel_size — размер карты активации

Сверточные нейронные сети: основы

Шаг свертки

stride — шаг свертки. Шаг свертки может быть по оси X, так и по оси Y

Сверточные нейронные сети: основы

Dilation

dilation — растяжение свертки. Шаг умножения элементов слоя. Элементы слоя умножаются не через 1, а через dilation.

Сверточные нейронные сети: основы

В данном случае при размере карты активации 3×3 умножаются на элементы слоя через 1 элемент.

Padding

padding — отступ, который добавляется к слою сверху, снизу, слева и справа.

Сверточные нейронные сети: основы

В данном случае слой был 3×3. К нему добавляются со всех сторон padding=1. И получается слой равным 5×5.

Обработка RGB картинок

Допустим, есть RGB картинка 32x32x3. Для обработки RGB картинки есть два способа.

Первый способ обработать картинку 3D сверткой. 3D свертка — это свертка, в которой карта активации 3мерная, а не 2мерная. Обработав картинку сверткой 3x3x3 получим фичу размером 30x30x1.

Второй способ переставить канал RGB в начало слоя. Сделать это можно через функцию torch.moveaxis

Преобразуем 32x32x3 => 3x32x32 и применяем двумерную свертку к каждом каналу цвета.