- PVSM.RU - https://www.pvsm.ru -

Тихая революция и новый дикий запад в ComputerVision

Тихая революция и новый дикий запад в ComputerVision - 1

Казалось бы, революция с Computer Vision уже была. В 2012 году выстрелили алгоритмы основанные на сверточных нейронных сетях [1]. Года с 2014 они дошли до продакшна, а года с 2016 заполонили все [2]. Но, в конце 2020 года прошел новый виток. На этот раз не за 4 года, а за один. поговорим о Трансформерах в ComputerVision. В статье будет обзор новинок, которые появились в последний год. Если кому-то удобнее, то статья доступна [3]в виде видео на youtube.

Трансформеры [4]- это такой тип нейронных сетей, созданных в 2017 году. Изначально, они использовались для переводов [5]:

Тихая революция и новый дикий запад в ComputerVision - 2

Но, как оказалось, работали просто как универсальная модель языка. И пошло-поехало. Собственно, известная GPT-3 [6] - порождение трансформеров.

А что с ComputerVision?
А вот тут все интересненько. Не сказать, что трансформеры хорошо подходят для таких задач. Все-таки временные ряды, да к тому же одномерные. Но уж больно хорошо работают в других задачах. В своем рассказе я пройдусь по наиболее ключевым работам, интересным местам их приложения. Постараюсь рассказать про разные варианты как трансформеры смогли запихать в CV.

DETR

На дворе 2020. Поперло. С чего? Тут сложно сказать. Но мне кажется, надо начать с DETR [7] (End-to-End Object Detection with Transformers), который вышел в мае 2020 года. Тут Трансформеры применяются не к изображению, а к фичам выделенным сверточной сетью:

Тихая революция и новый дикий запад в ComputerVision - 3

В таком подходе нет особой новизны, ReInspect [8]в 2015 делал что-то похожее, подавая выход BackBone сети на вход рекуррентной нейронной сети. Но на сколько рекуррентная сеть хуже чем Трансформер - настолько же ReInspect проигрывал Detr. Точность и удобство обучения для трансформеров выросло в разы. 

Конечно, есть пара забавных штук, которых до DETR никто не делал (например как реализуется позиционное кодирование, которое необходимо для трансформера). Я описал свои впечатления тут [9].
Могу лишь добавить, что DETR открыл путь к возможности использования трансформеров для ComputerVision. Использовали ли его на практике? Работает ли он сейчас? Не думаю:

  1. Основная его проблема - сложность обучение, большое время обучения.  Частично эту проблему решил Deformable DETR [10].

  2. DETR не универсальный. Есть задачи где работают лучше другие подходы. Например тот же iterdet [11]. Но в каких-то задачах лидерство держит до сих пор (или его производные - https://paperswithcode.com/sota/panoptic-segmentation-on-coco-panoptic [12] ).

    Тихая революция и новый дикий запад в ComputerVision - 4

Сразу после DETR вышел Visual Transformer (статья [13]+ неплохой обзор [14]) для классификации. Тут трансформеры тоже берут выходной Feature map с стандартного backbone:

Тихая революция и новый дикий запад в ComputerVision - 5

Я бы не назвал Visual Transformer большим шагом, но это характерная для тех времен мысль. Попробовать применить трансформер к тем или иным выделенным через backbone фичам. 

VIT

Поехали дальше. Следующий большой шаг это ViT [15]:

Тихая революция и новый дикий запад в ComputerVision - 6

Он был опубликован [16]в начале декабря [17] 2020 года (реализация [18]). И тут все уже по-взрослому. Трансформер как он есть. Картинка разбивается на мини-участки 16*16. Каждый участок подается в трансформер как “слово”, дополняясь позиционным энкодером. 

И, внезапно, это все заработало. Не считая того что училось все долго (и точность не state-of-art). И на базах меньше 14 миллионов изображений работало как-то не топово.
Но все эти проблемы решил аналог. На этот раз от FaceBook [19]- Deit [20]. Который сильно упрощал обучение и инференс.

На больших датасетах этот подход до сих пор держит первые места почти на всех классификациях - https://paperswithcode.com/paper/going-deeper-with-image-transformers

На практике мы как-то попробовали использовать в одной задаче. Но, с датасетом в ~2-3 тысячи картинок, все это не очень заработало. И классические ResNet  были куда стабильнее и лучше. 

CLIP

Пойдем дальше. CLIP [21]. Это очень интересное применение трансформеров совсем с другой стороны. В CLIP задача переформулирована. Задача не в том чтобы распознать изображение, а найти максимально близкое текстовое описание для изображения. Здесь трансформер учит лингвистическую часть эмбединга, а сверточная сеть - визуальные эмбединги:

Тихая революция и новый дикий запад в ComputerVision - 7

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

Тихая революция и новый дикий запад в ComputerVision - 8

Иногда это работает даже слишком круто:

Тихая революция и новый дикий запад в ComputerVision - 9

Но, не смотря на то что это хорошо работает на некоторых датасетах - это не универсальный подход:

Тихая революция и новый дикий запад в ComputerVision - 10

Тут сравнение с линейным приближением ResNet50. Но надо понимать, что по части датасетов работает сильно хуже чем моделька обученная по 100 картинкам.

Мы пробовали из интереса протестировать на нескольких задачах, например распознавание действий/одежды. И везде CLIP работает очень плохо. Вообще про CLIP можно рассказывать очень долго. На Хабре есть хорошая статья [22]. А я делал видео, где говорил про него:

Vision Transformers for Dense Prediction

Следующая сетка, которая, на мой взгляд показательна - “Vision Transformers for Dense Prediction [23]”, которая вышла месяц назад. В ней можно переключаться между подходами Vit/Detr. Можно для первого уровня использовать свертки, а можно трансформеры.

Тихая революция и новый дикий запад в ComputerVision - 11

При этом сетка используется не для детекции/классификации, а для сегментации/оценки глубины. Что дает State-of-art результат [24] сразу по нескольким категориям, при этом в RealTime. Вообще очень печально что @AlexeyAB [25] (автор Yolov4 [26]и один из авторов статьи), не бахнул сюда публикацию отдельную про него. В целом сетка приятная, запускается из коробки, но пока нигде не пробовал. Если кому-то интересно, я делал более подробный обзор тут:

---------------------------------------

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

  • Трансформеры используются для обработки выхода сверточной сети

  • Трансформеры используются для нахождения логики поверх выдачи сети

  • Трансформеры используются напрямую применяясь к изображению

  • Гибрид подходов 1-2

Все что будет ниже - примеры того как те же самые трансформеры/подходы используются для других задач. Поехали.

PoseFormer

Pose3D [27]. Трансформер можно применить и к явным фичам, выделенным уже готовой сетью, например к скелетам:

Тихая революция и новый дикий запад в ComputerVision - 12

В этой работе Трансформер используется для восстановления 3д модели человека по серии кадров. В CherryLabs мы делали такое (и более сложные реконструкции) ещё года 3 назад, только без трансформеров, с эмбедингами. Но, конечно, Трансформеры позволяют сделать это быстрее и стабильнее. Результат - вполне неплохое и стабильное 3D, без переобучения:

Тихая революция и новый дикий запад в ComputerVision - 13

Плюс трансформеров в данном случае - возможность работать с данными которые не обладают локальной корреляцией. В отличие от нейронных сетей (в особенности сверточных). Это позволяет Трансформеру обучаться на сложные и разнообразные примеры.

Если что, идея пришла одновременно много кому. Вот ещё один подход [28]/реализация той же идеи.

TransPose

Если посмотреть где сверточных сетей не хватает именно потому что присутствует вложенная внутренняя логика изображения, то сразу приходит на ум именно поза. TransPose [29]- сетка которая распознает позу оптимизируя свертки:

Тихая революция и новый дикий запад в ComputerVision - 14

Сравните с классическими подходами в распознавании позы (достаточно старая версия OpenPose [30])

Тихая революция и новый дикий запад в ComputerVision - 15

И таких стейджей было в разных работах до десятка. Сейчас они заменены одним трансформером. Получается [31], конечно, сильно лучше чем у современных сетей:

Тихая революция и новый дикий запад в ComputerVision - 16

SWIN

Выше мы уже упоминали одну сетку по сегментации на базе Трансформеров от Intel. SWIN [32]от Microsoft [33]показывает результаты лучше, но уже не в RealTime.По сути это улучшенный и расширенный VIT/Deit, переработанный под сегментацию:

Тихая революция и новый дикий запад в ComputerVision - 17

Это сказывается на скорости, зато внушительное качество, лидерство в множестве категорий - https://paperswithcode.com/paper/swin-transformer-hierarchical-vision [34]

LOFTR

Есть задачи в которых сверточные сети вообще не очень работают. Например задача сопоставления двух изображений. Года полтора назад для такого зачастую использовали классический пайплайн через SIFT/SURF+RANSAK ( хороший гайд на эту тему [35] + видео [36]которое я записывал год назад ). Год назад появился SuperGlue [37]- единственное крутое применение Graph Neural Network которые я видел [38] в ComputerVision. При этом SuperGlue решал только задачу сопоставления. А теперь есть решение на трансформерах, LOFTR [39] практически End-To-End:

Тихая революция и новый дикий запад в ComputerVision - 18

Сам я попользоваться не успел, но выглядит круто:

Распознавание действий

В целом, конечно, трансформеры хороши всюду где есть последовательности, сложная логическая структура или требуется их анализ. Уже есть несколько сетей где действия анализируются трансформерами: (Video Transformer Network [40], ActionBert [41]). Обещают в ближайшее время добавить в MMAction [42].

Тихая революция и новый дикий запад в ComputerVision - 19

Трекинг

Я уже писал год назад огромную статью на Хабре [43]что работает в трекинге и как трекать объекты. Множество подходов, сложная логика. Прошел всего год, и по многим бенчмаркам [44] есть безусловный лидер - STARK [45]:

Тихая революция и новый дикий запад в ComputerVision - 20

Конечно, он не решает всех кейсов. И не во всех кейсах побеждают трансформеры. Но, скорее всего, это не надолго. Вот, например, трекинг глаз [46] на трансформерах. Вот трекинг по типу сиамских сетей [47] пару недельной давности. Вот трекинг BBOX + фичи один [48], а вот другой [49], с почти одинаковыми названиями

TransTrack
TransTrack
TransT
TransT

И все имеют неплохие скоры.

ReID

Реиндентификацию можно вынести из трекинга, как вы помните [50].  20 дней назад вышел трансформер с распознаванием ReID [51] - весьма неплохо может бустануть трекинг.

Тихая революция и новый дикий запад в ComputerVision - 23

Распознавания лиц [52]через трансформеры недельной давности похоже тоже подошло:

Тихая революция и новый дикий запад в ComputerVision - 24

Медицина

Если смотреть более конкретные применения тут тоже много интересного. VIT уже вовсю запихивают для анализа КТ и МРТ (1 [53],2 [54]):

Тихая революция и новый дикий запад в ComputerVision - 25

И для сегментации (1 [55],2 [56]):

Тихая революция и новый дикий запад в ComputerVision - 26

Удивительное

Что меня удивляет - я не вижу хорошей реализации OCR на трансформерах. Есть несколько примеров, но по бенчмаркам они как-то на дне [57]:

Тихая революция и новый дикий запад в ComputerVision - 27

Все state-of-art пока на классических подходах. Но люди пробуют. Даже сам что-то года 2 назад пробовал прикрутить. Но что-то результата это не дает.

Ещё из интересного

Никогда бы не подумал, но трансформеры уже применили [58]для раскраски картинок. И, наверное, это правильно:

Тихая революция и новый дикий запад в ComputerVision - 28

Что дальше

Мне кажется что трансформеры должны выйти в топ почти по всем категориям для ComputerVision. И, безусловно, для любой аналитики видео. 

Трансформеры едят входные данные линейно. Разными хитрыми способами в них сохраняют пространственную информацию. Но кажется, что рано или позно кто-нибудь придумает более актуальную реализацию, возможно где трансформер и 2д свертка будут объединены. И, люди уже [59]пытаются [60] -

Тихая революция и новый дикий запад в ComputerVision - 29

Ну а пока, смотрим на то как изменяется мир. Буквально каждый день. Когда материала накапливается достаточно - я обычно выкладываю большую статью на хабр. А про отдельные статьи/идеи обычно рассказываю у себя в канале - https://t.me/CVML_team [61] (дублирую сюда https://vk.com/cvml_team [62] ).

А текущая статья, если кому удобнее, доступна на youtube:

Автор: Мальцев Антон

Источник [63]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/algoritmy/363521

Ссылки в тексте:

[1] сверточных нейронных сетях: https://en.wikipedia.org/wiki/Convolutional_neural_network

[2] все: https://habr.com/ru/post/277069/

[3] доступна : https://youtu.be/xQFeeh5DqeY

[4] Трансформеры : https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)

[5] переводов: https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html

[6] GPT-3: https://ru.wikipedia.org/wiki/GPT-3

[7] DETR: https://github.com/facebookresearch/detr

[8] ReInspect : https://arxiv.org/pdf/1506.04878.pdf

[9] тут: http://cv-blog.ru/?p=310

[10] Deformable DETR: https://github.com/fundamentalvision/Deformable-DETR

[11] iterdet: https://github.com/saic-vul/iterdet

[12] https://paperswithcode.com/sota/panoptic-segmentation-on-coco-panoptic: https://paperswithcode.com/sota/panoptic-segmentation-on-coco-panoptic

[13] статья : https://arxiv.org/pdf/2006.03677.pdf

[14] неплохой обзор: https://habr.com/ru/company/ru_mts/blog/512258/

[15] ViT: https://ai.googleblog.com/2020/12/transformers-for-image-recognition-at.html%20

[16] опубликован : https://ai.googleblog.com/2020/12/transformers-for-image-recognition-at.html

[17] начале декабря: https://arxiv.org/pdf/2010.11929.pdf%20

[18] реализация: https://github.com/lucidrains/vit-pytorch

[19] от FaceBook : https://github.com/facebookresearch/deit

[20] Deit: https://arxiv.org/pdf/2012.12877.pdf

[21] CLIP: https://openai.com/blog/clip/

[22] хорошая статья: https://habr.com/ru/post/539312/

[23] Vision Transformers for Dense Prediction: https://arxiv.org/pdf/2103.13413.pdf

[24] State-of-art результат: https://paperswithcode.com/paper/vision-transformers-for-dense-prediction

[25] AlexeyAB: https://habr.com/users/AlexeyAB/

[26] Yolov4 : https://habr.com/ru/post/503200/ 

[27] Pose3D: https://github.com/zczcwh/PoseFormer

[28] ещё один подход: https://arxiv.org/pdf/2103.14304v5.pdf

[29] TransPose : https://github.com/yangsenius/TransPose

[30] OpenPose: https://russianblogs.com/article/7823213439/%20%20https://arxiv.org/pdf/1812.08008.pdf

[31] Получается: https://arxiv.org/pdf/2012.14214.pdf%20

[32] SWIN : https://arxiv.org/pdf/2103.14030.pdf

[33] Microsoft : https://github.com/microsoft/Swin-Transformer

[34] https://paperswithcode.com/paper/swin-transformer-hierarchical-vision: https://paperswithcode.com/paper/swin-transformer-hierarchical-vision

[35] хороший гайд на эту тему: https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf

[36] видео : https://youtu.be/kBZVZbKiTk4

[37] SuperGlue: https://arxiv.org/pdf/1911.11763.pdf

[38] Graph Neural Network которые я видел: http://cv-blog.ru/?p=341

[39] LOFTR: https://zju3dv.github.io/loftr/

[40] Video Transformer Network: https://arxiv.org/pdf/2102.00719.pdf

[41] ActionBert: https://github.com/Axe--/ActionBERT

[42] MMAction: https://github.com/open-mmlab/mmaction2

[43] огромную статью на Хабре : https://habr.com/ru/company/recognitor/blog/505694/%20

[44] многим бенчмаркам: https://paperswithcode.com/task/visual-object-tracking

[45] STARK: https://github.com/researchmm/Stark

[46] трекинг глаз: https://arxiv.org/pdf/2104.07244v1.pdf

[47] Вот трекинг по типу сиамских сетей: https://github.com/chenxin-dlut/TransT

[48] один: https://github.com/PeizeSun/TransTrack

[49] другой: https://arxiv.org/pdf/2101.02702v1.pdf

[50] вы помните: https://habr.com/ru/company/recognitor/blog/505694/

[51] ReID: https://github.com/heshuting555/TransReID

[52] Распознавания лиц : https://arxiv.org/pdf/2103.14803v2.pdf%20

[53] 1: https://github.com/junyuchen245/ViT-V-Net_for_3D_Image_Registration_Pytorch

[54] 2: https://github.com/Beckschen/TransUNet

[55] 1: https://github.com/jeya-maria-jose/Medical-Transformer

[56] 2: https://arxiv.org/pdf/2102.04306v1.pdf

[57] как-то на дне: https://github.com/fengxinjie/Transformer-OCR

[58] уже применили : https://github.com/google-research/google-research/tree/master/coltran

[59] уже : https://github.com/rishikksh20/convolution-vision-transformers

[60] пытаются: https://arxiv.org/pdf/2103.15808v1.pdf%20

[61] https://t.me/CVML_team: https://t.me/CVML_team

[62] https://vk.com/cvml_team: https://vk.com/cvml_team

[63] Источник: https://habr.com/ru/post/553478/?utm_source=habrahabr&utm_medium=rss&utm_campaign=553478