[PaperRead]Involution: Inverting the Inherence of Convolution for Visual Recogni

искусственный интеллект глубокое обучение

«Это второй день моего участия в первом испытании обновлений 2022 года. Подробную информацию о мероприятии см.:Вызов первого обновления 2022 г.".

Название бумаги:Involution: Inverting the Inherence of Convolution for Visual Recognition

Авторы: Дуо Ли, Цзе Ху, Чанху Ван, Сянтай Ли, Ци Шэ, Лэй Чжу, Тонг Чжан, Цифэн Чен

Код::GitHub.com/the-li14/Я женщина или…

Вопреки природе свертки, само-внимание в широком смысле: «внутренний объем», который можно моделировать на больших расстояниях, уменьшить избыточность информации канала и добиться производительности SOTA.

Convolution

Свертка обладает следующими свойствами

  1. пространственный агностик: одно и то же ядро ​​для другой позиции

    • Преимущества: совместное использование параметров, эквивалент перевода
    • Недостатки: нельзя гибко изменять параметры, размер ядра свертки не может быть слишком большим, а рецептивное поле можно расширить только за счет стекирования для захвата дальних отношений
  2. Конкретный канал: разные ядра для разных каналов

    • Преимущества: полное извлечение информации по разным каналам
    • Недостаток: избыточность

Размер ядра свертки B,CoutC_{out},CinC_{in},K,K

Involution

Отправной точкой инволюции является достижение свойства свертки с помощьюполностью противоположныйЯдро, называемое Inverted Convolution, именуемое Involution

  1. Пространственная специфика: ядро ​​приватизировано для другого положения

    В отличие от свертки, которая разделяет параметры в пространстве, инволюция генерирует отдельное ядро ​​для каждого пикселя.

  2. Инвариантность канала: ядро ​​​​распространяется по разным каналам.

    Используйте одно и то же ядро ​​для всех каналов

Размерности ядра инволюции: B, G, KK, H, W.

how to generate involution kernels

ядро, сгенерированное на основе карты входных признаков (воплощение внимания к себе), чтобы обеспечить соответствие размера ядра размеру входного тензора

Простая функция генерации ядра, на примере одного пикселя для удобства.

image-20210426192156487

  1. входы имеют размерность 1×1×C;
  2. Линейное преобразование: W_0: сжатие канала, сохранение вычислений; W_1: сначала стать 1×1×(K×K×G), затем разбить на группы G и, наконец, преобразовать в K×K×G; (сгенерированный объем Ядро продукта содержит информацию обо всех каналах в этом месте и оказывает определенное влияние на обмен информацией между разными каналами)
  3. Сгенерированное ядро ​​умножается и добавляется в поле (i,j).Поскольку размеры разные, его нужно транслировать, а размер k×k×C;
  4. Наконец, выполняется агрегация (суммирование по размерностям h, w), и размер вывода равен 1 × 1 × C.
 class Involution(nn.Module):
     def __init__(self, channel, group, kernel, s):
         super(Involution, self).__init__()
         self.channel = channel
         self.group = group
         self.kernel_size = kernel
         ratio=4
 ​
         self.o = nn.AvgPool2d(s, s) if s > 1 else nn.Identity()
         self.reduce = nn.Sequential(
             nn.Conv2d(channel, channel//ratio, 1),
             nn.BatchNorm2d(channel//ratio),
             nn.ReLU(inplace=True)
         )
         self.span = nn.Conv2d(channel//ratio, kernel**2*group, 1)
         # 从一个Batch中提取出卷积滑动的局部区域块,有点类似于im2col,较难理解,建议自行百度
         # 普通的卷积操作实际上就相当于将feature map unfold与conv kernel乘加之后再fold
         self.unfold = nn.Unfold(
             kernel_size=kernel, padding=(kernel-1)//2, stride=s)
 ​
     def forward(self, x):
         kernel = self.span(self.reduce(self.o(x)))  # B,KKG,H,W
         B, _, H, W = kernel.shape
         kernel = kernel.view(B, self.group, self.kernel_size **
                              2, H, W).unsqueeze(2)  # B,G,1,kk,H,W,unsqueeze:增加一个维度用于广播
         #这里的1体现通道不变性,kk表示在某个像素的邻域上计算
 ​
         x_unfolded = self.unfold(x)  # B,CKK,HW
         x_unfolded = x_unfolded.view(
             B, self.group, self.channel//self.group, self.kernel_size**2, H, W)# B,G,C/G,KK,H,W
         
         out = (kernel * x_unfolded).sum(dim=3)  # B,G,C/G,H,W,在每个像素的邻域上进行求和
         out = out.view(B, self.channel, H, W) # B,C,H,w
         return out
 ​

Involution vs Convolution

преимущество:

  1. Очень мало параметров и расчетов

    • Для Convolution его параметры:

      K2CinCoutK^2C_{in}C_{out}

      Сумма расчета составляет примерно:

      HWK2CinCoutHWK^2C_{in}C_{out}
    • Для Revolution его параметрами являются:

      C2+CGK2r\frac{C^2+CGK^2}{r}

      Сумма расчета составляет примерно:

      HWK2CHWK^2C

    Видно, что расчетное количество оборотов линейно связано с количеством каналов, и количество параметров не будет слишком сильно увеличиваться с увеличением размера ядра.

  2. Может эффективно моделировать отношения на расстоянии

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

  3. Революция динамическая, которая генерирует ядро ​​для каждой позиции, в то время как революция статична.

недостаток:

  1. Информационный обмен между каналами затронут в определенной степени

    Хотя одно и то же ядро ​​используется в одной и той же группе, обмен информацией между каналами разных групп все равно будет нарушен.

  2. По сравнению с Convolution скорость не имеет преимущества, оптимизация инволюции не так хороша, как у свертки, и нет соответствующей аппаратной поддержки, поэтому, хотя количество параметров и вычислений уменьшено, на самом деле она не такая быстрая, как Для написания инволюции автор рекомендует использовать CUDA.

Relation to Self-Attention

Самовнимание можно рассматривать как пример генерализованной инволюции.

Сходство с вниманием к себе можно увидеть:

image-20210427212347084

сходство:

  1. Среди них H может быть аналогичен G в обороте, то есть многоголовка аналогична группировке;
  2. Карту внимания каждой позиции во внимании к себе можно сравнить с ядром каждой позиции в революции.

разные:

  1. По сравнению с вниманием к себе, инволюция потенциально кодирует информацию о положении, а внимание к себе требует кодирования положения, чтобы различать информацию о положении.
  2. Больше нет необходимости использовать Q-K и полагаться только на один пиксель для создания ядра вместо того, чтобы полагаться на взаимосвязь между пикселями для создания карты внимания.

Резюме: Само-внимание — это воплощение Инволюции, а выражение Инволюции более широкое и краткое.

Ablantion Analysis

image-20210427213135224

можно увидеть:

  • Инволюция может увеличить восприимчивое поле и повысить производительность сети без значительного увеличения количества параметров и вычислений;
  • В случае значительного уменьшения объема вычислений и параметров потеря точности невелика.

считать

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

  1. Заменяемость свертки

    Оригинальная статья на самом деле не заменяет все свертки инволюцией, а использует гибридную структуру свертки-инволюции, Я думаю, что есть два сценария применения инволюции:

    1. Особенности имеют очевидные различия в пространственном расположении, и когда нам нужно уделить больше внимания отношениям на расстоянии, инволюция может быть хорошим выбором;
    2. засегментация экземпляраиПанорамная сегментация, Инволюция может быть эффективной, потому что одним из свойств свертки являетсятрансляционная инвариантностьСемантическая сегментацияВ отличие от сегментации экземпляра и сегментации панорамы, необходимо не только изучитьобщность, но и изучитьразницаЧтобы различать разные экземпляры, природа свертки затрудняет, например, сегментацию экземпляра и сегментацию панорамы для достижения полной свертки (Fully Convolutional Networks for Panoptic SegmentationИспользование полностью сверточной сети для панорамной сегментации, но на самом деле есть и динамические ядра), а инволюция генерирует уникальное ядро ​​для каждого пикселя, я считаю, что она может естественным образом различать и изучать различия внутри одной и той же категории.
  2. обучение и оптимизация

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

  3. Механизмы внимания и динамические ядра

    Хотя автор упомянул, что это похоже на внимание к себе, на самом деле инволюцию можно рассматривать не более чем как локальное внимание, а локальное внимание также является горячей точкой недавних исследований.VOLO: Vision Outlooker for Visual RecognitionЭто работа, очень похожая на Involution. В отличие от преобразователя, VOLO стремится выполнять усовершенствованное моделирование в окрестности пикселя. Преобразователь swin лучшей бумаги на самом деле является локальным вниманием и динамическим ядром.Demystifying Local Vision Transformer: Sparse Connectivity, Weight Sharing, and Dynamic WeightОбсудили локальное внимание, динамический вес и долю веса, доказав, что локальное внимание обладает способностью не терять внимание к себе.

  4. Как генерировать веса

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