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

Специальные виды свёрток

Поточечная свёртка

Поточечная свёртка (pointwise convolution) это обычная свёртка, но с размером ядра KRC×1×1K\in\mathbb{R}^{C\times 1\times 1}, где CC - число входных каналов. Таким образом, в каждой точке поточечная свёртка генерирует признак, который зависит лишь от входных признаков в той же пространственной позиции. Выходной слой поточечной свёртки представляет собой линейную комбинацию входных слоёв. Генерируя набор поточечных свёрток, мы можем управлять числом выходных каналов, т.е. размерностью внутреннего представления изображения. Это полезно чтобы понизить эту размерность чтобы сократить объём вычислений перед применением последующих обычных свёрток.

Групповая свёртка

Групповая свёртка (grouped convolution) призвана уменьшить число вычислений, оставляя при этом число настраиваемых параметров почти неизменным (за счёт дополнительных смещений оно немного вырастет).

Рассмотрим для примера случай двух равных групп.

Стандартная свёртка зависит от всех каналов, что даёт сложность O(C(2n+1)2)O(C(2n+1)^2) для вычисления одной активации свёртки с ядром KRC×(2n+1)×(2n+1)K\in\mathbb{R}^{C\times(2n+1)\times(2n+1)}. В групповой свёртке с двумя группами каналы разбиваются на две половины. Используя нотацию питона для индексирования массивов, можно записать, что к первой половине каналов применяется свёртка с ядром K[:C/2,:,:]K[:C/2,:,:], а ко второй группе каналов применяется свёртка с ядром K[C/2:,:,:]K[C/2:,:,:], при этом смещение у двух уполовиненых свёрток разное. Активациии первой и второй свёртки затем конкатенируются вдоль пространства каналов.

Преимущество и ограничения

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

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

В общем случае KK групп, входные каналы разбиваются на непересекающиеся группы G1,...GKG_1,...G_K, а результат действия свертки - KK значений, которые затем конкатенируются вдоль размерности выходных каналов:

y1(u,v)=cG1i=nnj=nnK(c,i,j)X(u+i,v+j)+b1y2(u,v)=cG2i=nnj=nnK(c,i,j)X(u+i,v+j)+b2yK(u,v)=cGKi=nnj=nnK(c,i,j)X(u+i,v+j)+bK\begin{align*} y_{1}(u,v) &= \sum_{c\in G_{1}}\sum_{i=-n}^{n}\sum_{j=-n}^{n}K(c,i,j)X(u+i,v+j)+b_{1} \\ y_{2}(u,v) &= \sum_{c\in G_{2}}\sum_{i=-n}^{n}\sum_{j=-n}^{n}K(c,i,j)X(u+i,v+j)+b_{2} \\ \cdots & \quad \cdots \\ y_{K}(u,v) &= \sum_{c\in G_{K}}\sum_{i=-n}^{n}\sum_{j=-n}^{n}K(c,i,j)X(u+i,v+j)+b_{K} \\ \end{align*}
Эквивалентное определение

Групповая свёртка эквивалентна разбиению входа вдоль каналов на K групп, применению независимых свёрток к каждой группе, а потом объединению полученных результатов вдоль размерности выходных каналов.

Эффективность групповой свёртки заключена в уменьшении числа вычислений. Теперь для формирования такого же числа выходных каналов число вычислений уменьшается в K раз, хотя полученные признаки получаются и менее выразительными, поскольку зависят лишь от входов своей группы.

Поканальная свёртка

Поканальная свёртка (depthwise convolution) - это частный случай групповой свёртки, когда число групп совпадает с числом каналов, т.е. на каждый канал выделяется своя группа. Получается, что каждый канал ii обрабатывается независимо своей плоской свёрткой с плоским ядром KiR(2n+1)×(2n+1)K_i\in\mathbb{R}^{(2n+1)\times(2n+1)} и смещением bib_i.

Объём вычислений сокращается максимально - в CC раз, где CC - число каналов, но каждый выходной признак будет зависеть только от одного своего канала.

Чтобы выходные каналы зависели не только от соответствующих входных каналов, а сразу от всех, после применения поканальной свёртки рекомендуется применить поточечную свёртку. Такая комбинация 2-х свёрток называется поканальной сепарабельной свёрткой (depthwise separable convolution) и представляет собой частый приём в создании вычислительно эффективных свёрточных архитектур.

Сложность (в терминах операции умножения) обычного свёрточного слоя из CC в CC каналов будет C2(2n+1)2C^2 (2n+1)^2, а у поканальной сепарабельной будет лишь C(2n+1)2+CC(2n+1)^2+C.

Задача

Будет ли поканальная сепарабельная свёртка эквивалентна обычной свёртке? Почему?

Если какие-то моменты применения этих свёрток вам остались непонятными, рекомендуется посмотреть видео с иллюстрацией их расчётов [1].

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

Свёртки в свёрточных слоях можно изменять в зависимости от задачи. Этот подход называется динамическая свёртка (dynamic convolution). Например, в задаче стилизации изображений (перерисовке фотографии в стиле картин известных художников) можно подставлять в середине архитектуры различные свёртки в зависимости от того, какой именно стиль мы хотим воспроизвести, как сделано в [2]. Тем самым, одна и та же нейросеть будет способна генерировать различные стили, нужно лишь изменить одно преобразование в её середине.

Также можно выделить отдельную сеть, которая по изображению стиля будет сразу генерировать параметры свёрточного слоя для его воспроизведения (т.е. использовать гиперсеть), как сделано в статье [3]. Тогда не потребуется донастройка свёрточного слоя, если пользователю понадобиться стилизовать под новое изображение стиля (zero shot learning).

Схематично процесс генерации параметров свёртки показан на рисунке ниже [4], когда параметры свёртки постоянны (слева), и когда они меняются в зависимости от позиции, к которой применяется свёртка:

Литература

  1. https://youtu.be/vVaRhZXovbw
  2. Chen D. et al. Stylebank: An explicit representation for neural image style transfer //Proceedings of the IEEE conference on computer vision and pattern recognition. – 2017. – С. 1897-1906.
  3. Shen F., Yan S., Zeng G. Neural style transfer via meta networks //Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. – 2018. – С. 8061-8069.
  4. Jia X. et al. Dynamic filter networks //Advances in neural information processing systems. – 2016. – Т. 29.