Attention in CV: Spatial Attention
Spatial attention
В отличие от поканального механизма внимания пространственный механизм учится оценивать важность различных областей в картах признаков: важным для решения задачи регионам изображения он придает больший вес, неважным или шумным регионам — меньший.
Существует огромное количество вариантов пространственного механизма внимания, но все они так или иначе могут быть отнесены к одной из следующих категорий:
- Основанные на RNN: RAM, GlimpseNet, DRAW, etc.;
- Предсказывающие релевантные регионы явно: STN, DCN, DCNv2, etc.;
- Основанные на self-attention механизме:
Обзор всевозможных групп и подгрупп не представляется возможным, поэтому мы остановимся на самом интересном и хайповом варианте — на визуальных трансформерах. Они основаны на механизме self-attention.
Подробный разбор базового визуального трансформера мы представим в следующей статье, посвященной архитектуре ViT.
Self-attention
Self-attention в компьютерном зрении имеет много различных вариантов реализации, но основная его задача — выделение важных областей вдоль осей H и W на изображении или карте признаков. Поэтому его и причисляют к пространственному механизму внимания. В общем случае self-attention в компьютерном зрении задается следующим образом:
Представим — у нас есть изображение или карта признаков
\( 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.
В работе 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. А обо всех подробностях расскажем вам в следующей нашей публикации.