Все, что вам нужно знать о MobileNetV3

Когда в 2017 году появился MobileNet V1, он, по сути, положил начало новому разделу исследований глубокого обучения в области компьютерного зрения, то есть разработке моделей, которые могут работать во встроенных системах. Это привело к нескольким важным работам, включая, помимо прочего, ShuffleNet (V1 и V2), MNasNet, CondenseNet, EffNet и другие. Где-то посередине появилась и вторая версия MobileNet в прошлом году. Итерация этого года дает нам третью версию MobileNet под названием MobileNetV3. Эта история представляет собой обзор MobileNetV3 от Google, который был представлен в этом году на конференции ICCV в Сеуле, Южная Корея.

Содержание:

  1. Эффективные мобильные строительные блоки
  2. Поиск нейронной архитектуры для блочного поиска
  3. NetAdapt для многоуровневого поиска
  4. Улучшения сети - удаление слоев и H-swish
  5. Общая структура
  6. Эксперименты и результаты

В третьей версии много чего происходит по сравнению с предыдущими версиями. : D. Я думаю, это было необходимо, чтобы превзойти и без того потрясающую MobileNetV2. Я постараюсь вкратце вернуться к концепциям более ранних версий (в основном V2), если это будет необходимо.

Эффективные мобильные строительные блоки

MobileNetV1 представил свертку по глубине для уменьшения количества параметров. Вторая версия добавила в блок слой расширения, чтобы получить систему расширения-фильтрации-сжатия (см. Рисунок ниже [1]) с использованием трех уровней. Эта система, получившая название Inverted Residual Block, еще больше помогла в повышении производительности.

Последняя версия добавляет слои сжатия и возбуждения [2] в начальный строительный блок, взятый из V2, который в дальнейшем будет обрабатываться (NAS и NetAdapt). См. Рисунок ниже для сравнения с V2.

Как упоминалось на рисунке выше, используется нелинейность h-swish, о которой будет рассказано позже. Добавление модуля сжатия и возбуждения помогает, давая неравные веса разным каналам от входа при создании карт выходных характеристик, как предполагается, с равным весом, который дает обычная CNN. Сжатие и возбуждение обычно добавляются отдельно к блокам resnet / inception. Однако в этой модели он применяется параллельно со слоями resnet. Слои сжатия и возбуждения выглядят следующим образом (маленькие стрелки внизу рисунка выше):

Pool - ›Dense -› ReLU - ›Dense -› h-swish - ›масштабирование.

Нейронная архитектура Поиск световых моделей

Поиск нейронной архитектуры (NAS) [3], с точки зрения непрофессионала, - это процесс попытки заставить модель (обычно RNN, также называемую контроллером) выводить поток модулей, которые можно собрать вместе, чтобы сформировать модель, которая дает наилучшие результаты. точность возможна путем поиска среди всех возможных комбинаций. Базовый алгоритм можно резюмировать, используя этот рисунок [4].

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

Как правило, в большинстве статей NAS используется для получения структуры эффективного подмодуля, который можно многократно объединять вместе для получения всей модели. Однако здесь он используется в дополнение к алгоритму NetAdapt (обсуждается позже), который будет использоваться для определения количества фильтров для каждого слоя. Итак, NAS будет использоваться для оптимизации каждого блока.

Кроме того, поскольку нам нужна легкая модель, NAS настроен соответствующим образом. Мы работаем над новой функцией вознаграждения: ACC (m) × [LAT (m) / TAR] ^ w, которая учитывает как точность, так и задержку (общее время вывода) для модели. ACC - точность, LAT - задержка, TAR - целевая задержка, а m - модель, полученная в результате поиска. Здесь w - постоянная. Авторы также отмечают, что для моделей меньшего размера (которые мы ищем для поиска) w должно быть -0,15 (по сравнению с исходным w = -0,07).

Со всеми этими изменениями в результате NAS создается сетевая архитектура, которая может быть дополнительно усовершенствована на уровне слоев с помощью NetAdapt.

NetAdapt для многоуровневого поиска

Исходный алгоритм NetAdapt [5] работает с количеством фильтров для каждой конверсии, как показано в этом алгоритме ниже:

Здесь он пытается оптимизировать количество фильтров для каждой рассматриваемой конверсии и выбирает модель с максимальной точностью. Модель среди K моделей с максимальной точностью взята из работы над одним из K свёрточных слоев.

Разбавленная версия этого алгоритма, работающая в MobileNet, выглядит следующим образом:

  1. Начнем с вывода NAS.
  2. Создайте набор предложений . Каждое предложение должно иметь уменьшенную на дельту задержку по сравнению с моделью на предыдущем шаге.
  3. Установите веса для нового предложения, используя веса из предыдущей сети и случайную инициализацию любых новых фильтров.
  4. Настраивайте окончательно выбранные предложения, пока не будет достигнута целевая задержка.

Окончательный выбор производится на основе метрики. Авторы выбирают (изменение точности / изменение задержки). Это делается с интуицией, что и факторы точности, и задержки сохраняются в смеси, и предпочтение отдается моделям, которые максимизируют наклон компромисса между точностью и задержкой.

Улучшения сети

Усовершенствования сети были сделаны двумя способами:

  1. Удаление слоя
  2. свистовая нелинейность

Удаление слоя

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

  1. В последнем блоке слой расширения 1x1, взятый из инвертированной остаточной единицы из MobileNetV2, перемещается за уровень объединения. Это означает, что слой 1x1 работает с характеристическими картами размером 1x1 вместо 7x7, что делает его эффективным с точки зрения вычислений и задержки.
  2. Мы знаем, что слой расширения требует много вычислений. Но теперь, когда он перемещен за слой объединения, нам не нужно выполнять сжатие, выполняемое слоем проекции из последнего слоя из предыдущего блока. Таким образом, мы можем удалить этот слой проекции и фильтрующий слой из предыдущего узкого слоя (блока). Оба эти изменения показаны на этом рисунке.

3. Экспериментальное изменение заключается в использовании 16 фильтров в исходном слое 3x3 вместо 32, которые используются в мобильных моделях по умолчанию.

Эти изменения позволяют сэкономить девять миллисекунд времени вывода.

Нелинейность

Нелинейность swish определяется как:

Экспериментально доказано повышение точности. Однако, поскольку сигмовидная функция требует больших вычислительных ресурсов и мы очень заботимся о вычислительных затратах в этой модели, авторы модифицируют ее так называемым жестким взмахом или h-swish :

Ниже приведен график, на котором сравниваются все обсуждаемые нелинейности:

Ясно, что h-swish мало чем отличается от swish в том, что касается кривой, хотя и требует меньших вычислительных затрат.

Общая структура

Это подводит нас к общей структуре. В документе определены две терминологии: MobileNetV3-Large и MobileNetv3-Small. Структура для обоих из них следующая (MobileNetV3-Large слева и MobileNetV3-Small справа):

Изменения, описанные в предыдущем разделе, можно увидеть в первых нескольких и последних нескольких слоях, особенно в размещении уровня объединения на входе 7x7 перед конечными слоями conv2d 1x1.

Эксперименты и результаты

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

Поскольку эта статья написана группой людей (т. Они используют Pixel 1/2/3 и обозначают их как P-n. Еще одна вещь, которую следует отметить, заключается в том, что все эти результаты получены на одноядерном оборудовании, а не на многоядерном оборудовании, которое есть в этих телефонах.

Классификация

В таблице слева ясно видно, что задержка уменьшается с V2 до V3, хотя точность классификации в Imagenet увеличивается.

Обнаружение объекта

Для экспериментов по обнаружению авторы используют MobileNetv3 в качестве основы SSDLite, и следующие результаты:

Оказывается, MobileNetv3-Large на 27% быстрее, чем MobileNetV2, при сохранении аналогичной MAP.

Сегментация

Для семантической сегментации авторы предлагают новую головку сегментации, производную от R-ASSP [6], под названием Lite R-ASSP или LR-ASSP. Он основан на идее объединения, как используется сжатие и возбуждение.

Авторы сообщают, что LR-ASSP быстрее, чем предыдущий R-ASSP, который был предложен вместе с MobileNetV2.

Кроме того, магистрали MobileNetV3 немного быстрее, чем аналоги V2.

Заключение

Google, предоставляющий самые современные результаты с помощью поиска по нейронной архитектуре, является отличным результатом для глубокого обучения и компьютерного зрения в будущем, поскольку это может стать отличной мотивацией для использования и дальнейшего улучшения таких алгоритмов поиска в сети. Такие улучшения могут привести к стадии, когда мы полностью зависим от Search при выборе архитектур модели. MobileNetV3 дает результаты SOTA для легких моделей при основных проблемах компьютерного зрения.

использованная литература

[1] https://machinethink.net/blog/mobilenet-v2/

[2] Дж. Ху, Л. Шен и Г. Сунь. Сети сжатия и возбуждения. Электронные отпечатки ArXiv, сентябрь 2017 г.

[3] Баррет Зоф и Куок В. Ле. Поиск нейронной архитектуры с обучением с подкреплением. CoRR, абс. / 1611.01578, 2016

[4] https://towardsdatascience.com/everything-you-need-to-know-about-automl-and-neural-architecture-search-8db1863682bf

[5] Тянь-Цзюй Ян, Эндрю Г. Ховард, Бо Чен, Сяо Чжан, Алек Го, Марк Сандлер, Вивьен Сзе и Хартвиг ​​Адам. Netadapt: ​​адаптация нейронной сети с учетом платформы для мобильных приложений. В ECCV, 2018

[6] Марк Сэндлер, Эндрю Г. Ховард, Менглонг Чжу, Андрей Жмогинов и Лян-Чи Чен. Mobilenetv2: обратные остатки и линейные узкие места. мобильные сети для классификации, обнаружения и сегментации. CoRR, абс / 1801.04381, 2018

Обо мне

Заинтересованы в глубоком обучении? Я стараюсь работать над крутыми идеями глубокого обучения, особенно в области компьютерного зрения. Посетите мой профиль Github.