Модуль Convolutional Block Attention Module (CBAM) представляет собой модуль механизма внимания plug-and-play, который сочетает в себе пространственное и канальное внимание. По сравнению с механизмом внимания SENet, который обращает внимание только на канал (channel), он позволяет добиться лучших результатов.
Название бумаги:CBAM: Convolutional Block Attention Module
Авторы: Санхьюн Ву, Чончан Пак, Джун-Ён Ли и Ин Со Квеон, Корейский передовой институт науки и технологий, Тэджон, Корея.
Резюме
- CBAM (Convolutional Block Attention Moudule) — простой и эффективныйпрямая связьМодуль внимания сверточной нейронной сети.
- Этот модуль последовательно выводит карты внимания как из канальных, так и из пространственных аспектов для механизма внимания смешанного домена.
- CBAM — это легкий общий модуль, который можно легко интегрировать в любую CNN.
Ключевые слова: распознавание объектов, механизм внимания, закрытая свертка.
вводить
- Сверточные нейронные сети (CNN) значительно улучшили производительность задач зрения на основе их богатых выразительных возможностей.В настоящее время в основном речь идет о трех важных факторах сети:глубина, ширина и основание(Кардинальность).
- От LeNet к остаточной сети сеть стала глубже, а форма выражения богаче; GoogLeNet показывает, что ширина является еще одним важным фактором для повышения производительности модели; Xception и ResNext увеличиваюткардинальностьПри сохранении параметров способность достичь относительно глубины, ширина ширины (на ссылках на бумагу Resnext).
- В дополнение к этим факторам в этой статье рассматриваются различные аспекты проектирования сетевой структуры — внимание.
механизм внимания
- Внимание играет важную роль в восприятии человека. Важным свойством зрительной системы человека является то, что она не пытается обработать всю сцену сразу, а вместо этого использует последовательность частичных проблесков, чтобы привлечь внимание к существенным частям.
- В последние годы были предприняты некоторые попытки добавить в CNN механизмы внимания, такие как сеть остаточного внимания с использованием структурного модуля внимания Endcoder-Decoder и SEnet с использованием модуля «Сжатие-возбуждение».
- конкретный видимыймеханизм внимания
CBAM
весь кадр
-
CBAM вводит механизм внимания в смешанной области (область канала, область пространства) и обладает более сильными выразительными способностями;
-
Весь процесс можно резюмировать так:
где F — вход модуля,,представляет карту внимания канала и пространственную карту внимания,Представляет поэлементное умножение, которое будет транслироваться соответствующим образом в конкретном процессе реализации.
Channel attention module
Используйте взаимосвязь между каналами для создания карты внимания канала (карты внимания канала), которую можно увидеть в деталях.механизм внимания
Внимание канала в основном сосредотачивается на том, «что» из изображения является более значимым.
Процесс реализации:
- сделать вводглобальный средний пулиглобальное максимальное объединениеагрегировать информацию в пространстве;
- черезобщийMLP (Multilayer Perceptron) (для конкретной реализации доступен сверточный слой 1X1), для уменьшения количества каналов в параметре hidden layer установлено значениеПосле первого слоя ставится функция ReLU для внесения нелинейности (аналогично SENet, эта структура появляется в различных сетях, одна из функций - уменьшить количество параметров и расчета, вторая - получить более нелинейную линейность) ;
- После соответствующего суммирования пройдите слой ReLU, чтобы получить окончательную карту внимания канала.
- Умножьте его на ввод (трансляция производится автоматически).
Код для воспроизведения:
class Channel_module(nn.Module):
def __init__(self, in_ch, ratio=16):
super(Channel_module, self).__init__()
self.gap = nn.AdaptiveAvgPool2d(1)
self.fc1 = nn.Conv2d(in_ch, in_ch//ratio, 1, bias=False)
self.relu = nn.ReLU(inplace=True)
self.fc2 = nn.Conv2d(in_ch//ratio, in_ch, 1, bias=False)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
a = self.fc2(self.relu(self.fc1(self.gap(x))))
m = self.fc2(self.relu(self.fc1(self.gap(x))))
attention = self.sigmoid(a + m)
return x*attention
Spatial attention module
Используйте отношения между пространствами для создания пространственной карты внимания (карты пространственного внимания)
Пространственное внимание в основном фокусируется на том, «где» находится важная информация, и дополняет внимание канала.
Процесс реализации:
- Усреднение максимального пула и пулинга по измерению канала соответственно, а затем конкат;
- После сверточного слоя 7X7 количество каналов уменьшается до 1;
- сигмовидная функция;
- Он умножается на входные данные, то есть на функцию уточнения канала предыдущего слоя.
Код для воспроизведения:
class Spatial_module(nn.Module):
def __init__(self, kernel_size=7):
super(Spatial_module, self).__init__()
self.conv = nn.Conv2d(2, 1, kernel_size, padding=3,
bias=False) # 使用padding保持大小不变
self.sigmoid = nn.Sigmoid()
def forward(self, x):
a = torch.mean(x, dim=1, keepdim=True) # 沿着channel维度计算均值和最大值
m, _ = torch.max(x, dim=1, keepdim=True)
attention = torch.cat([a, m], dim=1)
attention = self.sigmiod(self.conv(attention))
return attention*x
Arrangement of attention modules.
Вышеупомянутые два модуля внимания вычисляют дополнительное внимание, и, учитывая это, два модуля могут быть расположены параллельно или последовательно. Эксперименты показывают, что последовательное расположение работает лучше, чем параллельное, где приоритет канала немного лучше, чем пространственный приоритет.
Абляционные исследования
Команда авторов сначала искала эффективные способы вычисления внимания канала, а затем пространственного внимания. Наконец, подумайте, как объединить модуль внимания канала и модуль пространственного внимания.
Channel attention
Команда авторов сравнила 3 разных уровня внимания каналов: средний пул, максимальный пул и комбинированное использование обоих пулов.
Как видите, максимальный пул так же важен, как и средний пул, в то время как SENet игнорирует важность максимального пула.
Функции максимального пула, которые кодируют существенные части, могут компенсировать функции среднего пула, которые программно кодируют глобальную информацию..
При изучении пространственного внимания функции максимального и среднего объединения будут использоваться напрямую, а R установлено равным 16.
Spatial attention
Коллектив авторов рассмотрел две схемы пространственного внимания:Один из них — использовать средний пул и максимальный пул в измерении канала, а другой — использовать свертку 1X1 для уменьшения размерности.. Кроме того, исследуются эффекты сверточных ядер 3X3 и 7X7. В эксперименте модуль пространственного внимания размещается после модуля внимания канала.
Можно видеть, что объединение каналов работает лучше, и в то же время использование более крупных ядер приводит к большей точности, а это означает, что для определения пространственно важных областей требуется большее рецептивное поле.
Arrangement of the channel and spatial attention.
Команда авторов рассмотрела три различные схемы расположения модулей: канал-сначала, пространство-сначала и параллельно.
Видно, что эффект приоритета канала лучше.