Трансформатор зрения ( ViT ) — это преобразователь, разработанный для компьютерного зрения . [1] ViT разлагает входное изображение на ряд фрагментов (а не текст на токены ), сериализует каждый фрагмент в вектор и отображает его в меньшее измерение с помощью одного умножения матриц . Затем эти векторные вложения обрабатываются преобразователем -кодером так, как если бы они были вложениями токенов.
ViT были разработаны как альтернативы сверточным нейронным сетям (CNN) в приложениях компьютерного зрения. Они имеют другие индуктивные смещения, стабильность обучения и эффективность данных. [2] По сравнению с CNN, ViT менее эффективны в отношении данных, но имеют большую емкость. Некоторые из крупнейших современных моделей компьютерного зрения являются ViT, например, одна с 22B параметрами. [3] [4]
После его публикации было предложено много вариантов с гибридными архитектурами с функциями как ViT, так и CNN. ViT нашли применение в распознавании изображений , сегментации изображений и автономном вождении . [5] [6]
Трансформеры были представлены в Attention Is All You Need (2017), [7] и нашли широкое применение в обработке естественного языка . В статье 2019 года [8] идеи Трансформера были применены к компьютерному зрению. В частности, они начали с ResNet , стандартной сверточной нейронной сети, используемой для компьютерного зрения, и заменили все сверточные ядра механизмом самовнимания, найденным в Трансформере. Это привело к превосходной производительности. Однако это не Vision Transformer.
В 2020 году Transformer, работающий только на основе кодировщика, был адаптирован для компьютерного зрения, что привело к появлению ViT, который достиг уровня искусства в классификации изображений, превзойдя предыдущее доминирование CNN. [1] Маскированный автоэнкодер (2022) расширил ViT для работы с неконтролируемым обучением. Трансформатор зрения и маскированный автоэнкодер, в свою очередь, стимулировали новые разработки в сверточных нейронных сетях. [9] [10]
Впоследствии произошло перекрестное опыление между предыдущим подходом CNN и подходом ViT.
В 2021 году были предложены некоторые важные варианты Vision Transformers. Эти варианты в основном предназначены для того, чтобы быть более эффективными, более точными или лучше подходить для определенной области. Два исследования [11] [12] повысили эффективность и надежность ViT, добавив CNN в качестве препроцессора. Swin Transformer [13] достиг самых современных результатов в некоторых наборах данных обнаружения объектов, таких как COCO , используя механизм скользящих окон внимания, подобных свертке, и процесс пирамиды в классическом компьютерном зрении.
Базовая архитектура, используемая в оригинальной статье 2020 года [1] , выглядит следующим образом. Вкратце, это BERT-подобный энкодер-только Transformer.
Входное изображение имеет тип , где высота, ширина, канал ( RGB ). Затем оно разбивается на квадратные участки типа .
Для каждого патча патч проталкивается через линейный оператор, чтобы получить вектор («внедрение патча»). Положение патча также преобразуется в вектор с помощью «позиционного кодирования». Два вектора складываются, затем проталкиваются через несколько кодировщиков Transformer.
Механизм внимания в ViT многократно преобразует векторы представления фрагментов изображения, включая все больше и больше семантических связей между фрагментами изображения в изображении. Это аналогично тому, как в обработке естественного языка, по мере того как векторы представления проходят через трансформатор, они включают все больше и больше семантических связей между словами, от синтаксиса до семантики.
Вышеуказанная архитектура превращает изображение в последовательность векторных представлений. Чтобы использовать их для нисходящих приложений, необходимо обучить дополнительную голову их интерпретации.
Например, чтобы использовать его для классификации, можно добавить поверх него неглубокий MLP, который выводит распределение вероятностей по классам. В оригинальной статье используется линейная- GeLU -линейная-softmax сеть. [1]
Оригинальный ViT был только кодером Transformer, обученным под руководством для предсказания метки изображения из фрагментов изображения. Как и в случае BERT , он использует специальный токен <CLS>
на входной стороне, а соответствующий выходной вектор используется в качестве единственного входа конечной выходной головки MLP. Специальный токен является архитектурным хаком, позволяющим модели сжимать всю информацию, относящуюся к предсказанию метки изображения, в один вектор.
Трансформеры нашли свое первоначальное применение в задачах обработки естественного языка , как продемонстрировано такими языковыми моделями , как BERT и GPT-3 . Напротив, типичная система обработки изображений использует сверточную нейронную сеть (CNN). Известные проекты включают Xception, ResNet , EfficientNet , [14] DenseNet , [15] и Inception . [16]
Трансформаторы измеряют отношения между парами входных токенов (слов в случае текстовых строк), называемых вниманием . Стоимость квадратична по количеству токенов. Для изображений основной единицей анализа является пиксель . Однако вычисление отношений для каждой пары пикселей в типичном изображении является непомерно затратным с точки зрения памяти и вычислений. Вместо этого ViT вычисляет отношения между пикселями в различных небольших разделах изображения (например, 16x16 пикселей) с радикально сниженной стоимостью. Разделы (с позиционными вложениями) размещаются в последовательности. Вложения являются изучаемыми векторами. Каждый раздел организован в линейную последовательность и умножается на матрицу вложения. Результат с позиционным вложением подается в трансформатор. [16]
После того, как ViT обрабатывает изображение, он создает некоторые векторы встраивания. Они должны быть преобразованы в одноклассовое вероятностное предсказание с помощью какой-то сети. В оригинальном ViT и Masked Autoencoder они использовали фиктивный [CLS]
токен в эмуляции языковой модели BERT . Выходными данными в [CLS]
является токен классификации, который затем обрабатывается модулем LayerNorm -feedforward-softmax в распределение вероятностей.
Глобальное среднее объединение (GAP) не использует фиктивный токен, а просто берет среднее значение всех выходных токенов в качестве токена классификации. Это упоминалось в оригинальном ViT как одинаково хорошее. [1]
Многоголовое объединение внимания (MAP) применяет многоголовый блок внимания к объединению. В частности, он принимает в качестве входных данных список векторов , которые можно рассматривать как выходные векторы слоя ViT. Затем он применяет слой прямой связи к каждому вектору, что приводит к матрице . Затем это отправляется в многоголовое внимание, что приводит к , где — матрица обучаемых параметров. [17] Впервые это было предложено в архитектуре Set Transformer . [18]
Более поздние работы продемонстрировали, что GAP и MAP работают лучше, чем объединение по типу BERT. [17] [19] Вариант MAP был предложен как внимание к классу , который применяет MAP, затем прямую связь, затем снова MAP. [20]
Повторное внимание было предложено для обучения глубокому ViT. Оно изменяет многоголовый модуль внимания. [21]
Masked Autoencoder [22] черпал вдохновение из шумоподавляющих автокодеров и контекстных кодеров. [23] Он имеет два ViT, соединенных встык. Первый («кодер») принимает фрагменты изображения с позиционным кодированием и выводит векторы, представляющие каждый фрагмент. Второй (называемый «декодером», хотя он по-прежнему является только кодирующим Transformer) принимает векторы с позиционным кодированием и снова выводит фрагменты изображения. Во время обучения используются ViT как кодера, так и декодера. Во время вывода используется только ViT кодера.
Во время обучения каждое изображение разрезается на фрагменты и к ним добавляются их позиционные вложения. Из них выбираются только 25% фрагментов. Кодер ViT обрабатывает выбранные фрагменты. Токены маски не используются. Затем токены маски добавляются обратно, а позиционные вложения добавляются снова. Они обрабатываются декодером ViT, который выводит реконструкцию полного изображения. Потеря представляет собой общую среднеквадратичную потерю в пиксельном пространстве для всех замаскированных фрагментов (потери реконструкции не вычисляются для незамаскированных фрагментов).
Подобная архитектура была BERT ViT (BEiT), опубликованная одновременно. [24]
Как и Masked Autoencoder, метод DINO (самостоятельная дистилляция без меток ) является способом обучения ViT с помощью самоконтроля . [25] DINO является формой самодистилляции учителя и ученика . В DINO ученик сам является моделью, а учитель — экспоненциальное среднее прошлых состояний ученика. Метод похож на предыдущие работы, такие как контраст импульса [26] и самонастройка латентности (BYOL). [27]
Функция потерь, используемая в DINO, — это кросс-энтропийная потеря между выходом сети учителя ( ) и выходом сети ученика ( ). Сеть учителя — это экспоненциально затухающее среднее прошлых параметров сети ученика: . Входы сетей — это два разных кадра одного и того же изображения, представленные как и , где — исходное изображение. Функция потерь записывается как Одна из проблем заключается в том, что сеть может «схлопнуться», всегда выдавая одно и то же значение ( ), независимо от входных данных. Чтобы предотвратить этот коллапс, DINO использует две стратегии:
В январе 2024 года Meta AI Research выпустила обновленную версию под названием DINOv2 [28] с улучшениями в архитектуре, функции потерь и методе оптимизации. Она была обучена на большем и более разнообразном наборе данных. Функции, изученные DINOv2, были более переносимыми , что означало, что она имела лучшую производительность в задачах ниже по потоку.
Swin Transformer (« Смещенные окна » ) [13] черпал вдохновение из стандартных CNN:
Он улучшен с помощью Swin Transformer V2 [29] , который модифицирует ViT с помощью другого механизма внимания [13] : Рисунок 1 :
TimeSformer [30] был разработан для задач понимания видео, и он применял факторизованное внутреннее внимание, похожее на факторизованные ядра свертки, найденные в архитектуре Inception CNN. [31] Схематически, он делит видео на кадры, а каждый кадр на квадратную сетку патчей (такую же, как ViT). Пусть каждая координата патча будет обозначена как , обозначая горизонталь, вертикаль и время.
TimeSformer также рассматривал другие конструкции слоев внимания, такие как «высотный слой внимания», где требованием является . Однако они эмпирически обнаружили, что лучшая конструкция чередует один пространственный слой внимания и один временной слой внимания.
В ViT-VQGAN [ 32] есть два кодировщика ViT и дискриминатор. Один кодирует 8x8 фрагментов изображения в список векторов, по одному для каждого фрагмента. Векторы могут поступать только из дискретного набора «кодовой книги», как при векторном квантовании . Другой кодирует квантованные векторы обратно в фрагменты изображения. Цель обучения пытается сделать изображение реконструкции (выходное изображение) верным входному изображению. Дискриминатор (обычно сверточная сеть, но разрешены и другие сети) пытается решить, является ли изображение исходным реальным изображением или изображением, реконструированным ViT.
Идея по сути та же самая, что и у векторного квантованного вариационного автокодировщика (VQVAE) и генеративно-состязательной сети (GAN).
После обучения такого ViT-VQGAN его можно использовать для кодирования произвольного изображения в список символов и кодирования произвольного списка символов в изображение. Список символов можно использовать для обучения в стандартный авторегрессионный преобразователь (вроде GPT) для авторегрессионной генерации изображения. Далее, можно взять список пар подпись-изображение, преобразовать изображения в строки символов и обучить стандартный преобразователь в стиле GPT. Затем во время тестирования можно просто дать подпись к изображению и заставить его авторегрессионно сгенерировать изображение. Это структура Google Parti. [33]
Другие примеры включают визуальный преобразователь, [34] CoAtNet, [35] CvT, [36] эффективный по данным ViT (DeiT) [37] и т. д.
В архитектуре Transformer in Transformer каждый слой применяет слой Vision Transformer к каждому внедрению фрагмента изображения, добавляет полученные токены обратно к внедрению, затем применяет еще один слой Vision Transformer. [38]
Обычно ViT использует размеры патчей больше, чем стандартные ядра CNN (от 3x3 до 7x7). ViT более чувствителен к выбору оптимизатора, гиперпараметров и глубины сети. Предварительная обработка с помощью слоя перекрывающихся сверточных фильтров меньшего размера (шаг < размер) помогает повысить производительность и стабильность. [12]
Такое различное поведение, по-видимому, обусловлено различными индуктивными предубеждениями, которыми они обладают.
CNN применяет тот же набор фильтров для обработки всего изображения. Это позволяет им быть более эффективными в отношении данных и менее чувствительными к локальным возмущениям. [2] ViT применяет внутреннее внимание, что позволяет им легко улавливать долгосрочные связи между патчами. Им также требуется больше данных для обучения, но они могут поглощать больше обучающих данных по сравнению с CNN, которая может не улучшиться после обучения на достаточно большом обучающем наборе данных. ViT также кажется более устойчивым к входным искажениям изображения, таким как состязательные патчи или перестановки. [39]
ViT использовались во многих задачах компьютерного зрения с превосходными результатами, а в некоторых случаях даже на современном уровне. Классификация изображений , Обнаружение объектов , Обнаружение видео Deepfake , [40] Сегментация изображений , [41] Обнаружение аномалий , Синтез изображений , Кластерный анализ , Автономное вождение . [5] [6]
ViT использовался для генерации изображений в качестве основы для GAN [42] и для диффузионных моделей (диффузионный трансформатор или DiT). [43]
Было продемонстрировано, что DINO [25] изучает полезные представления для кластеризации изображений и изучения морфологических профилей в биологических наборах данных, таких как изображения, полученные с помощью анализа клеточной живописи . [44]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )