Swin Transformer V1 и V2 — лучшие модели компьютерного зрения не на основе CNN
Революционные сети компьютерного зрения, которые НЕ основаны на CNN. V2 еще больше улучшила V1 и превзошла сети SOTA по точности и скорости. Полное объяснение.
Зачем нужны трансформеры в компьютерном зрении?
Трансформеры широко используются в операциях, связанных с обработкой естественного языка (Natural Language Processing. NLP), а в последнее время также часто применяются во многих задачах компьютерного зрения, поскольку они моделируют глобальные и действующие на дальнем расстоянии связи, а также семантическую информацию изображений лучше, чем CNN, поскольку последняя является более локализованной.
Swin Transformer (V1)
В 2021 году Лю (Liu) и др. предложили Swin (Shifted WINdow — Сдвинутое окно) Transformer — трансформер общего назначения, адаптированный под задачи компьютерного зрения (общее назначение означает, что он подходит для различных задач компьютерного зрения, таких как семантическая сегментация и классификация изображений), который достиг более высоких показателей, чем популярные ViT (Vision Transformer от Google) и self-attention архитектуры на основе CNN.
Почему он лучше? Ответ, по сути, кроется в инновационной конструкции "Shifted Window", как показано на рис. 1. Это основной строительный блок Swin Transformer.
Процедура
Во-первых, для входного изображения (или карты признаков) сеть создает локальное окно. По умолчанию размер окна должен быть равен 1/4 размера изображения (как это показано красными рамками на рис. 1).
Во-вторых, в смещенном окне делаются дальнейшие разделения для создания более мелких патчей. Обычно это 4x4x3=16x3=48 патчей, 3 — количество каналов в RGB-изображении. Каждый патч рассматривается в качестве "токена" (в NLP, например, токенами в предложении "I disliked games — Мне не понравились игры" могут быть ['I', 'dis', 'liked', 'games']). Затем слой линейного эмбеддинга преобразует каждый токен в эмбеддинг-вектор, чтобы трансформер смог его понять.
В-третьих, эмбеддинги подаются в два последовательных блока Swin Transformer, как показано на рис. 2. На рисунке приведено несколько сокращенных модулей:
LN: нормализация слоя.
W-MSA: Обычное оконное множественное внутреннее внимание (multi-headed self-attention).
SW-MSA: множественное внутреннее внимание со сдвинутым окном.
MLP: многослойный перцептрон (несколько полностью связанных слоев).
Для модуля SW-MSA, который также является операцией слоя (l+1), показанного справа на рис. 1, используется другая схема разделения, как показано на рис. 3 ниже.
Две схемы разделения окон работают вместе, чтобы осуществить связи между соседними окнами, и это оказалось эффективным для различных задач.
На рис. 4 показано, как рассчитывается self-attention. По сравнению с обычным self-attention, единственным отличием является добавление матрицы смещения "B" формы (mm, mm), где m*m — количество патчей в окне.
B здесь представляет относительное положение патчей, поэтому позиционная информация по патчам также закодирована в модели.
Сравнение с Vision Transformer
На рис. 5 показан обычный строительный блок vision Transformer. Как видите, строительный блок Swin Transformer и обычного vision Transformer во многом схожи по вводу (Norm = LN). Их различия заключаются в механизмах self-attention (Swin Transformer использует Shifted Window с модифицированным self-attention) и Swin Transformer использует две конфигурации окон для входного изображения.
Кроме того, стандартные архитектуры трансформеров ищут взаимосвязи между токеном (патчем изображения) и ВСЕМИ другими токенами (патчами изображения) во всем изображении, что приводит к чрезвычайно дорогостоящим вычислениям, особенно для больших картинок.
Однако Swin Transformer использует конструкцию Shifted Window, которая ищет связи только между токенами в оконной области, используя две разные конфигурации окон для установления соединений между окнами и сдвигая окна, чтобы инкапсулировать все изображение. Таким образом, эффективность вычислений значительно повышается.
Swin Transformer (V2)
Прежде чем подробно рассказать о Swin Transformer V2, следует разобраться в недостатках Swin Transformer V1.
Нестабильное обучение
Это в значительной степени вызвано тем, что сетевых активаций на более поздних уровнях модели значительно больше, чем в ранних, из-за того, что выходные данные остатка снова напрямую добавляются в основную ветвь, что приводит к нестабильному обучению.
Для решения первой проблемы слой нормализации (Layer Normalization, LN) перемещается с начала в конец блока остатка, как показано на рис. 6. Более того, масштабированное косинусное внимание (scaled cosine attention) заменяет версию self-attention в V1 с матричным умножением, чтобы сделать модель абсолютно нечувствительной к величине (большому количеству) активаций.
Два решения первой проблемы успешно улучшили стабильность обучения и точность модели для больших размеров.
Несоответствие размеров изображений при предварительном и последующем обучении
Размеры изображений для предварительного обучения и точной настройки (последующего обучения) сильно отличаются. В настоящее время широко практикуется наивное изменение размеров с помощью бикубической интерполяции. Однако этого недостаточно.
Для решения этой проблемы авторы использовали новую систему координат — логарифмически разнесенные координаты (log-spaced coordinates), заменив ими прежние линейные. Поэтому перед подачей в сеть изображения сначала преобразуются в эту новую систему координат. Новая система координат значительно сократила разрыв между предварительным обучением и точной настройкой расхождения в размерах изображений, что объясняется самой природой логарифмической функции.
Кроме того, для решения проблемы высокого потребления памяти GPU в результате увеличения масштаба сети, был реализован ряд методов, включая нулевой оптимизатор, чекпойнт активации и последовательное вычисление self-attention (это не будет описано в данной статье).
Статистика моделей
Как видно из таблицы, предложены два варианта V1 и три варианта V2 различных размеров. V2 успешно улучшил производительность V1 и достиг результатов, близких к SOTA, обеспечив более эффективные вычисления на ImageNet.
Хотите стать специалистом по компьютерному зрению и глубокому обучению? Сделайте свои первые шаги, а если вы уже опытный специалист, то узнайте, как перейти с PyTorch 1.x на 2.0. Приглашаем всех желающих на открытое занятие, на котором мы обсудим, что нового принес фреймворк PyTorch 2.0 в сферу компьютерного зрения и глубокого обучения. Вы узнаете:
Как начать использовать PyTorch для обучения своих нейронных сетей
Что нового в PyTorch 2.0 и чем он отличается от 1.x
Как ускорить и оптимизировать свою нейросеть при помощи одной строчки кода
Как перейти с PyTorch 1.x на 2.0
Как ускорить трансформеры HuggingFace при помощи PyTorch Transformer API
Записаться на занятие можно на странице курса «Компьютерное зрение».