A Quantization-Friendly Separable Convolution for MobileNets
Статья: «Удобная для квантования разделимая свертка для мобильных сетей»
Адрес бумаги:АР Вест V.org/PDF/1803.08…
Это статья, опубликованная Qualcomm в 2018 году. В ней в основном исследуется сеть MobileNetV1, которая имеет плохой эффект квантования, и исследуются причины ее серьезных точек падения квантования (от 70,5% модели с плавающей запятой до 1,8% модели квантования). . %), и обнаружил, что основной причиной является в основном разделяемая свертка. Хотя это значительно уменьшает количество параметров и памяти MobileNetV1, побочным эффектом является то, что эффект квантования очень плохой. Поэтому автор предлагает три улучшения для решения эта проблема.Эффект квантования MobileNetV1:
- Удалить BN и ReLU6 в разделяемой свертке;
- Используйте ReLU вместо ReLU6 на других сетевых уровнях;
- Использование регуляризации L2 в разделимых сверточных слоях
Вышеупомянутая операция, наконец, улучшает эффект квантования всего с 1,8% до 68,03%, что значительно уменьшает проблему точек падения квантования.
Контакты:
Гитхаб:GitHub.com/CCC013/AI_Ah…
Знать столбец:Машинное обучение и компьютерное зрение,Бумажные заметки с искусственным интеллектом
Публичный аккаунт WeChat:Примечания к алгоритму ИИ
1. Введение
Квантование очень важно для выполнения операций глубокого обучения на мобильных телефонах и платформах IoT, главным образом потому, что эти платформы имеют относительно большие ограничения с точки зрения энергопотребления и использования памяти, и эти платформы на самом деле очень зависят от процессоров цифровых сигналов (DSP). Аппаратные модули с точечными вычислениями могут обеспечить более эффективную производительность, чем графические процессоры. На такой платформе часто используемые глубокие сетевые структуры, такие как VGG, GoogleNet, ResNet и т. д., сложно развернуть на мобильных платформах из-за их большого количества параметров и вычислений, в то время как некоторые облегченные сети можно использовать по стандарту. заменяется методом свертки с разделением по глубине для достижения баланса между точностью и эффективностью, как показано на рисунках а и б ниже, например MobileNetV1, предложенный Google, который значительно уменьшает количество параметров и памяти, поэтому он широко используется развертывание в сетевой структуре на телефоне. Однако побочным эффектом является то, что отдельные используемые сверточные слои вызывают огромные потери при квантовании, что делает эффект квантования очень слабым.
Для упомянутой выше проблемы квантования автор использовал структуру TensorFlow для реализации MobileNetV1 и InceptionV3 и сравнил точность модели с плавающей запятой и вершинной модели после квантования.Как показано на рисунке ниже, видно, что точность of InceptionV3 не упал после квантования.Много, наоборот, точность MobileNetV1 после квантования значительно упала.Автор также дал оценку двух сетей.Первый имеет только стандартную свертку,а второй в основном использует раздельную свертку .
Есть несколько способов решить эту серьезную проблему количественного определения:
- Самый прямой метод - использовать больше битов количественного определения. Например, обновление с 8 бит до 16 бит может повысить точность, но также увеличит количество параметров и вычислений модели, что ограничено емкостью целевой платформы. ;
- Второй метод заключается в переобучении количественной модели, предназначенной для вывода с фиксированной точкой;
Для второго метода Google предложил структуру обучения квантованию в статье «Квантование и обучение нейронных сетей для эффективного вывода только целочисленных арифметических операций», которая может имитировать эффект квантования при прямом обучении, а при обратном распространении сохраняет исходную плавающую точку. учебная операция. Эта структура может уменьшить потери при квантовании за счет дополнительного обучения, но она должна поддерживать несколько моделей для разных платформ.
В этой статье автор использует новый структурный дизайн для отделимого сверточного слоя, чтобы построить легковесную сеть, удобную для квантования. Новая структура требует только одного обучения с плавающей запятой, а обученную модель можно развернуть на разных платформах с минимальной потерей точности, будь то вывод с плавающей запятой или с фиксированной запятой. Чтобы достичь этого, автор разрабатывает новый MobileNetV1, удобный для квантования, находя основную причину потери точности MobileNetV1 при квантовании, и на основе найденных причин он может поддерживать точность в моделях с плавающей запятой и в моделях с фиксированной запятой. после квантования точность модели значительно повышается.
Вклад этой статьи:
- Автор считает, что bn и ReLU6 являются основными причинами больших потерь при квантовании MobileNetV1;
- Мы предлагаем удобную для квантования отделимую свертку и демонстрируем ее эффективность на MobileNetV1 при обучении вычислений с плавающей запятой и квантованной фиксированной запятой;
2. Схема количественной оценки и анализ потерь
В этом разделе будет изучена основная причина потери точности в конвейере с фиксированной точкой 8-битной квантованной модели MobileNetV1 на основе TensorFlow (TF).На следующем рисунке показан классический 8-битный процесс квантования. 8-битная квантованная модель TF сначала создается непосредственно из предварительно обученной модели с плавающей запятой, и ее веса сначала квантуются в автономном режиме, а затем на этапе логического вывода все входные данные с плавающей запятой сначала квантуются в 8-битное беззнаковое значение. значение, а затем операции выполнения, переданные вершине, такие какQuantizedConv2d, QuantizedAdd, QuantizedMul
и т. д., они генерируют 32-битный кумулятивный результат, который затем преобразуется в 8-битный выходной сигнал посредством шага активации повторного квантования, который затем передается в следующую операцию.
2.1 8-битная схема квантования TensorFlow
8-битное квантование TensorFlow использует универсальный квантователь, что означает, что все шаги квантования имеют одинаковую длину.
позволятьпредставляет вход с плавающей запятой x, а 8-битное значение после квантования TensorFlow представлено как, формула расчета выглядит следующим образом:
вОн представляет размер шага квантования, а b представляет ширину в битах.Например, 8 бит, упомянутые в этой статье, равны b=8, апредставляет значение смещения, аРаспределение представляет собой минимальное и максимальное значения диапазона значений с плавающей запятой и дополнительноПредставляет ближайшую операцию округления, которая реализована в TensorFlow следующим образом:
Основываясь на приведенном выше определении, вычисление совокупного результата операции свертки выглядит следующим образом:
Наконец, учитывая известные максимальное и минимальное значения выхода, объединяя приведенные выше формулы (1)-(4), выход, полученный обратным квантованием, можно рассчитать по следующей формуле:
2.2 Метрики потерь квантования
Как показано на рисунке 2 выше, существует 5 типов потерь в этом конвейере квантования, включая потери входного квантования, потери весового квантования, потери насыщения во время выполнения, потери обратного квантования активации и возможную нелинейность потерь детерминированной конструкции для таких операций, как РеЛУ6. Чтобы лучше понять вклад, обеспечиваемый различными типами потерь, в этой статье используется отношение сигнал/шум квантования (SQNR) для оценки точности квантования выходных данных каждого сетевого уровня.SQNR рассчитывается следующим образом: она определяется как энергия неквантованного сигнала x, деленная на энергию ошибки квантования n:
Поскольку средняя величина входного сигнала x намного больше размера шага квантования, поэтому разумным предположением является то, что ошибка квантования является однородным распределением со средним значением 0, а ее функция плотности вероятности (PDF) объединена как 1. Следовательно, для 8-битного линейного квантователя его энергия шума может быть рассчитана как следует:
Комбинируя (2), (7) и (6), можно получить следующую формулу:
SQNR имеет большую связь с распределением сигнала.Согласно формуле (8), SQNR, очевидно, определяется энергией x и диапазоном квантования.Поэтому, увеличивая способность входного сигнала или уменьшая диапазон квантования, можно улучшить вывод SQNR.
2.3 Анализ потерь квантования MobileNetV1
2.3.1 BN в глубоких сверточных слоях
Как показано на рисунке (b) ниже, базовый уровень MobileNetV1 содержит свертку по глубине и точечную свертку, за которыми следуют BN и нелинейная функция активации, такая как ReLU или ReLU6. В реализации TensorFlow в качестве нелинейной функции активации используется ReLU6.
Если предположить, что x является входом каждого слоя, он включает d каналов, а размер каждого пакета равен m, то в глубинной свертке BN преобразуется независимо в каждом канале, и формула его расчета выглядит следующим образом:
впредставляет нормализованное i-е входное значение в канале k,ипредставляет среднее значение и дисперсию всей партии,Указывает размер и значения передачи. и— очень маленькая константа, в реализации TensorFlow ее значение равно 0,0010000000475.
В процессе с фиксированной точкой преобразование BN можно свернуть, сначала пусть:
Тогда (9) можно переписать как:
В реализации TensorFlow в каждом канале kВеса можно комбинировать и складывать в операции свертки для снижения вычислительных затрат.
Хотя свертка по глубине применяется к каждому каналу в отдельности, минимальное и максимальное значения весового квантования выбираются в диапазоне всех каналов, что приводит к проблеме, что выброс в одном канале, скорее всего, приведет к потере Вся модель Огромные потери при квантовании, потому что выбросы увеличивают числовой диапазон данных.
Кроме того, без операций межканальной коррекции свертки по глубине, скорее всего, будут давать нулевые значения в канале, что приводит к дисперсии канала, равной 0, и такая ситуация очень распространена в MobileNetV1. Согласно формуле (10), когда дисперсия равна 0 из-за очень малого набора констант,будет очень большим, как показано на рисунке ниже, размером 32 каналаЧисловой, 6 выбросов из-за нулевой дисперсиизаключается в увеличении диапазона квантования, что приводит к тому, что количество битов квантования тратится впустую, сохраняя эти огромные значения из нулевого канала, в отличие от меньших для каналов с информацией.Наоборот, не сохраняется, что значительно ухудшает репрезентативность всей модели.
Из эксперимента можно узнать, что эта проблема может быть хорошо решена путем изменения дисперсии этих нулевых каналов на среднее значение дисперсии остальных каналов без переобучения, что позволяет проверить квантованную модель MobileNetV1 в ImageNet2012. на наборе улучшается с предыдущих 1,8% до 45,73%.
Стандартный слой свертки завершает фильтрацию и объединение входных данных за один шаг для получения нового выходного значения, в то время как в MobileNetV1 свертка с разделением по глубине делит эту операцию на два слоя.Точечная свертка реализует комбинированную операцию, что значительно снижает вычислительные затраты. и размер модели, и может поддерживать точность модели.
Основываясь на вышеуказанных принципах, в этой статье рассматривается удаление BN и ReLU6 после свертки глубины и предоставление свертки глубины изучения соответствующих весов для замены роли BN.Эта операция может сохранить способность представления функций и сделать модель Он может очень хорошо реализовать количественную операцию.
Как показано на рисунке ниже, SQNR используется здесь для наблюдения за потерями квантования каждого слоя, где черная линия представляетMobileNetV1 свернутый в сверточные веса, синяя линия указывает, что BN и ReLU6 удалены во всех глубинных сверточных слоях, а красная линия указывает, что после удаления BN и ReLU6 глубинного сверточных слоев он все еще поточечно свертка ReLU используется в слое вместо ReLU6, а BN и ReLU6 в поточечном сверточном слое также сохраняются, а затем используемые изображения выбираются случайным образом 1 изображение на категорию из проверочного набора ImageNet2012, всего 1000 изображений, как видно из экспериментальных результатов. Сохранение BN и ReLU6 в сверточных слоях по глубине значительно уменьшит SQNR вывода каждого слоя.
2.3.2 ReLU6 или ReLU
В этом разделе по-прежнему используется SQNR в качестве стандарта оценки, который все еще показан на рисунке выше Здесь мы в основном обсуждаем нелинейную функцию активации, используемую в слое свертки точка за точкой, ReLU6 или ReLU. Следует отметить, что для линейного квантователя чем равномернее распределение входного сигнала, тем выше SQNR, в противном случае — ниже;
Из приведенного выше рисунка мы можем сначала заметить, что при использовании ReLU6, SQNR значительно уменьшается, когда первый сверточный слой закипает.Согласно формуле (8), хотя ReLU6 может уменьшить диапазон квантования, энергия входного сигнала также уменьшается за счет к операции клипа. В идеале его SQNR должен быть похож на ReLU, но на самом деле побочным эффектом операции клипа является то, что распределение входного сигнала будет искажено в первых нескольких сетевых слоях, что сделает его менее удобным для квантования. экспериментальные результаты, это приводит к первому: когда один слой переходит в другие слои, SQNR сильно падает;
2.3.3 L2-регуляризация весов
Как упоминалось выше, SQNR имеет большую связь с распределением сигнала. Далее автор использует регуляризацию L2 для весов всех глубоких сверточных слоев в обучении. Регуляризация L2 может наказывать большое количество весов, и возможны большие веса. в результате диапазон квантования увеличивается, а весовое распределение становится менее однородным, что приводит к большим потерям при квантовании, а лучшее весовое распределение позволяет получить модель квантования с большей точностью.
3. Удобные для квантования свертки для мобильных сетей
Основываясь на анализе потерь при квантовании в разделе 2, автор предлагает удобную для квантования несвязанную сверточную структуру для MobileNet, цель которой состоит в том, чтобы устранить огромные потери при квантовании, чтобы без переобучения модель квантования могла получать и перемещать модели с аналогичной точностью.
Новый слой разделенной свертки, предложенный автором, показан на рисунке c ниже, который содержит 3 основных изменения, чтобы сделать квантование разделимой свертки удобным:
- Удалены BN и ReLU6 из всех глубинных сверточных слоев..
- Замените ReLU6 на ReLU в оставшихся слоях. Автор считает, что 6 — очень произвольное значение.Хотя ReLU6 позволяет модели обучаться разреженным функциям раньше, его операция отсечения также искажает распределение входных данных в более ранних слоях, что приводит к плохому квантованию распределения, что снижает SQNR каждого слой.
- При обучении используйте регуляризацию L2 для весов во всех глубоких сверточных слоях..
Наконец, сетевая структура MobileNetV1, удобной для квантования, предложенная в этой статье, показана в следующей таблице.После удаления глубокой свертки BN и ReLU6 сетевая структура по-прежнему сохраняет первоначальные преимущества снижения вычислительных потерь и размера модели, а также позволяет выполнять квантование. , Точность модели близка к точности модели с плавающей запятой.
4. Эксперимент
В эксперименте в этой статье используется модифицированный MobileNetV1, реализованный TensorFlow. Параметры обучения такие же, как и в исходной версии. Модификация заключается в том, что размер пакета составляет 128. Графическая карта использует GeForce GTX TITAN X от Nvidia, а набор данных ImageNet2012 используется. в качестве набора для обучения и набора для проверки, а обучение предназначено только для моделей с плавающей запятой.
Экспериментальные результаты показаны на рисунке ниже, показывающем точность модели с плавающей запятой и квантованной модели в разных версиях.Точность исходной версии составляет 70,5% и 1,8% соответственно.Тогда для трех изменений, предложенных в В данной работе были проведены соответственно эксперименты и испытания:
- Только удаляя BN и ReLU6 глубокого сверточного слоя, точность модели с плавающей запятой немного улучшается до 70,55%, а квантованная модель значительно улучшается до 61,5%;
- На основе 1 все ReLU6 заменены на ReLU, модель с плавающей запятой увеличена до 70,8%, а квантовая модель увеличена до 67,8%;
- Продолжая увеличивать регуляризацию весов L2, модель с плавающей запятой немного снижается до 70,77%, но квантовая модель продолжает улучшаться до 68,03%.
5. Заключение
В этой статье анализируется первопричина трудностей с квантованием облегченной сети MobileNetV1 (серьезные потери квантования) и обнаруживается, что это в основном вызвано BN и ReLU6 в глубинной свертке, поскольку особенностью глубинной свертки является работа на каждом канал, Легко привести к тому, что весь канал будет иметь значение 0, что приведет к тому, что дисперсия канала будет равна 0, и, согласно формуле расчета BN, это приведет кОчень большие, то есть генерируются большие выбросы, которые повлияют на диапазон квантования, так что все значения с большим количеством информации, но малыми значениями квантуются до одной и той же фиксированной точки, и эти выбросы не содержат или содержат меньше информации, но сохраняется, что значительно снизит способность количественной модели к представлению признаков, тем самым снизив точность количественной модели.
Основываясь на этом выводе, автор напрямую удалил BN и ReLU6 свертки глубины, а экспериментальные результаты также подтвердили возможность этой операции и двух изменений, внесенных позже, с использованием ReLU вместо других слоев ReLU6. Эффект улучшения также очень хорошо.Очевидно, что улучшение регуляризации L2 носит относительно общий характер.Конечно, автор, похоже, не проводит здесь эксперимент, чтобы сравнить улучшение регуляризации L2 на количественной модели, а улучшение ReLU еще больше;
Кроме того, в настоящее время эксперимент проводится только на MobileNetV1.Автор также упомянул, что этот метод необходимо проверить в других сетях, которые также используют разделяемую свертку, таких как MobileNetV2, ShuffleNet и классификация в этой статье.Такие задачи, как обнаружение и сегментация также эффективны.