Сетевой анализ (2): подробное объяснение MobileNets

Нейронные сети

Резюме

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

Введение

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

Адрес бумаги:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

Гражданская реализация:CaffeTensorflow_1|Tensorflow_2

Официальный код:mobilenet_v1.md

Скачать статью: пожалуйста, перейдите наконец статьиСкачать здесь.

2. Аннотация

Мы предлагаем класс эффективных моделей под названием MobileNets для мобильных и встроенных приложений машинного зрения.Сети MobileNet основаны на упрощенной архитектуре, в которой используются разделяемые по глубине свертки для создания облегченных глубоких нейронных сетей.Введем два простыхглобальные гиперпараметры, эффективно уравновешивая задержку и точность. Эти два гиперпараметра позволяют разработчику модели выбрать модель подходящего размера для своего приложения на основе ограничений проблемы. Мы проводим обширные эксперименты по поиску компромиссов между ресурсами и точностью, и MobileNets демонстрируют высокую производительность по сравнению с другими популярными сетевыми моделями по классификации ImageNet. Наконец, мы демонстрируем эффективность MobileNets в широком диапазоне сценариев приложений, включая обнаружение объектов, точную классификацию, атрибуты лиц и крупномасштабную геолокацию.

3. Фон

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

В конце концов, многие потребительские товары представляют собой встроенные терминальные продукты, а вычислительная производительность встроенных чипов не очень высока. Даже если мы рассмотрим облачные вычисления, они должны потреблять много ресурсов полосы пропускания и вычислительных ресурсов. Поэтому оптимизация CNN стала одной из важных тем для того, чтобы продукты глубокого обучения укоренились на потребительском рынке. Поэтому многие ученые начали изучать сетевую оптимизацию CNN, например, SqueezeNet Хана Сонга, Deep Compression, SVD Лекуна, MobileNet Google и ShuffleNet Сунь Цзяня.

По сути, метод оптимизации сетевого сжатия имеет два направления развития, одно — трансферное обучение, а другое — разреженное сетевое. Трансферное обучение относится к влиянию одного вида обучения на другой вид обучения, например, поведение, заключающееся в выводе других из одного случая, чтобы уменьшить зависимость модели от количества данных. Тем не менее, он также может реализовать миграцию больших моделей в маленькие модели путем дистилляции знаний (дистилляции знаний).Работой в этой области занимается MobileID гонконгской китайской группы Tang Xiaoou. Они используют технологию сжатия моделей и знания предметной области, чтобы разместить большой объем данных в небольшой сети, и используют знания большой сети учителей в качестве контроля для обучения небольшой и компактной сети учеников Цель состоит в том, чтобы перенести DeepID на мобильные терминалы и встроенные устройства средний. С другой стороны, разреженность сети является основным направлением оптимизации сжатия.Работа в этой области в основном основана на сокращении и корректировке свертки сетевой структуры. Например, при глубоком сжатии сначала обучается сеть с большим объемом и плотностью с помощью таких методов, как отсев, L1/L2-регуляризация и т. д., которые могут генерировать разреженность весов, а затем отсекаются веса, которые вносят меньший вклад (т. е. разреженные). ) в сети. , что равносильно удалению некоторых избыточных соединений, и, наконец, тонкой настройке модели, чтобы получить эффект, который, по его словам, составляет степень сжатия 30%. Однако его повышение эффективности не подходит для большинства ЦП общего назначения, потому что его хранилище носит прерывистый характер, и промахи кэша могут возникать при индексировании весов, но выигрыш перевешивает выигрыш. MobileNet, описанный ниже, имеет больше преимуществ в этом отношении.MobileNets в основном ориентированы на оптимизацию задержки с учетом размера модели, в отличие от некоторых моделей с небольшим количеством параметров.

4. Структура модели MobliNets

Основная работа MobileNet заключается в замене прошлых стандартных сверток (standard convolutions) на разбиваемые по глубине свертки (deep-level separable convolutions) для решения проблем вычислительной эффективности и размера параметров сверточных сетей. Модель MobileNets основана на разнесенных по глубине свертках (свертках, отделяемых на уровне глубины), которые могут разлагать стандартные свертки на свертки по глубине и точечную свертка (ядро свертки 1 × 1).Глубинная свертка применяет каждое ядро ​​к каждому каналу, а свертка 1 × 1 используется для объединения выходных данных сверток канала.

1. Объяснение принципа

На следующем рисунке показано, как декомпозируется стандартная свертка:

Он разлагает стандартные свертки на глубинную свертку (глубинная свертка) и точечную свертку (точечная свертка), что по умолчанию предполагает, что эффект разложенной свертки и эффект стандартной свертки являются приблизительными. В качестве простого примера предположим, что у нас есть входное изображение, размер этого входного изображения составляет 11 x 11 x 3, а стандартная свертка - 3 x 3 x 3 x 6 (при условии, что шаг равен 2, отступ равен 1), тогда вы can Выход: 6 × 6 × 16 (6 = (11-3+2*1)/2+1). Теперь, когда входное изображение осталось неизменным, сначала пропустите свертку глубины размерностью 3 × 3 × 1 × 3 (вход — 3 канала, и на 3 канала действует 3 ядра свертки соответственно), чтобы получить 6 × 6 × 3 Промежуточный выход , а затем через свертку 1 × 1 с размерностью 1 × 1 × 3 × 16, выход также 6 × 6 × 16.

Фактически, по умолчанию предполагается, что обычное ядро ​​свертки имеет характеристику декомпозиции, подобную линейной комбинации, в отображении измерений каналов карт признаков. Обозначим через K регулярное ядро ​​свертки, тогда:

Среди них «⋅» представляет собой специальное матричное умножение, а его алгоритм относится к следующей формуле: b — это m-мерный матричный «вектор» (матричные пространства), и каждый его элемент (элемент) имеет размер × s 2-мерное ядро ​​свертки:

Λ(b) представляет диагональную матрицу с bi в качестве диагональных элементов, то есть:

И M представляет собой числовую матрицу n × m, где количество n строк представляет размерность карт выходных объектов (количество выходных каналов), а m представляет размерность карт входных объектов (количество входных каналов). Ради интуиции я запишу приведенную выше формулу K в следующем виде:

Среди них kij=µijbj представляет собой числовую матрицу размера s×s, представляющую 2-мерное маленькое ядро ​​свертки в 4-мерном регулярном ядре свертки. Затем мы используем приведенную выше формулу для анализа степени сжатия суммы расчета модели.Количество расчета обычного ядра свертки K:

Расчетная сумма свертки Separable MobileNet:

Тогда степень сжатия:

Мы можем легко обнаружить, что этот результат совпадает с исходной скоростью сокращения вычислений, потому что MobileNet по существу разработан на основе этого предположения о декомпозиции ядра. Кроме того, из формулы K у нас также могут быть некоторые интересные идеи: если M более разреженное, можно ли дополнительно оптимизировать эту сеть? Ответ — да, коэффициент α, введенный в тексте, потому что это эквивалентно разрежению матрицы M на:

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

И размер выходной карты объектов:

где DF — ширина и высота карты признаков, которые считаются одинаковыми. Для стандартной свертки:

Его вычисление будет:

А для глубинной свертки сумма расчета равна:

Вычисление поточечной свертки:

Таким образом, общее вычисление разделимой по глубине свертки:

Глубинно отделимую свертка и стандартная свертка можно сравнить следующим образом:

В общем, N относительно велико, поэтому, если используется ядро ​​свертки 3x3, свертка с разделением по глубине может сократить объем вычислений примерно в 9 раз по сравнению со стандартной сверткой. На самом деле сравнения будут позже, и объем вычислений сильно уменьшится. Это также согласуется с предположением, которое мы сделали выше.

2. Структура сети

Ранее была описана разделимая по глубине свертка, которая является базовым компонентом MobileNet, но в реальном приложении будет добавлена ​​пакетная нормализация (BN).Что такое BN? Как следует из названия, нормализация партии — это «нормализация партии». Описание Google в статье ICML очень ясное, то есть в каждом SGD (стохастический градиентный спуск) соответствующая активация нормализуется через мини-пакет, так что среднее значение результата (каждого измерения выходного сигнала) равно 0 и дисперсия 1. .

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

Кроме того, в модели также используется функция активации ReLU, поэтому базовая структура свертки с разделением по глубине показана на следующем рисунке:

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

Как показано на рисунке выше, первой является стандартная свертка 3x3, а затем следует сложенная свертка с разделением по глубине, и видно, что некоторые из сверток по глубине будут понижать дискретизацию (понижающую дискретизацию) через strides=2 (размер шага) . Затем используйте средний пул (средний пул), чтобы превратить функцию в 1x1, добавить полносвязный слой в соответствии с предсказанным размером категории и, наконец, слой softmax. Если глубинная свертка и точечная свертка рассчитываются отдельно, вся сеть имеет 28 слоев (здесь не учитываются Avg Pool и Softmax).

Мы также можем проанализировать распределение параметров и вычислений всей сети, как показано на следующем рисунке:

Видно, что весь объем вычислений в основном сосредоточен на свертке 1 x 1. Если вы знакомы с базовой реализацией свертки, вы должны знать, что свертка обычно реализуется в методе im2col, который требует реорганизации памяти, но когда ядро ​​​​свертки составляет 1x1, на самом деле эта операция не нужна, и нижний слой можно реализовать быстрее. Параметры в основном сосредоточены в свертке 1x1, кроме того, полносвязный слой приходится на часть параметров.

Каково влияние MobileNet? Вот сравнение с GoogleNet и VGG16, как показано на следующем рисунке:

По сравнению с VGG16 точность MobileNet немного ниже, но лучше, чем у GoogleNet. Однако MobileNet имеет безусловные преимущества с точки зрения вычислительных и параметрических величин.

3. MoblieNets для похудения

Базовая модель MobileNet упоминалась ранее, но иногда вам нужна модель меньшего размера, тогда вам нужно уменьшить MobileNet. Здесь вводятся два гиперпараметра: множитель ширины и множитель разрешения.

Множитель ширины:

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

Фактически, это эквивалентно разрежению матрицы M на:

Применение множителя ширины может еще больше сократить объем вычислений, оставив примерно α*α места для оптимизации.

Множитель разрешения:

Второй гиперпараметр — это множитель разрешения ρ Например, исходная карта входных объектов имеет размер 224x224, который можно уменьшить до 192x192. Множитель разрешения используется для изменения разрешения слоя входных данных, что также уменьшает параметры. При совместном действии α и ρ вычисление определенного уровня MobileNets:

Следует отметить, что множитель разрешения влияет только на количество вычислений, но не меняет количество параметров. Среди них ρ является неявным параметром, если ρ равно {1, 6/7, 5/7, 4/7}, соответствующее входное разрешение равно {224, 192, 160, 128}, а пространство оптимизации ρ параметр также ρ2 или около того. На рисунке ниже вы можете увидеть роль двух гиперпараметров в снижении параметров сети:

4. Экспериментальный анализ

Выбор модели:

Та же архитектура MobileNets, использующая разделяемые свертки, снижает значение точности на 1%, тогда как параметры составляют всего 1/7.

Узкая сеть на 3% точнее мелкой сети:

Гиперпараметры сжатия модели:

Когда альфа-гиперпараметр уменьшается, точность модели уменьшается по мере того, как модель становится тоньше:

Когда гиперпараметр ρ уменьшается, точность модели уменьшается по мере уменьшения разрешения модели:

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

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

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

blog.CSDN.net/Jesse_MX/AR…

blog.CSDN.net/Sun_28/Ariti…

Ууху. Call.com/question/38…

zhuanlan.zhihu.com/p/31551004

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