Bottleneck Transformers for Visual Recognition
Aravind Srinivas, Tsung-Yi Lin, Niki Parmar, Jonathon Shlens, Pieter Abbeel, Ashish Vaswani
Статья: https://arxiv.org/abs/2101.11605
Код (неавторский): https://github.com/lucidrains/bottleneck-transformer-pytorch
Ещё одна работа про трансформеры в работе с картинками, технически простая, но по-своему интересна. Ну и авторы знаковые.
Собственно, за последние полгода уже вышло множество работ, примеряющих трансформеры на обработку изображений. Про часть мы уже писали, например, ViT (https://t.me/gonzo_ML/434) или недавний Perceiver (https://t.me/gonzo_ML/545). Работ таких сильно больше, авторы дают классификацию разных подходов и показывают своё место в ней (см. картинку к посту).
В двух словах, текущая работа добавляет трансформерные блоки в бэкбон сети (не поверх него как VideoBERT и т.п.) и является гибридной моделью (свёртки + внимание), а не чисто моделью на внимании (как ViT и другие).
Идея очень простая. Давайте посмотрим на обычный ResNet. У него есть bottleneck блоки, сначала ужимающие входной тензор по глубине (через 1x1 свёртки), потом производящие вычисления нормальными свёртками, и снова увеличивающие размерность выходного тензора. В этом блоке можно заменить средний этап со свёртки 3x3 на полноценный multi-head self-attention. В работе авторы заменяют боттлнеки резнета в финальной группе (c5) на такие вот новые боттлнек-трансформеры (BoT блоки). И смотрят, что получается. А получается достойно.
В работе заходят со стороны сегментации и детекции. Для таких задач часто нужна глобальная информация и свёртки, эффективно ловящие локальную информацию, могут быть не лучшим вариантом. Можно, конечно, всегда добавить слоёв и “поле зрения” высоких свёрток будет большим, но что если взять вместо них self-attention, у которого сразу глобальное поле? Есть очевидный момент, что в силу квадратичной вычислительной сложности внимания это дорого делать на входе и/или на картинках высокого разрешения, так что вставим мы его только в верхние уровни сети, где тензоры уже достаточно низкого разрешения и это не будет проблемой. Так мы получим гибридную архитектуру (свёртки + внимание).
Замена технически очень простая: берём ResNet и заменяем только три последних боттлнек блока на новые. Более никаких изменений и плясок с бубном (на этой теме авторы акцентируются особо :) ).
Полученную сеть зовут ботнетом (BoTNet).
На задачах сегментации и детекции результаты становятся лучше.
В работе куча экспериментов, перечислять все не буду, отмечу что-то интересное.
Во-первых, на одинаковых настройках, на задаче instance segmentation BoT50 в качестве бэкбона для feature pyramid network всегда лучше ResNet-50. Аналогично и с другими резнетами (101, 152). И более того, BoTNet-50 лучше ResNet-101 и в целом сравним с ResNet-152. Неплохая альтернатива добавлению лишних 50-100 слоёв.
От обучения на большем разрешении ботнет выигрывает (таким образом получили новый рекорд для single model single scale instance segmentation с BoT200, побив ResNeSt).
Нельзя не сравнить на классификации на обычном ImageNet. Тут BoTNet-50 не даёт особенных преимуществ по качеству перед ResNet-50 (вероятно, потому что работают здесь с меньшими разрешениями, чем в сегментации, 224x224 против 1024x1024). Но зато параметров меньше (а вычислений в терминах умножений-сложений примерно столько же).
Интересно сравнение с EfficientNets, SENets и ResNets.
EfficientNets оказались стабильно хуже — почти всегда находится ResNet, SENet или BoTNet лучше. Парето-кривая выглядит убедительно.
На сравнительно небольших моделях в что называется lower accuracy regime (до 83% top-1 accuracy) ResNet/SENet рулят и бьют остальных. ViT-384 вообще оказывается хуже ResNet-50 (но правда для ViT ценность была именно в обучении на больших датасетах, а не на теперь уже мелк`ом ImageNet, и там, как мы помним, цифры были существенно выше и вообще SoTA), а улучшенный DeiT-384 хуже SENet. В любом случае это сильные свёрточные бейзлайны, которые надо иметь в виду.
BoTNet начинает рулить на больших моделях за пределами этого режима.
Aravind Srinivas, Tsung-Yi Lin, Niki Parmar, Jonathon Shlens, Pieter Abbeel, Ashish Vaswani
Статья: https://arxiv.org/abs/2101.11605
Код (неавторский): https://github.com/lucidrains/bottleneck-transformer-pytorch
Ещё одна работа про трансформеры в работе с картинками, технически простая, но по-своему интересна. Ну и авторы знаковые.
Собственно, за последние полгода уже вышло множество работ, примеряющих трансформеры на обработку изображений. Про часть мы уже писали, например, ViT (https://t.me/gonzo_ML/434) или недавний Perceiver (https://t.me/gonzo_ML/545). Работ таких сильно больше, авторы дают классификацию разных подходов и показывают своё место в ней (см. картинку к посту).
В двух словах, текущая работа добавляет трансформерные блоки в бэкбон сети (не поверх него как VideoBERT и т.п.) и является гибридной моделью (свёртки + внимание), а не чисто моделью на внимании (как ViT и другие).
Идея очень простая. Давайте посмотрим на обычный ResNet. У него есть bottleneck блоки, сначала ужимающие входной тензор по глубине (через 1x1 свёртки), потом производящие вычисления нормальными свёртками, и снова увеличивающие размерность выходного тензора. В этом блоке можно заменить средний этап со свёртки 3x3 на полноценный multi-head self-attention. В работе авторы заменяют боттлнеки резнета в финальной группе (c5) на такие вот новые боттлнек-трансформеры (BoT блоки). И смотрят, что получается. А получается достойно.
В работе заходят со стороны сегментации и детекции. Для таких задач часто нужна глобальная информация и свёртки, эффективно ловящие локальную информацию, могут быть не лучшим вариантом. Можно, конечно, всегда добавить слоёв и “поле зрения” высоких свёрток будет большим, но что если взять вместо них self-attention, у которого сразу глобальное поле? Есть очевидный момент, что в силу квадратичной вычислительной сложности внимания это дорого делать на входе и/или на картинках высокого разрешения, так что вставим мы его только в верхние уровни сети, где тензоры уже достаточно низкого разрешения и это не будет проблемой. Так мы получим гибридную архитектуру (свёртки + внимание).
Замена технически очень простая: берём ResNet и заменяем только три последних боттлнек блока на новые. Более никаких изменений и плясок с бубном (на этой теме авторы акцентируются особо :) ).
Полученную сеть зовут ботнетом (BoTNet).
На задачах сегментации и детекции результаты становятся лучше.
В работе куча экспериментов, перечислять все не буду, отмечу что-то интересное.
Во-первых, на одинаковых настройках, на задаче instance segmentation BoT50 в качестве бэкбона для feature pyramid network всегда лучше ResNet-50. Аналогично и с другими резнетами (101, 152). И более того, BoTNet-50 лучше ResNet-101 и в целом сравним с ResNet-152. Неплохая альтернатива добавлению лишних 50-100 слоёв.
От обучения на большем разрешении ботнет выигрывает (таким образом получили новый рекорд для single model single scale instance segmentation с BoT200, побив ResNeSt).
Нельзя не сравнить на классификации на обычном ImageNet. Тут BoTNet-50 не даёт особенных преимуществ по качеству перед ResNet-50 (вероятно, потому что работают здесь с меньшими разрешениями, чем в сегментации, 224x224 против 1024x1024). Но зато параметров меньше (а вычислений в терминах умножений-сложений примерно столько же).
Интересно сравнение с EfficientNets, SENets и ResNets.
EfficientNets оказались стабильно хуже — почти всегда находится ResNet, SENet или BoTNet лучше. Парето-кривая выглядит убедительно.
На сравнительно небольших моделях в что называется lower accuracy regime (до 83% top-1 accuracy) ResNet/SENet рулят и бьют остальных. ViT-384 вообще оказывается хуже ResNet-50 (но правда для ViT ценность была именно в обучении на больших датасетах, а не на теперь уже мелк`ом ImageNet, и там, как мы помним, цифры были существенно выше и вообще SoTA), а улучшенный DeiT-384 хуже SENet. В любом случае это сильные свёрточные бейзлайны, которые надо иметь в виду.
BoTNet начинает рулить на больших моделях за пределами этого режима.
GitHub
GitHub - lucidrains/bottleneck-transformer-pytorch: Implementation of Bottleneck Transformer in Pytorch
Implementation of Bottleneck Transformer in Pytorch - lucidrains/bottleneck-transformer-pytorch
По сравнению с EfficientNet для BoTNet размер входного изображения требуется меньший для достижения аналогичного качества, так что делается вывод, что self-attention оказывается более эффективной операцией для пулинга контекста по сравнению с depthwise separable свёртками.
В общем имеем интересный drop-in replacement для обычных резнетов, и имеем сильные бейзлайны для дальнейших копаний. И ждём проверки этих моделей на очень больших датасетах, как были у ViT.
В общем имеем интересный drop-in replacement для обычных резнетов, и имеем сильные бейзлайны для дальнейших копаний. И ждём проверки этих моделей на очень больших датасетах, как были у ViT.
Всем привет!
Мы продолжаем наши активности в журнальном клубе вокруг AGI (https://t.me/gonzo_ML/449).
В ближайшую субботу 24 апреля в 17:00 MSK мы соберёмся обсудить статью "Embodied Intelligence via Learning and Evolution" (https://arxiv.org/abs/2102.02202).
Мы продолжаем наши активности в журнальном клубе вокруг AGI (https://t.me/gonzo_ML/449).
В ближайшую субботу 24 апреля в 17:00 MSK мы соберёмся обсудить статью "Embodied Intelligence via Learning and Evolution" (https://arxiv.org/abs/2102.02202).
Telegram
gonzo-обзоры ML статей
И ещё одно объявление.
Мы планируем запустить онлайн семинар/журнальный клуб по разбору статей вокруг общего искусственного интеллекта (AGI). Если вам интересно участвовать в этой активности в качестве слушателя или докладчика (или ещё как), ответьте, пожалуйта…
Мы планируем запустить онлайн семинар/журнальный клуб по разбору статей вокруг общего искусственного интеллекта (AGI). Если вам интересно участвовать в этой активности в качестве слушателя или докладчика (или ещё как), ответьте, пожалуйта…
Вчера на AGI семинаре обсудили статью:
"Embodied Intelligence via Learning and Evolution"
Agrim Gupta, Silvio Savarese, Surya Ganguli, Li Fei-Fei
https://arxiv.org/abs/2102.02202
Материалы семинара:
- запись https://www.youtube.com/watch?v=M82hKVL0G2c
- слайды https://docs.google.com/presentation/d/1-KcUCx99iHLyUaA9Vmz7uTU5z9XUemOVjwxE-_8DQiU/edit?usp=sharing
- видео авторов https://www.youtube.com/watch?v=MMrIiNavkuY
"Embodied Intelligence via Learning and Evolution"
Agrim Gupta, Silvio Savarese, Surya Ganguli, Li Fei-Fei
https://arxiv.org/abs/2102.02202
Материалы семинара:
- запись https://www.youtube.com/watch?v=M82hKVL0G2c
- слайды https://docs.google.com/presentation/d/1-KcUCx99iHLyUaA9Vmz7uTU5z9XUemOVjwxE-_8DQiU/edit?usp=sharing
- видео авторов https://www.youtube.com/watch?v=MMrIiNavkuY
YouTube
AGI Seminar #5 (24.04.2021)
Обсуждаем статью "Embodied Intelligence via Learning and Evolution" (https://arxiv.org/abs/2102.02202) @Grigory Sapunov
[BYOL] Bootstrap your own latent: A new approach to self-supervised Learning
Jean-Bastien Grill, Florian Strub, Florent Altché, Corentin Tallec, Pierre H. Richemond, Elena Buchatskaya, Carl Doersch, Bernardo Avila Pires, Zhaohan Daniel Guo, Mohammad Gheshlaghi Azar, Bilal Piot, Koray Kavukcuoglu, Rémi Munos, Michal Valko
Статья: https://arxiv.org/abs/2006.07733
Код (на JAX и Haiku): https://github.com/deepmind/deepmind-research/tree/master/byol
Мы уже писали про разные интересные результаты в contrastive learning (CL), например, SimCLR (https://t.me/gonzo_ML/324), LoCo (https://t.me/gonzo_ML/342) или даже про применение этого подхода для работы с кодом (https://t.me/gonzo_ML/330). За последнее время появилось много новых интересных результатов, которые хочется разобрать. Но перед этим важно рассказать про некоторые вещи, ставшие уже классическими. BYOL от DeepMind и Imperial College как раз из таких.
Многие методы CL используют для обучения и позитивные и негативные примеры, и цель обучения — для позитивных примеров получить близкие репрезентации, а для пар позитивного и негативного — далёкие. BYOL интересен тем, что получает SoTA (на тот момент) без использования негативных пар. В этом смысле его, пожалуй, некорректно называть contrastive learning, а правильнее звать более широким термином self-supervised learning (SSL) .
Классические SSL методы часто строят фреймворк вокруг репрезентаций различных отображений одного и того же объекта (различные аугментированные представления [view] одной и той же картинки, например), и репрезентация одного представления должна быть способна предсказать репрезентацию другого представления того же самого изображения. Предсказание напрямую в пространстве репрезентаций может вести к коллапсу этих самых репрезентаций (например, к константе по всем представлениям), поэтому CL методы обходят это переформулированием проблемы предсказания проблемой разделения (discrimination) — по репрезентации аугментированного представления они учатся различать репрезентации других аугментированных представлений того же самого объекта от репрезентаций аугментированных представлений совсем других объектов (других картинок, например). Это спасает от коллапса репрезентаций.
В данной работе авторы задались вопросом, нужны ли эти негативные примеры для борьбы с коллапсом или можно обойтись без них.
BYOL использует две сети: онлайн (online) и целевую (target). Онлайн сеть состоит из трёх этапов: энкодер, проектор и предиктор. Целевая сеть имеет почти такую же архитектуру (нет предиктора), и свой набор весов. Между двумя сетями нет шаринга, но связь есть — веса целевой сети являются экспоненциальным скользящим средним весов онлайн сети.
Из интересного, авторы заметили, что целевая сеть может быть зафиксирована в рандомно инициализированном состоянии и онлайн сеть при обучении предсказывать её репрезентации даёт репрезентации сравнительно неплохого качества (18.8% top-1 acc на ImageNet, в то время как сама рандомная сеть лишь 1.4%, что кстати тоже многовато...). В этом в целом кроется суть метода: для некой целевой репрезентации мы можем, пытаясь её предсказать, выучить новую, потенциально улучшенную. А отсюда мы можем повторить процесс для новой репрезентации, итерируя процедуру и каждый раз делая целевой предыдущую онлайн репрезентацию. Такой вот собственно бутстрапинг.
BYOL генерирует два разных представления (v и v’) по исходной картинке (каждое со своими аугментациями, такими же как в SimCLR — случайный патч изображения + случайный горизонтальный флип + дисторсия цвета + гауссовское размытие + соляризация). Обе сети далее прогоняют это через свои энкодеры (ResNet-50 и больше/шире) и проекторы (MLP), онлайн сеть также прогоняет через предиктор (MLP), и здесь её цель — предсказать репрезентацию целевой сети.
Jean-Bastien Grill, Florian Strub, Florent Altché, Corentin Tallec, Pierre H. Richemond, Elena Buchatskaya, Carl Doersch, Bernardo Avila Pires, Zhaohan Daniel Guo, Mohammad Gheshlaghi Azar, Bilal Piot, Koray Kavukcuoglu, Rémi Munos, Michal Valko
Статья: https://arxiv.org/abs/2006.07733
Код (на JAX и Haiku): https://github.com/deepmind/deepmind-research/tree/master/byol
Мы уже писали про разные интересные результаты в contrastive learning (CL), например, SimCLR (https://t.me/gonzo_ML/324), LoCo (https://t.me/gonzo_ML/342) или даже про применение этого подхода для работы с кодом (https://t.me/gonzo_ML/330). За последнее время появилось много новых интересных результатов, которые хочется разобрать. Но перед этим важно рассказать про некоторые вещи, ставшие уже классическими. BYOL от DeepMind и Imperial College как раз из таких.
Многие методы CL используют для обучения и позитивные и негативные примеры, и цель обучения — для позитивных примеров получить близкие репрезентации, а для пар позитивного и негативного — далёкие. BYOL интересен тем, что получает SoTA (на тот момент) без использования негативных пар. В этом смысле его, пожалуй, некорректно называть contrastive learning, а правильнее звать более широким термином self-supervised learning (SSL) .
Классические SSL методы часто строят фреймворк вокруг репрезентаций различных отображений одного и того же объекта (различные аугментированные представления [view] одной и той же картинки, например), и репрезентация одного представления должна быть способна предсказать репрезентацию другого представления того же самого изображения. Предсказание напрямую в пространстве репрезентаций может вести к коллапсу этих самых репрезентаций (например, к константе по всем представлениям), поэтому CL методы обходят это переформулированием проблемы предсказания проблемой разделения (discrimination) — по репрезентации аугментированного представления они учатся различать репрезентации других аугментированных представлений того же самого объекта от репрезентаций аугментированных представлений совсем других объектов (других картинок, например). Это спасает от коллапса репрезентаций.
В данной работе авторы задались вопросом, нужны ли эти негативные примеры для борьбы с коллапсом или можно обойтись без них.
BYOL использует две сети: онлайн (online) и целевую (target). Онлайн сеть состоит из трёх этапов: энкодер, проектор и предиктор. Целевая сеть имеет почти такую же архитектуру (нет предиктора), и свой набор весов. Между двумя сетями нет шаринга, но связь есть — веса целевой сети являются экспоненциальным скользящим средним весов онлайн сети.
Из интересного, авторы заметили, что целевая сеть может быть зафиксирована в рандомно инициализированном состоянии и онлайн сеть при обучении предсказывать её репрезентации даёт репрезентации сравнительно неплохого качества (18.8% top-1 acc на ImageNet, в то время как сама рандомная сеть лишь 1.4%, что кстати тоже многовато...). В этом в целом кроется суть метода: для некой целевой репрезентации мы можем, пытаясь её предсказать, выучить новую, потенциально улучшенную. А отсюда мы можем повторить процесс для новой репрезентации, итерируя процедуру и каждый раз делая целевой предыдущую онлайн репрезентацию. Такой вот собственно бутстрапинг.
BYOL генерирует два разных представления (v и v’) по исходной картинке (каждое со своими аугментациями, такими же как в SimCLR — случайный патч изображения + случайный горизонтальный флип + дисторсия цвета + гауссовское размытие + соляризация). Обе сети далее прогоняют это через свои энкодеры (ResNet-50 и больше/шире) и проекторы (MLP), онлайн сеть также прогоняет через предиктор (MLP), и здесь её цель — предсказать репрезентацию целевой сети.
GitHub
deepmind-research/byol at master · google-deepmind/deepmind-research
This repository contains implementations and illustrative code to accompany DeepMind publications - google-deepmind/deepmind-research
👍1
Ошибка считается через MSE от нормализованных выхода предиктора онлайн сети и выхода проектора целевой сети. Лосс симметризуется путём прогона обоих представлений по обоим путям (v также прогоняется через целевую сеть, а v’ через онлайн сеть). Лосс минимизируется изменением параметров только онлайн сети. После обучения оставляют только энкодер онлайн сети.
Обучали на ImageNet с большим батчем (4096) на 512 TPU-v3, получалось примерно 8 часов для ResNet-50.
Результаты хорошие. При обучении линейного классификатора поверх получившихся репрезентаций на ImageNet метод побил SimCLR и MoCo v2 (SimCLRv2 появился параллельно BYOL и был лучше). При файнтюнинге на ImageNet тоже хорошо, и при переносе на другие датасеты неплохо работает. На другие задачи типа семантической сегментации, детектирования объектов и оценки глубины также переносится.
Отсутствие негативных примеров даёт некоторые преимущества. Например, традиционные методы используют в качестве негативных остальные сэмплы в батче и соответственно при маленьком батче репрезентации начинают деградировать. BYOL в целом ведёт себя лучше, хотя тоже начинает деградировать при уменьшении батча, но не так сильно.
Также контрастивные методы чувствительны к выбору аугментаций и этому есть разные причины, например, при некоторых аугментациях достаточно какой-нибудь побочной информации, чтобы определить принадлежность к одному изображению (например, гистограмма цветов решает эту задачу) и методу нет стимула оставлять в репрезентации что-либо кроме этой информации, соответственно репрезентация оказывается малополезной. У BYOL же есть стимулы сохранять в онлайн сети любую информацию, которую выхватывает целевая сеть, потому что это улучшает предсказания. Так что по идее метод должен быть более устойчивым к выбору аугментаций и эксперимент это подтверждает.
Это интересный метод, особенно для случаев, когда негативные примеры нелегко подобрать. Например, когда они оказываются не такие уж и негативные, типа кучи похожих или одинаковых объектов в датасете, что и на картинках может случиться, и тем более в более сложных областях типа биологии, где все повязаны эволюцией.
К работе были претензии в духе, что негативные примеры могут использоваться неявно через BatchNorm (коего внутре модели было немало) и что статистика батча даёт эффект контраста. Но авторы показали в отдельной работе (“BYOL works even without batch statistics“, https://arxiv.org/abs/2010.10241), что замена BN на независимую от батча нормализацию даёт сопоставимый с оригинальным BYOL перформанс, так что статистика батчей не является ключевой информацией для выучивания хороших репрезентаций.
Обучали на ImageNet с большим батчем (4096) на 512 TPU-v3, получалось примерно 8 часов для ResNet-50.
Результаты хорошие. При обучении линейного классификатора поверх получившихся репрезентаций на ImageNet метод побил SimCLR и MoCo v2 (SimCLRv2 появился параллельно BYOL и был лучше). При файнтюнинге на ImageNet тоже хорошо, и при переносе на другие датасеты неплохо работает. На другие задачи типа семантической сегментации, детектирования объектов и оценки глубины также переносится.
Отсутствие негативных примеров даёт некоторые преимущества. Например, традиционные методы используют в качестве негативных остальные сэмплы в батче и соответственно при маленьком батче репрезентации начинают деградировать. BYOL в целом ведёт себя лучше, хотя тоже начинает деградировать при уменьшении батча, но не так сильно.
Также контрастивные методы чувствительны к выбору аугментаций и этому есть разные причины, например, при некоторых аугментациях достаточно какой-нибудь побочной информации, чтобы определить принадлежность к одному изображению (например, гистограмма цветов решает эту задачу) и методу нет стимула оставлять в репрезентации что-либо кроме этой информации, соответственно репрезентация оказывается малополезной. У BYOL же есть стимулы сохранять в онлайн сети любую информацию, которую выхватывает целевая сеть, потому что это улучшает предсказания. Так что по идее метод должен быть более устойчивым к выбору аугментаций и эксперимент это подтверждает.
Это интересный метод, особенно для случаев, когда негативные примеры нелегко подобрать. Например, когда они оказываются не такие уж и негативные, типа кучи похожих или одинаковых объектов в датасете, что и на картинках может случиться, и тем более в более сложных областях типа биологии, где все повязаны эволюцией.
К работе были претензии в духе, что негативные примеры могут использоваться неявно через BatchNorm (коего внутре модели было немало) и что статистика батча даёт эффект контраста. Но авторы показали в отдельной работе (“BYOL works even without batch statistics“, https://arxiv.org/abs/2010.10241), что замена BN на независимую от батча нормализацию даёт сопоставимый с оригинальным BYOL перформанс, так что статистика батчей не является ключевой информацией для выучивания хороших репрезентаций.
👍1