Перейти к основному содержимому

Свёртка для изображений

Одна свёртка

Для изображений XRC×H×WX\in\mathbb{R}^{C\times H\times W}, состоящих из CC каналов (C=3C=3 для RGB, Lab, HCL представлений) свёртка работает как линейная операция в некоторой ограниченной квадратной окрестности от обрабатываемого пикселя.

У свёртки есть параметры:

  • ядро свёртки KRC×(2n+1)×(2n+1)K\in \mathbb{R}^{C\times (2n+1)\times (2n+1)}

  • смещение свёртки bRb\in\mathbb{R}

Результат действия свёртки (активация) в позиции (u,v)(u,v) вычисляется по формуле:

y(u,v)=c=1Ci=nnj=nnK(c,i,j)X(u+i,v+j)+b,y(u,v) = \sum_{c=1}^C \sum_{i=-n}^n \sum_{j=-n}^n K(c,i,j) X(u+i,v+j)+b,

при этом свёртка применяется ко всем позициям (u,v)(u,v), на которых мы можем приложить ядро свёртки, образуя тем самым двумерную карту активаций свёртки или карту признаков (feature map), как показано на рисунках:

После прохода по ряду мы сдвигаемся на следующий ряд в начало и проходим по нему. Так проходим по всем рядам, пока не дойдём до финальной позиции:

Сколько всего параметров нужно настроить для свёртки?

Нужно подобрать C(2n+1)2C(2n+1)^2 параметров для ядра свёртки и один - для смещения.

Примеры свёрток

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

Также свёртки можно применять для извлечения границ, например вертикальных (слева) и горизонтальных (справа):

При обработке изображений нейросетями используются свёртки с настраиваемыми параметрами ядра KK и смещения bb - это позволяет извлекать более подходящие признаки для конечной задачи.

Свёрточный слой

В нейросетях применяется не одна, а сразу несколько свёрток к изображению, извлекающих различные признаки. Совокупность одновременно применяемых свёрток образует свёрточный слой (convolutional layer). Например, при применении 4-х свёрток, получим 4 карты активации:

Свёрточные слои можно наслаивать друг на друга, применяя последующие свёртки к картам активаций предыдущих свёрток:

Сколько всего параметров нужно настроить для свёрточного слоя, ведущего отображение из C1C_1 в C2C_2 каналов?

Каждая свёртка требует C1(2n+1)2+1C_1(2n+1)^2+1 параметров. Поскольку применяется C2C_2 свёрток, то нужно задать C2(C1(2n+1)2+1)C_2(C_1(2n+1)^2+1) параметров.

Добавление нелинейностей

При многоуровневом применении свёрточных слоёв после каждой свёртки должна применяться функция нелинейности, например ReLU, иначе суперпозиция свёрток, как линейных операций, снова даст линейную операцию!

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

При последовательном применении сверток область видимости (receptive field, область пикселей исходного изображения, от которых зависит результат) более поздних свёрток больше, чем у более ранних. Например, если последовательно применить две свертки 3×33\times 3, то у первой свёртки будет область видимости 3×33\times 3, а у второй - уже 5×55\times 5. Это проиллюстрировано на следующем рисунке: