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

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

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

Поточечная свёртка (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:,:,:], при этом смещение у двух уполовиненых свёрток разное. Активациии первой и второй свёртки затем конкатенируются вдоль размерности каналов (channel dimension).

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

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

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

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

Таким образом расчёт свёрточного слоя групповых свёрток с группами G1,G2,...GSG_1,G_2,...G_S будет

y1m(u,v)=cG1i=nnj=nnK1m(c,i,j)x(c,u+i,v+j)+b1m,mG1y2m(u,v)=cG2i=nnj=nnK2m(c,i,j)x(c,u+i,v+j)+b2m,mG2ySm(u,v)=cGSi=nnj=nnKSm(c,i,j)x(c,u+i,v+j)+bSm,mGS\begin{aligned} y_{1m}(u,v) &= \sum_{c\in G_{1}}\sum_{i=-n}^{n}\sum_{j=-n}^{n}K_{1m}(c,i,j)\mathbf{x}(c,u+i,v+j)+b_{1m}, & m\in G_1 \\ y_{2m}(u,v) &= \sum_{c\in G_{2}}\sum_{i=-n}^{n}\sum_{j=-n}^{n}K_{2m}(c,i,j)\mathbf{x}(c,u+i,v+j)+b_{2m}, & m\in G_2 \\ \cdots & \quad \cdots \\ y_{Sm}(u,v) &= \sum_{c\in G_{S}}\sum_{i=-n}^{n}\sum_{j=-n}^{n}K_{Sm}(c,i,j)\mathbf{x}(c,u+i,v+j)+b_{Sm}, & m\in G_S \\ \end{aligned}

Выходом будет конкатенация всех выходов вдоль размерности каналов:

y=[y1m,y2m,...ySm]\mathbf{y}=[\mathbf{y}_{1m},\mathbf{y}_{2m},...\mathbf{y}_{Sm}]

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

Параметрами слоя будут ядра {Kgm}g,m\{K_{gm}\}_{g,m} и смещения {bgm}g,m\{b_{gm}\}_{g,m} для каждого выходного канала в рамках каждой группы.

Таким образом, групповая свёртка эквивалентна разбиению входа вдоль каналов на 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).

По сути это частный случай гиперсети (hypernetwork), когда предсказываются только веса свёртки.

Схематично процесс генерации параметров свёртки показан на рисунке ниже, когда параметры свёртки постоянны (а), и когда они меняются в зависимости от позиции, к которой применяется свёртка (b) [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.