Mobilenet: Меньше, Быстрее, Точнее

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



MobileNet: меньше, быстрее, точнее

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

В этой статье мы поговорим о MobileNet — усовершенствованной сверточной сетевой архитектуре, которая позволяет делать все это и многое другое.

Статья будет состоять из трёх частей.

В первой мы рассмотрим структуру сети, а также хитрости, которые придумали авторы.

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

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



В предыдущих сериях

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

Кратко напомню, что это такое.

Обычная свертка — это фильтр

MobileNet: меньше, быстрее, точнее

, Где

MobileNet: меньше, быстрее, точнее

- размер ядра свертки, а

MobileNet: меньше, быстрее, точнее

— количество входных каналов.

Общая вычислительная сложность сверточного слоя равна

MobileNet: меньше, быстрее, точнее

, Где

MobileNet: меньше, быстрее, точнее

– высота и ширина слоя (считаем, что пространственные размеры входного и выходного тензоров совпадают),

MobileNet: меньше, быстрее, точнее

— количество выходных каналов.

Идея глубинно-разделимой свертки состоит в том, чтобы разложить такой слой на глубинную свертку, которая представляет собой поканальный фильтр, и свертку 1x1 (также называемую поточечной сверткой).

Общее количество операций по нанесению такого слоя равно

MobileNet: меньше, быстрее, точнее

.

По большому счету, это все, что вам нужно знать для успешного построения MobileNet.

Структура Мобильной сети

Слева — блок обычной сверточной сети, а справа — базовый блок MobileNet.

MobileNet: меньше, быстрее, точнее

Интересующая нас сверточная часть сети состоит из одного обычного сверточного слоя со сверткой 3х3 в начале и тринадцати блоков, показанных справа на рисунке, с постепенно увеличивающимся количеством фильтров и уменьшающейся пространственной размерностью тензора.

Особенностью этой архитектуры является отсутствие максимального количества слоев пула.

Вместо этого, чтобы уменьшить пространственную размерность, используется свертка с параметром шага, равным 2. Два гиперпараметра архитектуры MobileNet:

MobileNet: меньше, быстрее, точнее

(множитель ширины) и

MobileNet: меньше, быстрее, точнее

(множитель глубины или множитель разрешения).

Множитель ширины отвечает за количество каналов в каждом слое.

Например,

MobileNet: меньше, быстрее, точнее

дает нам архитектуру, описанную в статье, и

MobileNet: меньше, быстрее, точнее

— архитектура с уменьшенным в четыре раза количеством каналов на выходе каждого блока.

Множитель разрешения отвечает за пространственные размеры входных тензоров.

Например,

MobileNet: меньше, быстрее, точнее

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

Оба параметра позволяют варьировать размер сети: уменьшая

MobileNet: меньше, быстрее, точнее

И

MobileNet: меньше, быстрее, точнее

, мы снижаем точность распознавания, но при этом увеличиваем скорость работы и уменьшаем потребление памяти.



МобилНетВ2

Появление MobileNet само по себе произвело революцию в компьютерном зрении на мобильных платформах, но несколько дней назад Google опубликовано публично MobileNetV2 — следующее поколение нейронных сетей этого семейства, позволяющее добиться примерно такой же точности распознавания при еще большей скорости работы.



Как выглядит MobileNetV2?

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

Как и в MobileNetV1, имеются сверточные блоки с шагом 1 (на рисунке слева) и с шагом 2 (на рисунке справа).

Блоки с шагом 2 предназначены для уменьшения пространственной размерности тензора и в отличие от блока с шагом 1 не имеют остаточных связей.



MobileNet: меньше, быстрее, точнее

Блок MobileNet, названный авторами расширяющийся сверточный блок (в оригинале блок свертки расширения или блок свертки узкого места со слоем расширения ), состоит из трех слоев:

  1. Сначала идет поточечная свертка с большим количеством каналов, называемая слой расширения .

    На вход этот слой принимает тензор размерности

    MobileNet: меньше, быстрее, точнее

    , и на выходе получается тензор

    MobileNet: меньше, быстрее, точнее

    , Где

    MobileNet: меньше, быстрее, точнее

    — новый гиперпараметр, называемый уровнем расширения (в исходном коэффициенте расширения).

    Авторы рекомендуют установить для этого гиперпараметра значение от 5 до 10, причем меньшие значения лучше работают для небольших сетей, а большие значения — для более крупных (в самой статье все эксперименты предполагают

    MobileNet: меньше, быстрее, точнее

    ).

    Этот слой создает отображение входного тензора в многомерное пространство.

    Такое отображение авторы называют «целевым многообразием» (в оригинале «множество интересов» )

  2. Затем идет глубинная свертка с РеЛУ6 -активация.

    Этот уровень вместе с предыдущим по сути образует уже знакомый строительный блок MobileNetV1. На вход этот слой принимает тензор размерности

    MobileNet: меньше, быстрее, точнее

    , и на выходе получается тензор

    MobileNet: меньше, быстрее, точнее

    , Где

    MobileNet: меньше, быстрее, точнее

    — шаг свертки (шаг), потому что, как мы помним, глубинная свертка не меняет количество каналов.

  3. В конце идет свертка 1х1 с линейной функцией активации, уменьшающая количество каналов.

    Авторы статьи выдвинули гипотезу о том, что полученное после предыдущих шагов многомерное «целевое многообразие» можно «уложить» в подпространство меньшей размерности без потери полезной информации, что собственно и происходит на этом шаге (как и может Как видно из результатов эксперимента, эта гипотеза вполне оправдана).

    На вход такой слой принимает тензор размерности

    MobileNet: меньше, быстрее, точнее

    , и на выходе получается тензор

    MobileNet: меньше, быстрее, точнее

    , Где

    MobileNet: меньше, быстрее, точнее

    — количество каналов на выходе блока.



MobileNet: меньше, быстрее, точнее

По сути, это третий слой в этом блоке, называемый узкий слой и является основным отличием второго поколения MobileNet от первого.

Теперь, когда мы знаем, как работает MobileNet, давайте посмотрим, насколько хорошо он работает.

Практические результаты

Давайте сравним несколько сетевых архитектур.

Возьмем для примера Xception, о котором был предыдущий пост, глубокий и старый VGG16, а также несколько вариаций MobileNet.

Сетевая архитектура Количество параметров Топ-1 точность Топ-5 точности
Xception 22,91М 0.790 0.945
ВГГ16 138,35М 0.715 0.901
MobileNetV1 (альфа=1, ро=1) 4.20М 0.709 0.899
MobileNetV1 (альфа=0,75, ро=0,85) 2,59 млн.

0.672 0.873
MobileNetV1 (альфа=0,25, ро=0,57) 0,47М 0.415 0.663
MobileNetV2 (альфа=1,4, ро=1) 6,06М 0.750 0.925
MobileNetV2 (альфа=1, ро=1) 3,47 млн.

0.718 0.910
MobileNetV2 (альфа=0,35, ро=0,43) 1,66М 0.455 0.704
Мне кажется, самым большим достижением от этих экспериментов является то, что теперь сети, способные работать на мобильных устройствах, показывают точность выше, чем у VGG16. Также статья про MobileNetV2 показывает очень интересные результаты и на других задачах.

В частности, авторы демонстрируют, что архитектура SSDLite для задачи обнаружения объектов с использованием MobileNetV2 в сверточной части превосходит известный детектор реального времени YOLOv2 с точки зрения точности обработки набора данных.

МС КОКО , при этом показывая в 20 раз большую скорость и в 10 раз меньший размер (в частности, на смартфоне Google Pixel сеть MobileNetV2 позволяет делать обнаружение объектов с частотой 5 FPS).



MobileNet: меньше, быстрее, точнее



Что дальше?

С MobileNetV2 мобильные разработчики получают практически неограниченные инструменты в области компьютерного зрения — помимо относительно простых моделей классификации изображений, мы теперь можем использовать алгоритмы обнаружения объектов и семантической сегментации непосредственно на мобильном устройстве.

При этом использовать MobileNet с помощью Keras и TensorFlow настолько просто, что в принципе разработчики могут это сделать, даже не вникая во внутреннюю структуру алгоритмов, как завещает знаменитый комикс.

Теги: #TensorFlow #глубокое обучение #нейронные сети #Машинное обучение #Google #MobileNet #mobilenet #mobilenetv2 #Разработка мобильных приложений #Алгоритмы #Обработка изображений #математика #Машинное обучение

Вместе с данным постом часто просматривают: