Назад
59

Attention in CV: Spatial Attention

59

Spatial attention

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

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

  1. Основанные на RNN: RAMGlimpseNetDRAW, etc.;
  2. Предсказывающие релевантные регионы явно: STNDCNDCNv2, etc.;
  3. Основанные на self-attention механизме:
    1. Эффективный self-attention: CCNetEMANet, etc.;
    2. Локальный self-attention: SASASAN, etc.;
    3. Визуальные трансформеры: DETRViT, etc.

Обзор всевозможных групп и подгрупп не представляется возможным, поэтому мы остановимся на самом интересном и хайповом варианте — на визуальных трансформерах. Они основаны на механизме self-attention.

Подробный разбор базового визуального трансформера мы представим в следующей статье, посвященной архитектуре ViT.

Self-attention

Self-attention в компьютерном зрении имеет много различных вариантов реализации, но основная его задача — выделение важных областей вдоль осей H и W на изображении или карте признаков. Поэтому его и причисляют к пространственному механизму внимания. В общем случае self-attention в компьютерном зрении задается следующим образом:

Представим — у нас есть изображение или карта признаков \( F \in \mathbb{R}^{C \times H \times W} \). Тогда self-attention сначала вычисляет некоторые сущности \( Q-queries, K-keys, V-values \), такие, что \( Q, K, V \in \mathbb{R}^{C\ rq \times N}, N = H \times W \) (о них мы вам рассказывали в предыдущих постах) с помощью линейных проекций или операций решейпинга. А после этого производит вычисление самих attention-score’ов и взвешивание:

\( A = (a)_{i,j} = Softmax(QK^{T})\\ Y = AV \)

где \( A \in \mathbb{R}^{N \times N} \) — матрица attention-score’ов, в которой \( a_{i,j} \) некоторым образом характеризует важность взаимосвязи между элементом \( i \) и элементом \( j \). Элементами \( i \) и \( j \) могут быть совершенно разные вещи:

  • Некоторые пиксели — тогда attention-score’ы строятся по всему изображению и обозначают некоторую важность отношения между этими пикселями;
  • Пиксели внутри одного патча (прямоугольной области) из изображения — тогда attention-score’ы строятся по всем пикселям одного этого патча и обозначают некоторую важность отношения между этими пикселями внутри одного патча;
  • Пиксели из разных патчей из изображения — тогда attention-score’ы строятся по всем пикселям двух разных патчей из одного и того же изображения и обозначают некоторую важность отношения между пикселями разных патчей;
  • Элементы карты признаков — тогда attention-score’ы строятся по всем элементам какой-то карты признаков и обозначают некоторую важность отношения между этими элементами.

Разные реализации механизма self-attention подразумевают разные сущности, поверх которых строятся векторы \( Q, K, V \). Поэтому обязательно обращайте внимание в статьях на то, для каких сущностей считаются attention-score’ы.

Вам, наверное, интересно: почему этот механизм называется self — attention? Слово self в данном случае означает, что все сущности \( Q, K, V \) получены из одного и того же источника \( F \). Можно ли сделать по-другому? Да, конечно. Например, так: cross-attention.

Efficient self-attention

У self-attention есть один существенный недостаток — он имеет квадратичную сложность подсчета. Поэтому основные работы по “улучшению” self-attention связаны именно с уменьшением этой сложности, что порождает подвид efficient self-attention:

  • Работа CCNet предлагает рассматривать механизм self-attention как операцию свертки над графом, заменяя привычный self-attention, работающий с полносвязным графом, на criss-cross attention, который работает с несколькими разреженными графами. Этот трюк позволяет уменьшить сложность с \( O(N^2) \) до \( O(N \sqrt N) \);
  • Работа EMANet предлагает смотреть на self-attention с позиции EM-алгоритмов. Эта работа представляет свой вариант self-attention — Expectation-Maximization attention (EM-attention). Он адаптирует EM-алгоритм для поиска компактного множества базисных векторов для отображения. Это позволяет снизить сложность с \( O(N^2) \) до \( O(NK) \), где \( K \) — число новых базисных векторов.

Local self-attention

Существует еще один подвид self-attention механизма в компьютерном зрении — local self-attention. Мотивацией для создания этого подвида послужило то, что сам по себе механизм self-attention может также быть использован для агрегации информации в некотором окне. Например, вам хорошо известно, что операцию свертки можно представить как скалярное произведение между некоторой картой признаков \( X \) с некоторым ядром \( W \). Так вот, оказывается, self-attention можно применять почти также: давайте ходить некоторым окном по карте признаков и внутри такого окна считать свои локальные \( Q, K, V \) сущности и по ним считать локальный self-attention для окна так, как это схематически показано на рисунке 1.

Рисунок 1. Схема работы local self-attention

В работе SASA как раз и предлагают заменить операцию свертки на операцию локального self-attention’a. В статье авторы показывают: такая замена увеличивает не только скорость инференса, но и метрики на ImageNet, если преобразовать ванильный ResNet с помощью их локального self-attention. Вообще, статью о методе SASA крайне рекомендуем к прочтению.

Теперь, когда вы имеете представление о том, что такое self-attention и что такое \( Q, K, V \), можно перейти к конкретному варианту реализации self-attention в компьютерном зрении. Рассмотрим это на примере нашумевшей в 2020 году статьи An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale. А обо всех подробностях расскажем вам в следующей нашей публикации.

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!