Как стать автором
Обновить
758.94
OTUS
Цифровые навыки от ведущих экспертов

Google выпускает MLP-Mixer: MLP архитектуру для компьютерного зрения

Время на прочтение5 мин
Количество просмотров3.8K

Материал переведен. Ссылка на оригинал


Для обработки изображений возвращаемся к MLP, просто, но эффективно (с конкурентоспособными результатами).

Обработка изображений — одна из самых интересных областей машинного обучения. Все началось с многослойных перцептронов (MLP), затем были свертки, потом механизм слоев self-attention (трансформеры), а теперь эта статья снова возвращает нас к MLP. Если вы думаете также как и я, то первый вопрос, который вы себе зададите — как MLP может достичь почти тех же результатов, что трансформеры и CNN? Именно на это мы и ответим в этой статье. Новый предлагаемый "MLP-Mixer" достигает результатов, очень близких к результатам моделей SOTA, которые обучались на массах данных, с почти 3-кратной скоростью. В статье также представлена интересная метрика (изображений / ядро / сек).

Предложенный MLP-Mixer не использует ни сверток, ни self-attention слоев, и, тем не менее, достигает почти SOTA результатов, что наводит на размышления.

Архитектура MLP-Mixer

Прежде чем обсуждать принцип работы сети, давайте начнем с изучения ее компонентов, а затем соберем их все вместе (как если бы мы разобрали двигатель автомобиля и исследовали его отдельные части).

Мы представляем MLP-Mixer, архитектуру, основанную исключительно на многослойных перцептронах (MLP). MLP-Mixer содержит два типа слоев: один с MLP, применяемыми независимо к фрагментам (patches) изображения (т.е. "смешивающими" характеристики отдельных фрагментов), и другой с MLP, применяемыми ко всем фрагментам (т.е. "смешивающими" пространственную информацию).

Источник: MLP-Mixer на arxiv

Первое, что необходимо отметить, это то, как "моделируется/представляется" входное изображение; оно моделируется в виде патчей (как оно было разделено) x каналов. Первый тип слоя (будем называть его channel-mixing layer [1]), работает на независимых патчах изображения и допускает связь между их каналами (отсюда channel-mixing) во время обучения. Второй тип (будем называть его patch-mixing) работает аналогично, но для патчей (позволяет общаться между разными патчами).

Основная идея современных сетей обработки изображений заключается в том, чтобы смешивать фичи в определенном месте или смешивать их между различными местами [1]. CNN выполняют оба этих типа смешивания с помощью сверток, ядер и операций объединения (pooling), в то время как трансформеры компьютерного зрения выполняют их с помощью механизма self-attention. Однако MLP-Mixer пытается сделать и то, и другое на основе более "раздельного" подхода (объяснение ниже), причем только с использованием MLP. Основным преимуществом использования только MLP (которые в основном представляют собой матричные умножения) является простота архитектуры и скорость вычислений.

Как это работает?

Это самая интересная часть, где мы должны обсудить, как входной сигнал становится выходным, и что происходит с изображением во время прохождения через сеть.

Источник: MLP-Mixer на arxiv - Изображение сначала разбивается на непересекающиеся фрагменты, затем отправляется в сеть.
Источник: MLP-Mixer на arxiv - Изображение сначала разбивается на непересекающиеся фрагменты, затем отправляется в сеть.

Первый полностью связанный слой проецирует неперекрывающиеся патчи в нужное скрытое измерение (в зависимости от размера слоя). Тип этого слоя — "слой смешивания патчей (patch-mixing)", что вполне логично. Вы можете представлять это как кодирование изображения, поскольку данный прием широко используется в нейронных сетях (как автоэнкодеры) для уменьшения размерности изображения и сохранения только наиболее важных характеристик. После этого строится "таблица" со значениями патчей изображения в сравнении со значениями скрытого измерения.

Слой смешивания патчей выполняет свои матричные операции (например, транспонирование) над столбцами таблицы, в то время как слой смешивания каналов (channel-mixing) выполняет свои матричные операции над строками таблицы (выше это представлено как "слой смешивания (Mixer Layer)"). После этого применяется нелинейная функция активации [1]. Это может показаться немного запутанным, но интуитивно можно понять, что микшер пытается найти наилучший способ смешивания и кодирования каналов и фрагментов изображения в конструктивный результат.

Здесь важно отметить, что размер скрытого представления неперекрывающихся фрагментов не зависит от количества входных патчей. Чтобы доказать это, потребуется гораздо больше времени, чем мне хотелось бы, поэтому не смущайтесь, если захотите проверить это на практике. В сущности, это дает очень важное различие в производительности между MLP-Mixer и другими архитектурами, которое заключается в следующем:

Вычислительная сложность MLP-Mixer линейна в зависимости от количества входных патчей, в отличие от ViT, чья сложность квадратична.

Источник: MLP-Mixer на arxiv

MLP-Mixer также имеет несколько преимуществ, которые обеспечивают существенную простоту его архитектуры:

  • Слои имеют одинаковый размер

  • Каждый слой состоит только из 2 блоков MLP

  • Каждый слой принимает входные данные одинакового размера

  • Все фрагменты изображения проецируются линейно с одной и той же матрицей проекции

Это делает аргументацию в пользу этой сети и работу с ней немного проще по сравнению с CNN, которые обычно имеют пирамидальную структуру [1]. Помню, когда я впервые пытался спроектировать CNN, то понять, когда нужно уменьшить масштаб изображения, а когда увеличить, и на какую степень увеличивать/уменьшать масштаб, было довольно сложно. В данной архитектуре эти проблемы отсутствуют.

Следует отметить, что в модели также пропускают связи и используют регуляризацию, но я не думаю, что нам нужно обсуждать эти концепции, поскольку они широко используются и объясняются другими ресурсами.

Заключительные мысли

Источник: MLP-Mixer на arxiv
Источник: MLP-Mixer на arxiv

Что касается результатов, то существует несколько таблиц, и в них описывается, что производительность Mixer довольно схожа с другими архитектурами, тем не менее, он значительно быстрее. Его "пропускная способность" составляет 105 изображений/сек/ядро по сравнению с 32 для трансформера компьютерного зрения (Vision transformer). Справедливости ради следует отметить, что это может выглядеть довольно странной метрикой, и порой создается впечатление, что исследователи ML пытаются найти одну метрику, чтобы казалось, что их сети намного лучше других. Однако, полагаю, можно объективно согласиться с тем, что достижение такого же уровня производительности с помощью только MLP-блоков все равно впечатляет.

Надеюсь, я представил вам низкоуровневые и высокоуровневые детали без большой путаницы. Дайте мне знать в комментариях, если что-то вам было непонятно, и я сделаю все возможное, чтобы объяснить это подробнее.


Перевод материала подготовлен в рамках курса «Промышленный ML на больших данных».

Всех желающих приглашаем на двухдневный онлайн-интенсив «Как вывести модель в продакшн с помошью AWS? Теория и подготовка». На занятиях вы узнаете, как использовать lambda и нюансы работы с IoT данными. Также научитесь выводить модель в продакшн без сложных настроек системы.

• РЕГИСТРАЦИЯ •

Материал переведен. Ссылка на оригинал

Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии3

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS