Если пять лет назад нейронная сеть считалась «тяжелым» алгоритмом, требующим оборудования, специально предназначенного для высоконагруженных вычислений, то сегодня никого не удивят глубокие сети, работающие непосредственно на мобильном телефоне.
Сегодня сети распознают ваше лицо, чтобы разблокировать телефон, стилизовать фотографии под знаменитых художников и определить, есть ли в кадре хот-дог .
В этой статье мы поговорим о MobileNet — усовершенствованной сверточной сетевой архитектуре, которая позволяет делать все это и многое другое.
Статья будет состоять из трёх частей.
В первой мы рассмотрим структуру сети, а также хитрости, которые придумали авторы.
оригинальная научная работа предложил оптимизировать скорость работы алгоритма.
Во второй части мы поговорим об очередной версии MobileNetV2, статью о которой исследователи из Google опубликовали всего пару месяцев назад. Наконец, мы обсудим практические результаты, достижимые с помощью этой архитектуры.
В предыдущих сериях
В последний пост Мы рассмотрели архитектуру Xception, которая позволила значительно сократить количество параметров в сверточной сети с архитектурой, подобной Inception, за счет замены обычных сверток на так называемые свертки, разделяемые по глубине.Кратко напомню, что это такое.
Обычная свертка — это фильтр
, Где
- размер ядра свертки, а
— количество входных каналов.
Общая вычислительная сложность сверточного слоя равна
, Где
– высота и ширина слоя (считаем, что пространственные размеры входного и выходного тензоров совпадают),
— количество выходных каналов.
Идея глубинно-разделимой свертки состоит в том, чтобы разложить такой слой на глубинную свертку, которая представляет собой поканальный фильтр, и свертку 1x1 (также называемую поточечной сверткой).
Общее количество операций по нанесению такого слоя равно
.
По большому счету, это все, что вам нужно знать для успешного построения MobileNet.
Структура Мобильной сети
Слева — блок обычной сверточной сети, а справа — базовый блок MobileNet.Интересующая нас сверточная часть сети состоит из одного обычного сверточного слоя со сверткой 3х3 в начале и тринадцати блоков, показанных справа на рисунке, с постепенно увеличивающимся количеством фильтров и уменьшающейся пространственной размерностью тензора.
Особенностью этой архитектуры является отсутствие максимального количества слоев пула.
Вместо этого, чтобы уменьшить пространственную размерность, используется свертка с параметром шага, равным 2.
Два гиперпараметра архитектуры MobileNet:
(множитель ширины) и
(множитель глубины или множитель разрешения).
Множитель ширины отвечает за количество каналов в каждом слое.
Например,
дает нам архитектуру, описанную в статье, и
— архитектура с уменьшенным в четыре раза количеством каналов на выходе каждого блока.
Множитель разрешения отвечает за пространственные размеры входных тензоров.
Например,
означает, что высота и ширина карты объектов, подаваемой на вход каждого слоя, будут уменьшены вдвое.
Оба параметра позволяют варьировать размер сети: уменьшая
И
, мы снижаем точность распознавания, но при этом увеличиваем скорость работы и уменьшаем потребление памяти.
МобилНетВ2
Появление MobileNet само по себе произвело революцию в компьютерном зрении на мобильных платформах, но несколько дней назад Google опубликовано публично MobileNetV2 — следующее поколение нейронных сетей этого семейства, позволяющее добиться примерно такой же точности распознавания при еще большей скорости работы.
Как выглядит MobileNetV2?
Базовый строительный блок этой сети во многом аналогичен предыдущему поколению, но имеет ряд ключевых особенностей.Как и в MobileNetV1, имеются сверточные блоки с шагом 1 (на рисунке слева) и с шагом 2 (на рисунке справа).
Блоки с шагом 2 предназначены для уменьшения пространственной размерности тензора и в отличие от блока с шагом 1 не имеют остаточных связей.
Блок MobileNet, названный авторами расширяющийся сверточный блок (в оригинале блок свертки расширения или блок свертки узкого места со слоем расширения ), состоит из трех слоев:
- Сначала идет поточечная свертка с большим количеством каналов, называемая слой расширения .
На вход этот слой принимает тензор размерности
, и на выходе получается тензор
, Где
— новый гиперпараметр, называемый уровнем расширения (в исходном коэффициенте расширения).Авторы рекомендуют установить для этого гиперпараметра значение от 5 до 10, причем меньшие значения лучше работают для небольших сетей, а большие значения — для более крупных (в самой статье все эксперименты предполагают
).Этот слой создает отображение входного тензора в многомерное пространство.
Такое отображение авторы называют «целевым многообразием» (в оригинале «множество интересов» )
- Затем идет глубинная свертка с РеЛУ6 -активация.
Этот уровень вместе с предыдущим по сути образует уже знакомый строительный блок MobileNetV1. На вход этот слой принимает тензор размерности
, и на выходе получается тензор
, Где
— шаг свертки (шаг), потому что, как мы помним, глубинная свертка не меняет количество каналов. - В конце идет свертка 1х1 с линейной функцией активации, уменьшающая количество каналов.
Авторы статьи выдвинули гипотезу о том, что полученное после предыдущих шагов многомерное «целевое многообразие» можно «уложить» в подпространство меньшей размерности без потери полезной информации, что собственно и происходит на этом шаге (как и может Как видно из результатов эксперимента, эта гипотеза вполне оправдана).
На вход такой слой принимает тензор размерности
, и на выходе получается тензор
, Где
— количество каналов на выходе блока.
По сути, это третий слой в этом блоке, называемый узкий слой и является основным отличием второго поколения 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 |
В частности, авторы демонстрируют, что архитектура SSDLite для задачи обнаружения объектов с использованием MobileNetV2 в сверточной части превосходит известный детектор реального времени YOLOv2 с точки зрения точности обработки набора данных.
МС КОКО , при этом показывая в 20 раз большую скорость и в 10 раз меньший размер (в частности, на смартфоне Google Pixel сеть MobileNetV2 позволяет делать обнаружение объектов с частотой 5 FPS).
Что дальше?
С MobileNetV2 мобильные разработчики получают практически неограниченные инструменты в области компьютерного зрения — помимо относительно простых моделей классификации изображений, мы теперь можем использовать алгоритмы обнаружения объектов и семантической сегментации непосредственно на мобильном устройстве.При этом использовать MobileNet с помощью Keras и TensorFlow настолько просто, что в принципе разработчики могут это сделать, даже не вникая во внутреннюю структуру алгоритмов, как завещает знаменитый комикс.
Теги: #TensorFlow #глубокое обучение #нейронные сети #Машинное обучение #Google #MobileNet #mobilenet #mobilenetv2 #Разработка мобильных приложений #Алгоритмы #Обработка изображений #математика #Машинное обучение
-
Знаете Ли Вы, Что Такое Облачный Хостинг?
19 Oct, 24 -
Просыпайтесь Правильно
19 Oct, 24 -
Mod_Wsgi 3.1 Вышел 25 Ноября.
19 Oct, 24 -
Архлинукс 2009.2
19 Oct, 24 -
Отказ От Архитектуры Powerpc
19 Oct, 24