[Facebook DINO] Emerging Properties in Self-Supervised Vision Transformers
Mathilde Caron, Hugo Touvron, Ishan Misra, Hervé Jégou, Julien Mairal, Piotr Bojanowski, Armand Joulin
Статья: https://arxiv.org/abs/2104.14294
Пост в блоге: https://ai.facebook.com/blog/dino-paws-computer-vision-with-self-supervised-transformers-and-10x-more-efficient-training/
Код и модели: https://github.com/facebookresearch/dino
Ещё одна важная работа начала этого года — DINO от Facebook.
Авторы работы решили изучить, даёт ли что-нибудь интересное картиночным трансформерам (конкретно ViT, https://t.me/gonzo_ML/434) предобучение через self-supervised learning (SSL). И они обнаружили интересные вещи, не возникающие ни при обучении ViT в режиме supervised, ни в свёрточных сетях, а именно:
- фичи SSL ViT содержат планировку (layout) сцены, и в частности границы объектов; эту информацию можно извлечь из модулей внимания с последнего слоя.
- фичи SSL ViT прекрасно работают для классификации через k-NN без какого-либо файнтюнинга, линейных классификаторов поверх фич или аугментации данных.
Семантические фичи при этом возникают более менее стабильно при использовании SSL, а хорошая классификация через k-NN получается только при использовании в обучении определённых компонентов, как то momentum encoder и multi-crop augmentation.
По результатам этих наблюдений авторы собрали свой SSL подход под названием DINO (DIstillation with NO labels), который работает и с ResNet и с ViT, но с последним результаты интереснее.
Подход идейно во многом похож на BYOL (https://t.me/gonzo_ML/562) и вдохновлялся им, но есть и существенные различия. По названию также видно, что используется дистилляция (про которую мы очень много писали, начиная с https://t.me/gonzo_ML/117), и это прекрасно.
Итак, в чём суть подхода.
Как полагается в классической дистилляции, есть сеть-учитель и сеть-ученик. Обе сети имеют одинаковую архитектуру (в этом отличие от BYOL, где асимметрия была важна чтобы процесс обучения не коллапсировал), но разные параметры (шаринга нет, но учитель обновляется как экспоненциальное скользящее среднее, EMA, от ученика — это и называется momentum encoder).
Обе сети выдают вероятностные распределения по K измерениям (гиперпараметр), вероятность получается с помощью софтмакса. Ученик пытается подстроить своё распределение под распределение учителя через минимизацию кросс-энтропии.
Это была часть про дистилляцию. Теперь часть про SSL.
Для каждой картинки создаются искажённые разными трансформациями (набор такой же как в BYOL, дисторсия цвета + гауссовское размытие + соляризация) вьюшки. Используется multi-crop стратегия (отсюда https://arxiv.org/abs/2006.09882), для каждой картинки есть один крупный глобальный вид (view) разрешения 224*224, и несколько локальных видов более низкого разрешения 96*96. Все кропы прогоняются через ученика, но только глобальный вид прогоняется через учителя, что способствует появлению local-to-global соответствия. Для выхода учителя также применяется centering и sharpening, это позволяет избежать коллапса.
Что интересно в этой схеме, что априори учитель не задан, он получается из студента в процессе общего обучения (это похоже на кодистилляцию, но здесь дистилляция только в одну сторону, от учителя к ученику). Обновление учителя очень похоже на momentum encoder, который изначально появился в contrastive learning (CL, про который мы тоже много писали, например, https://t.me/gonzo_ML/342), но как утверждают авторы здесь его роль совершенно иная. В CL momentum encoder выступает для замены очереди, из которой набираются отрицательные примеры, в текущей же работе нет ни очереди, ни CL, и авторы считают, что роль его ближе к mean teacher (https://arxiv.org/abs/1703.01780), который даёт некую форму ансамблирования моделей (а ансамбли, как мы знаем, всегда хорошо). На эту тему в работе есть больше деталей и ссылок на Polyak-Ruppert averaging, интересующиеся заглядывайте!
Mathilde Caron, Hugo Touvron, Ishan Misra, Hervé Jégou, Julien Mairal, Piotr Bojanowski, Armand Joulin
Статья: https://arxiv.org/abs/2104.14294
Пост в блоге: https://ai.facebook.com/blog/dino-paws-computer-vision-with-self-supervised-transformers-and-10x-more-efficient-training/
Код и модели: https://github.com/facebookresearch/dino
Ещё одна важная работа начала этого года — DINO от Facebook.
Авторы работы решили изучить, даёт ли что-нибудь интересное картиночным трансформерам (конкретно ViT, https://t.me/gonzo_ML/434) предобучение через self-supervised learning (SSL). И они обнаружили интересные вещи, не возникающие ни при обучении ViT в режиме supervised, ни в свёрточных сетях, а именно:
- фичи SSL ViT содержат планировку (layout) сцены, и в частности границы объектов; эту информацию можно извлечь из модулей внимания с последнего слоя.
- фичи SSL ViT прекрасно работают для классификации через k-NN без какого-либо файнтюнинга, линейных классификаторов поверх фич или аугментации данных.
Семантические фичи при этом возникают более менее стабильно при использовании SSL, а хорошая классификация через k-NN получается только при использовании в обучении определённых компонентов, как то momentum encoder и multi-crop augmentation.
По результатам этих наблюдений авторы собрали свой SSL подход под названием DINO (DIstillation with NO labels), который работает и с ResNet и с ViT, но с последним результаты интереснее.
Подход идейно во многом похож на BYOL (https://t.me/gonzo_ML/562) и вдохновлялся им, но есть и существенные различия. По названию также видно, что используется дистилляция (про которую мы очень много писали, начиная с https://t.me/gonzo_ML/117), и это прекрасно.
Итак, в чём суть подхода.
Как полагается в классической дистилляции, есть сеть-учитель и сеть-ученик. Обе сети имеют одинаковую архитектуру (в этом отличие от BYOL, где асимметрия была важна чтобы процесс обучения не коллапсировал), но разные параметры (шаринга нет, но учитель обновляется как экспоненциальное скользящее среднее, EMA, от ученика — это и называется momentum encoder).
Обе сети выдают вероятностные распределения по K измерениям (гиперпараметр), вероятность получается с помощью софтмакса. Ученик пытается подстроить своё распределение под распределение учителя через минимизацию кросс-энтропии.
Это была часть про дистилляцию. Теперь часть про SSL.
Для каждой картинки создаются искажённые разными трансформациями (набор такой же как в BYOL, дисторсия цвета + гауссовское размытие + соляризация) вьюшки. Используется multi-crop стратегия (отсюда https://arxiv.org/abs/2006.09882), для каждой картинки есть один крупный глобальный вид (view) разрешения 224*224, и несколько локальных видов более низкого разрешения 96*96. Все кропы прогоняются через ученика, но только глобальный вид прогоняется через учителя, что способствует появлению local-to-global соответствия. Для выхода учителя также применяется centering и sharpening, это позволяет избежать коллапса.
Что интересно в этой схеме, что априори учитель не задан, он получается из студента в процессе общего обучения (это похоже на кодистилляцию, но здесь дистилляция только в одну сторону, от учителя к ученику). Обновление учителя очень похоже на momentum encoder, который изначально появился в contrastive learning (CL, про который мы тоже много писали, например, https://t.me/gonzo_ML/342), но как утверждают авторы здесь его роль совершенно иная. В CL momentum encoder выступает для замены очереди, из которой набираются отрицательные примеры, в текущей же работе нет ни очереди, ни CL, и авторы считают, что роль его ближе к mean teacher (https://arxiv.org/abs/1703.01780), который даёт некую форму ансамблирования моделей (а ансамбли, как мы знаем, всегда хорошо). На эту тему в работе есть больше деталей и ссылок на Polyak-Ruppert averaging, интересующиеся заглядывайте!
Meta
DINO and PAWS: Advancing the state of the art in computer vision
Working with Inria researchers, we’ve developed a self-supervised image representation method, DINO, which produces remarkable results when trained with Vision Transformers. We are also detailing PAWS, a new method for 10x more efficient training.
Получается очень красивый микс SSL и дистилляции: обучаем студента, генерим из него учителя через EMA, этот учитель по факту является ансамблем с качеством более высоким чем у исходной модели (студента), тем самым получаем целевую модель от которой можно дистиллировать (а как мы знаем, дистилляция сама по себе тоже порой даёт качество более высокое, чем у исходной модели). И очень похоже на вытягивание себя из болота за волосы, ну или за шнурки от ботинок, кому как больше нравится.
Сама сеть — это бэкбон (ViT или ResNet) и проектор (projector) в виде трёхслойного MLP, на выходе которого и есть размерность K. Предиктора (predictor) как в BYOL нету. В случае ViT также нет никакого батчнорма (а то к BYOL были претензии, что BN типа косвенным образом делает контрастивность https://t.me/gonzo_ML/563). После обучения используются фичи бэкбона, не проектора.
Всё предобучалось на ImageNet без меток, на двух машинах с 8 GPU (видимо, что-то типа DGX) в течение трёх дней.
Главные результаты. Во-первых, SoTA для SSL и качественные фичи и с линейным классификатором, и с k-NN, бьёт множество методов CL и в общем довольно сильно приближается к полноценному supervised. В случае ViT также неожиданно малое отставание качества k-NN от линейной пробы, все остальные методы имеют гораздо больший гэп. За счёт качественного k-NN можно строить быстрые классификаторы, а также собирать быстрый семантический поиск по базам картинок. Также моделька классно находит копии изображений, хотя на эту задачу она вообще не обучалась.
При сравнении разных архитектур интересно, что более сложный ViT (ViT-B против ViT-S) даёт выигрыш меньший, чем уменьшение размера патча (/8 против /16).
Анализ фич показывает, что SSL ViT содержит полезные семантические фичи и разные головы внимания (имеется в виду внимание для query [CLS] токена последнего слоя) “смотрят” на разные регионы. У supervised ViT такого нет. Модель классно отделяет объекты от фона, и всё это получено без какой-либо разметки.
При transfer learning на другие задачи фичи SSL ViT также переносятся лучше, чем фичи supervised ViT. Ну и кстати на самом же ImageNet предобучение тоже улучшает результат на 1-2%.
В работе есть интересный раздел про абляции. Учитель, получаемый через momentum, всегда лучше студента, в том числе и на ResNet. За этим что-то есть (см.обсуждение ансамблирования выше и глубже в самой работе).
Работа была принята на ICCV 2021.
В целом, кажется, текущий прогресс в self-supervised обучении очень сильно изменит ландшафт сервисов для разметки данных, потому что теперь уже это не видится основным способом получить модели более высокого качества. Качественные размеченные данные нужны, но явно уже не так, как казалось всего пару лет назад. Для многих задач теперь не нужно собирать “ещё один размеченный ImageNet” (Хотя и было бы клёво его иметь (Но блин как же это дорого)).
Сама сеть — это бэкбон (ViT или ResNet) и проектор (projector) в виде трёхслойного MLP, на выходе которого и есть размерность K. Предиктора (predictor) как в BYOL нету. В случае ViT также нет никакого батчнорма (а то к BYOL были претензии, что BN типа косвенным образом делает контрастивность https://t.me/gonzo_ML/563). После обучения используются фичи бэкбона, не проектора.
Всё предобучалось на ImageNet без меток, на двух машинах с 8 GPU (видимо, что-то типа DGX) в течение трёх дней.
Главные результаты. Во-первых, SoTA для SSL и качественные фичи и с линейным классификатором, и с k-NN, бьёт множество методов CL и в общем довольно сильно приближается к полноценному supervised. В случае ViT также неожиданно малое отставание качества k-NN от линейной пробы, все остальные методы имеют гораздо больший гэп. За счёт качественного k-NN можно строить быстрые классификаторы, а также собирать быстрый семантический поиск по базам картинок. Также моделька классно находит копии изображений, хотя на эту задачу она вообще не обучалась.
При сравнении разных архитектур интересно, что более сложный ViT (ViT-B против ViT-S) даёт выигрыш меньший, чем уменьшение размера патча (/8 против /16).
Анализ фич показывает, что SSL ViT содержит полезные семантические фичи и разные головы внимания (имеется в виду внимание для query [CLS] токена последнего слоя) “смотрят” на разные регионы. У supervised ViT такого нет. Модель классно отделяет объекты от фона, и всё это получено без какой-либо разметки.
При transfer learning на другие задачи фичи SSL ViT также переносятся лучше, чем фичи supervised ViT. Ну и кстати на самом же ImageNet предобучение тоже улучшает результат на 1-2%.
В работе есть интересный раздел про абляции. Учитель, получаемый через momentum, всегда лучше студента, в том числе и на ResNet. За этим что-то есть (см.обсуждение ансамблирования выше и глубже в самой работе).
Работа была принята на ICCV 2021.
В целом, кажется, текущий прогресс в self-supervised обучении очень сильно изменит ландшафт сервисов для разметки данных, потому что теперь уже это не видится основным способом получить модели более высокого качества. Качественные размеченные данные нужны, но явно уже не так, как казалось всего пару лет назад. Для многих задач теперь не нужно собирать “ещё один размеченный ImageNet” (Хотя и было бы клёво его иметь (Но блин как же это дорого)).
Telegram
gonzo-обзоры ML статей
Ошибка считается через MSE от нормализованных выхода предиктора онлайн сети и выхода проектора целевой сети. Лосс симметризуется путём прогона обоих представлений по обоим путям (v также прогоняется через целевую сеть, а v’ через онлайн сеть). Лосс минимизируется…
👍1
Perceiver IO: A General Architecture for Structured Inputs & Outputs
Andrew Jaegle, Sebastian Borgeaud, Jean-Baptiste Alayrac, Carl Doersch, Catalin Ionescu, David Ding, Skanda Koppula, Daniel Zoran, Andrew Brock, Evan Shelhamer, Olivier Hénaff, Matthew M. Botvinick, Andrew Zisserman, Oriol Vinyals, João Carreira
Статья: https://arxiv.org/abs/2107.14795
Пост: https://deepmind.com/blog/article/building-architectures-that-can-handle-the-worlds-data
Код (на JAX/Haiku): https://github.com/deepmind/deepmind-research/tree/master/perceiver
Код (неавторский, на PyTorch): https://github.com/krasserm/perceiver-io
В марте мы писали про архитектуру для работы с мультимодальными данными от DeepMind под названием Perceiver (https://t.me/gonzo_ML/545).
Perceiver использовал асимметричный механизм внимания, который итеративно выхватывал из входа релевантные (мы надеемся) элементы данных и обновлял по ним внутренний массив латентных переменных. Это позволяло скейлиться на большие размеры входа, поскольку благодаря латентным переменным нет квадратичной сложности от размера входа.
Но была у персивера серьёзная проблема. Хоть он и скейлился на разные входы, выходы его были просты — он годился для классификации по заданному числу классов, но не годился для генерации сложных выходов произвольного размера (картинок, текстов, множества символов и т.д.).
В июле 2021 вышел Perceiver IO, который устраняет этот недостаток.
Основное улучшение сделано в процедуре декодирования (генерации выхода). Через специально задизайненные query к латентным переменным можно получить выходы нужной структуры (заданной этими query).
На входе происходит трансформация входных данных в латентный массив (query здесь обучаемый и его размер не зависит от размера входа, всё как в стандартном Perceiver), далее трансформер обрабатывает латенты (эта часть называется processor), и на выходе происходит трансформация латентов в выход нужной структуры (которая определяется query с количеством элементов равным размерности выхода). Сами эти query обучаются, могут быть созданы вручную или же являться функциями от входа.
Для задач с гомогенными выходами (например, токены языка или пиксели изображения) query могут содержать позиционные эмбеддинги (обучаемые или Фурье для картинок/звука). Для мульти-{таск, модальность} историй в query может быть эмбеддинг {задачи, модальности}.
В качестве выходов и задач используются:
1) тексты (размером 512-2048 токенов или UTF-8 байт) и MLM-предобучение + задачи из GLUE (выходные размерности от 8 до 2048);
2) видео (размером 22816) и задача предсказания оптического потока (с выходом размера 11408);
3) видео+аудио+метка в задаче автокодирования видео из датасета Kinetics-700-2020 (размера 50657x704 на входе и 803297x512 на выходе; разница, видимо, из-за того, что на входе обрабатывают патчи 4x4, а выход генерят попиксельно)
4) множество юнитов StarCraft и задача выбора юнитов для замены трансформера в AlphaStar (система DeepMind, игравшая в StarCraft).
5) картинки (50176 пикселей) и классификация на 1000 классов.
Получаются вполне достойные результаты.
На языковых задачах получается обучить модель без токенизатора (на уровне UTF-8), соответствующую аналогичной по FLOPS бейзлайн-модели с SentencePiece токенизатором.
На определении оптического потока модель вполне конкурентоспособна в сравнении со специально созданными для этого методами (PWCNet, RAFT), а на одной из задач даже получила SoTA, что классно с учётом общности модели и отсутствия существенной кастомизации под задачу.
На мультимодальной задаче автокодирования получается восстановление исходного видео (либо его классификация, если метка класса на входе скрыта) из общего мультимодального латентного пространства и весами разных модальностей в лоссе можно балансировать модель в пользу одной или другой модальности.
В AlphaStar получилось заменить оригинальный трансформер Perceiver’ом IO с 32 латентами (на входе и выходе он работает с 512 юнитами).
Andrew Jaegle, Sebastian Borgeaud, Jean-Baptiste Alayrac, Carl Doersch, Catalin Ionescu, David Ding, Skanda Koppula, Daniel Zoran, Andrew Brock, Evan Shelhamer, Olivier Hénaff, Matthew M. Botvinick, Andrew Zisserman, Oriol Vinyals, João Carreira
Статья: https://arxiv.org/abs/2107.14795
Пост: https://deepmind.com/blog/article/building-architectures-that-can-handle-the-worlds-data
Код (на JAX/Haiku): https://github.com/deepmind/deepmind-research/tree/master/perceiver
Код (неавторский, на PyTorch): https://github.com/krasserm/perceiver-io
В марте мы писали про архитектуру для работы с мультимодальными данными от DeepMind под названием Perceiver (https://t.me/gonzo_ML/545).
Perceiver использовал асимметричный механизм внимания, который итеративно выхватывал из входа релевантные (мы надеемся) элементы данных и обновлял по ним внутренний массив латентных переменных. Это позволяло скейлиться на большие размеры входа, поскольку благодаря латентным переменным нет квадратичной сложности от размера входа.
Но была у персивера серьёзная проблема. Хоть он и скейлился на разные входы, выходы его были просты — он годился для классификации по заданному числу классов, но не годился для генерации сложных выходов произвольного размера (картинок, текстов, множества символов и т.д.).
В июле 2021 вышел Perceiver IO, который устраняет этот недостаток.
Основное улучшение сделано в процедуре декодирования (генерации выхода). Через специально задизайненные query к латентным переменным можно получить выходы нужной структуры (заданной этими query).
На входе происходит трансформация входных данных в латентный массив (query здесь обучаемый и его размер не зависит от размера входа, всё как в стандартном Perceiver), далее трансформер обрабатывает латенты (эта часть называется processor), и на выходе происходит трансформация латентов в выход нужной структуры (которая определяется query с количеством элементов равным размерности выхода). Сами эти query обучаются, могут быть созданы вручную или же являться функциями от входа.
Для задач с гомогенными выходами (например, токены языка или пиксели изображения) query могут содержать позиционные эмбеддинги (обучаемые или Фурье для картинок/звука). Для мульти-{таск, модальность} историй в query может быть эмбеддинг {задачи, модальности}.
В качестве выходов и задач используются:
1) тексты (размером 512-2048 токенов или UTF-8 байт) и MLM-предобучение + задачи из GLUE (выходные размерности от 8 до 2048);
2) видео (размером 22816) и задача предсказания оптического потока (с выходом размера 11408);
3) видео+аудио+метка в задаче автокодирования видео из датасета Kinetics-700-2020 (размера 50657x704 на входе и 803297x512 на выходе; разница, видимо, из-за того, что на входе обрабатывают патчи 4x4, а выход генерят попиксельно)
4) множество юнитов StarCraft и задача выбора юнитов для замены трансформера в AlphaStar (система DeepMind, игравшая в StarCraft).
5) картинки (50176 пикселей) и классификация на 1000 классов.
Получаются вполне достойные результаты.
На языковых задачах получается обучить модель без токенизатора (на уровне UTF-8), соответствующую аналогичной по FLOPS бейзлайн-модели с SentencePiece токенизатором.
На определении оптического потока модель вполне конкурентоспособна в сравнении со специально созданными для этого методами (PWCNet, RAFT), а на одной из задач даже получила SoTA, что классно с учётом общности модели и отсутствия существенной кастомизации под задачу.
На мультимодальной задаче автокодирования получается восстановление исходного видео (либо его классификация, если метка класса на входе скрыта) из общего мультимодального латентного пространства и весами разных модальностей в лоссе можно балансировать модель в пользу одной или другой модальности.
В AlphaStar получилось заменить оригинальный трансформер Perceiver’ом IO с 32 латентами (на входе и выходе он работает с 512 юнитами).
Deepmind
Building architectures that can handle the world’s data
Most architectures used by AI systems today are specialists. A 2D residual network may be a good choice for processing images, but at best it’s a loose fit for other kinds of data — such as the Lidar signals used in self-driving cars or the torques used in…
👍1
На классификации картинок ImageNet и обычный Perceiver работал сносно, но здесь применяется более общий декодер и Perceiver IO стабильно лучше.
Можно сказать, что на пути к одной универсальной архитектуре, которая может работать с различными модальностями по множеству разных задач, это прогресс. При этом некоторые вопросы ещё не решены. Например, пока не исследовался вопрос генеративного моделирования, а также механизмы автоматической настройки размера латентного пространства. В любом случае выглядит интересно.
Можно сказать, что на пути к одной универсальной архитектуре, которая может работать с различными модальностями по множеству разных задач, это прогресс. При этом некоторые вопросы ещё не решены. Например, пока не исследовался вопрос генеративного моделирования, а также механизмы автоматической настройки размера латентного пространства. В любом случае выглядит интересно.
This media is not supported in your browser
VIEW IN TELEGRAM
optical flow estimation