«Это второй день моего участия в первом испытании обновлений 2022 года. Подробную информацию о мероприятии см.:Вызов первого обновления 2022 г.".
Название бумаги:Involution: Inverting the Inherence of Convolution for Visual Recognition
Авторы: Дуо Ли, Цзе Ху, Чанху Ван, Сянтай Ли, Ци Шэ, Лэй Чжу, Тонг Чжан, Цифэн Чен
Вопреки природе свертки, само-внимание в широком смысле: «внутренний объем», который можно моделировать на больших расстояниях, уменьшить избыточность информации канала и добиться производительности SOTA.
Convolution
Свертка обладает следующими свойствами
-
пространственный агностик: одно и то же ядро для другой позиции
- Преимущества: совместное использование параметров, эквивалент перевода
- Недостатки: нельзя гибко изменять параметры, размер ядра свертки не может быть слишком большим, а рецептивное поле можно расширить только за счет стекирования для захвата дальних отношений
-
Конкретный канал: разные ядра для разных каналов
- Преимущества: полное извлечение информации по разным каналам
- Недостаток: избыточность
Размер ядра свертки B,,,K,K
Involution
Отправной точкой инволюции является достижение свойства свертки с помощьюполностью противоположныйЯдро, называемое Inverted Convolution, именуемое Involution
-
Пространственная специфика: ядро приватизировано для другого положения
В отличие от свертки, которая разделяет параметры в пространстве, инволюция генерирует отдельное ядро для каждого пикселя.
-
Инвариантность канала: ядро распространяется по разным каналам.
Используйте одно и то же ядро для всех каналов
Размерности ядра инволюции: B, G, KK, H, W.
how to generate involution kernels
ядро, сгенерированное на основе карты входных признаков (воплощение внимания к себе), чтобы обеспечить соответствие размера ядра размеру входного тензора
Простая функция генерации ядра, на примере одного пикселя для удобства.
- входы имеют размерность 1×1×C;
- Линейное преобразование: W_0: сжатие канала, сохранение вычислений; W_1: сначала стать 1×1×(K×K×G), затем разбить на группы G и, наконец, преобразовать в K×K×G; (сгенерированный объем Ядро продукта содержит информацию обо всех каналах в этом месте и оказывает определенное влияние на обмен информацией между разными каналами)
- Сгенерированное ядро умножается и добавляется в поле (i,j).Поскольку размеры разные, его нужно транслировать, а размер k×k×C;
- Наконец, выполняется агрегация (суммирование по размерностям 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
преимущество:
-
Очень мало параметров и расчетов
-
Для Convolution его параметры:
Сумма расчета составляет примерно:
-
Для Revolution его параметрами являются:
Сумма расчета составляет примерно:
Видно, что расчетное количество оборотов линейно связано с количеством каналов, и количество параметров не будет слишком сильно увеличиваться с увеличением размера ядра.
-
-
Может эффективно моделировать отношения на расстоянии
По сравнению со сверткой ядро инволюции может использовать ядро свертки большего размера без слишком большого увеличения его параметров, и его рецептивное поле будет больше.
-
Революция динамическая, которая генерирует ядро для каждой позиции, в то время как революция статична.
недостаток:
-
Информационный обмен между каналами затронут в определенной степени
Хотя одно и то же ядро используется в одной и той же группе, обмен информацией между каналами разных групп все равно будет нарушен.
-
По сравнению с Convolution скорость не имеет преимущества, оптимизация инволюции не так хороша, как у свертки, и нет соответствующей аппаратной поддержки, поэтому, хотя количество параметров и вычислений уменьшено, на самом деле она не такая быстрая, как Для написания инволюции автор рекомендует использовать CUDA.
Relation to Self-Attention
Самовнимание можно рассматривать как пример генерализованной инволюции.
Сходство с вниманием к себе можно увидеть:
сходство:
- Среди них H может быть аналогичен G в обороте, то есть многоголовка аналогична группировке;
- Карту внимания каждой позиции во внимании к себе можно сравнить с ядром каждой позиции в революции.
разные:
- По сравнению с вниманием к себе, инволюция потенциально кодирует информацию о положении, а внимание к себе требует кодирования положения, чтобы различать информацию о положении.
- Больше нет необходимости использовать Q-K и полагаться только на один пиксель для создания ядра вместо того, чтобы полагаться на взаимосвязь между пикселями для создания карты внимания.
Резюме: Само-внимание — это воплощение Инволюции, а выражение Инволюции более широкое и краткое.
Ablantion Analysis
можно увидеть:
- Инволюция может увеличить восприимчивое поле и повысить производительность сети без значительного увеличения количества параметров и вычислений;
- В случае значительного уменьшения объема вычислений и параметров потеря точности невелика.
считать
Involution на самом деле предлагает парадигму динамических ядер, но я мало что знаю о связанной с этим работе, поэтому давайте напишем некоторые мысли, прочитав статью.
-
Заменяемость свертки
Оригинальная статья на самом деле не заменяет все свертки инволюцией, а использует гибридную структуру свертки-инволюции, Я думаю, что есть два сценария применения инволюции:
- Особенности имеют очевидные различия в пространственном расположении, и когда нам нужно уделить больше внимания отношениям на расстоянии, инволюция может быть хорошим выбором;
- засегментация экземпляраиПанорамная сегментация, Инволюция может быть эффективной, потому что одним из свойств свертки являетсятрансляционная инвариантность,иСемантическая сегментацияВ отличие от сегментации экземпляра и сегментации панорамы, необходимо не только изучитьобщность, но и изучитьразницаЧтобы различать разные экземпляры, природа свертки затрудняет, например, сегментацию экземпляра и сегментацию панорамы для достижения полной свертки (Fully Convolutional Networks for Panoptic SegmentationИспользование полностью сверточной сети для панорамной сегментации, но на самом деле есть и динамические ядра), а инволюция генерирует уникальное ядро для каждого пикселя, я считаю, что она может естественным образом различать и изучать различия внутри одной и той же категории.
-
обучение и оптимизация
В отличие от свертки, инволюция на самом деле является оптимизацией второго порядка (многие динамические ядра являются оптимизацией второго порядка, например), оптимизировать нужно не ядро, а параметры в функции генерации ядра, что вызовет много проблем (у недавнего трансформера тоже много проблем в процессе оптимизации), автор предлагает использовать такие методы, как отсечение градиента, для лучшей оптимизации для некоторых сетей.
-
Механизмы внимания и динамические ядра
Хотя автор упомянул, что это похоже на внимание к себе, на самом деле инволюцию можно рассматривать не более чем как локальное внимание, а локальное внимание также является горячей точкой недавних исследований.VOLO: Vision Outlooker for Visual RecognitionЭто работа, очень похожая на Involution. В отличие от преобразователя, VOLO стремится выполнять усовершенствованное моделирование в окрестности пикселя. Преобразователь swin лучшей бумаги на самом деле является локальным вниманием и динамическим ядром.Demystifying Local Vision Transformer: Sparse Connectivity, Weight Sharing, and Dynamic WeightОбсудили локальное внимание, динамический вес и долю веса, доказав, что локальное внимание обладает способностью не терять внимание к себе.
-
Как генерировать веса
В этой статье предлагается только простой метод генерации, и можно изучить другие методы генерации весов, такие как различные разреженные соединения и режимы распределения веса.