Резюме эволюции структуры CNN (1) Классическая модель
предисловие:
В предыдущей статье была представлена эволюция структуры классической модели, а также принципы проектирования, функции, эффекты и т. д. В этой статье упрощенная модель будет обобщена и проанализирована.
Облегченная модель в основном фокусируется на уменьшении объема вычислений, уменьшении параметров, сокращении фактического времени выполнения и упрощении базовой реализации.Она предлагает разделяемую по глубине свертка, групповую свертка, настраиваемые гиперпараметры для уменьшения пространственного разрешения и уменьшения количества каналов.Фактическое время выполнения некоторых существующих структур анализируется, и предлагаются некоторые принципы структурного проектирования, и исходная структура проектируется и перепроектируется в соответствии с этими принципами.
Примечание. В дополнение к описанному выше методу прямого проектирования облегченной и небольшой сетевой структуры он также включает использование дистилляции знаний, низкоранговой обрезки, сжатия моделей и других методов для получения облегченных моделей. В этой статье основное внимание уделяется представлению структурного проектирования, поэтому последние методы не будут обобщаться в этой статье.В серии статей с техническим резюме будут некоторые технические резюме по сжатию модели, дистилляции знаний и т. д., Добро пожаловать, чтобы продолжать обращать внимание. Ответ на «Модели CNN» в Техническом руководстве CV для документов и интерпретаций этих моделей.
Xception(2017)
Xception основан на облегченном улучшении Inception_v3, которое можно считать экстремальным Inception.
Одним из нововведений является:
1. Предложите разделимую по глубине свертку.
Структурная диаграмма Inception_v3 выглядит следующим образом слева, и она становится правой после удаления среднего пути объединения.
Упрощение приведенного выше правого рисунка можно превратить в форму следующего левого рисунка. Когда он экстремальный, он становится структурой, показанной на правом рисунке ниже.
Поэтому при использовании свертки 3х3 для одного канала также формируется крайняя Inception. В то же время автор считает, что сначала свертка 3x3, а затем свертка 1x1 не будет иметь никакого эффекта. Таким образом, крайняя Inception зеркально отображается, сначала выполняется глубинная свертка, а затем выполняется свертка 1x1 для формирования глубинно-разделимой свертки.
Кроме того, экспериментами было доказано, что после использования свертки глубины нелинейная функция активации ReLU больше не может использоваться, и вместо нее можно использовать линейную функцию активации, так что скорость сходимости выше, а показатель точности меньше. выше.
MobileNet_v1(2017)
MobileNet v1 предлагает эффективную сетевую архитектуру и набор из двух гиперпараметров, которые позволяют разработчикам моделей выбирать модель правильного размера для своего приложения на основе ограничений задачи для построения очень маленьких моделей с малой задержкой. Эти модели можно легко сопоставить с Требования к дизайну мобильных и встроенных приложений машинного зрения.
Нововведений два:
1. Предложите использование свертки с разделением по глубине для построения сети и проанализируйте объем вычислений.
Глубоко отделимые свертки разлагают стандартные свертки на глубинные свертки и свертки 1x1 точки. Глубинные свертки применяют один фильтр к каждому входному каналу, а точечные свертки объединяют выходные данные глубоких сверток с весами.Эффект этого разложения заключается в значительном сокращении вычислений и размера модели.
Например, учитывая карты объектов Df x Df x M, сгенерируйте карты объектов Df x Df x N, предполагая, что размер ядра равен Dk. Тогда отношение количества вычислений отделимой по глубине свертки к стандартной свертке равно:
Следовательно, при использовании свертки 3x3 этот метод свертки может сократить объем вычислений в 8-9 раз, а прогресс уменьшается лишь на небольшую величину.
Более того, эта отделимая по глубине свертка — это не просто вопрос сокращения вычислений.
Для неструктурированных разреженных матриц, хотя объем вычислений меньше, чем для плотных матриц, потому что плотные матрицы используют общую функцию умножения матриц (GEMM) внизу для оптимизации (эта оптимизация находится в памяти. Свертка первоначально переупорядочивается с помощью im2col, за которым следует вычисление матричного умножения), поэтому плотные матричные вычисления выполняются быстрее.
Здесь свертка 1x1 в свертке с разделением по глубине не нуждается в переупорядочивании с помощью im2col, а матричная операция может быть использована напрямую.Что касается части свертки по глубине, то количество параметров и вычислений очень мало, и ее можно вычислить в соответствии с оптимизацией нормальной свертки. Следовательно, свертка с отделимой по глубине также чрезвычайно быстра.
2. Предлагается использовать гиперпараметры для настройки размера модели в соответствии с конкретной средой.
Используйте гиперпараметр альфа, чтобы настроить количество ядер свертки глубины, то есть умножьте коэффициент альфа на коэффициент уменьшения на основе количества ядер свертки глубины M и N исходной модели. Используйте гиперпараметр P, чтобы уменьшить пространственное разрешение, умножив исходный размер входного изображения на коэффициент уменьшения P.
Примечание. Этот способ использования гиперпараметров только уменьшает объем вычислений, а количество параметров остается прежним.
MobileNet_v2(2018)
MobileNet_v2 не является новшеством в конструкции облегченной структуры, но предлагает некоторые проблемы, существующие в MobileNet_v1, и предлагает схему улучшения на этой основе.
Нововведений два:
1. Предложите линейные узкие места
MobileNet_v2 предполагает, что ReLU уничтожит данные в низкоразмерном пространстве, в то время как многомерное пространство оказывает меньшее влияние. Поэтому используйте линейную активацию вместо ReLU в низкоразмерном пространстве. Эксперименты показали, что использование линейного слоя в низкоразмерном пространстве весьма полезно, поскольку позволяет избежать нелинейности, разрушающей слишком много информации.
Кроме того, если выходом является ненулевое пространство многообразия, использование ReLU эквивалентно линейному преобразованию, и пространственное отображение не будет реализовано, поэтому MobileNet_v2 использует ReLU6 для реализации нелинейной активации ненулевого космос.
Поэтому его структура показана на следующем рисунке:
2. Предложите перевернутые остатки
MobileNet_v2 вводит остаточные соединения и остаточные блоки, но разница в том, что остаток узкого места в ResNet имеет форму песочных часов, то есть размерность уменьшается при прохождении через сверточный слой 1x1, а в MobileNet_v2 он веретенообразный, в слое 1x1 сверточный слой — это восходящее измерение. Это связано с тем, что MobileNet использует глубину, а количество параметров очень мало, и если используется уменьшение размерности, то возможности обобщения будет недостаточно.
Остаточный блок в ResNet большой с обоих концов и маленький посередине. В MobileNet_v2 середина большая, а концы маленькие, как раз наоборот Автор назвал это инвертированным остаточным блоком.
Его структура выглядит следующим образом:
Как показано на первом рисунке выше, в MobileNet_v2 объединение в пул не используется для уменьшения размерности, но для достижения уменьшения размерности используется свертка с шагом 2, а блок с шагом 2 не использует соединение быстрого доступа.
MobileNet_v3(2019)
MobileNet_v3 использует метод поиска нейронной архитектуры NAS для построения сети и предлагает некоторые улучшения. Эта серия резюме посвящена эволюции конструктивного проектирования, поэтому здесь упоминаются только структурные инновации.
Нововведений три:
1. Перепроектируйте слой с более высокой задержкой. ‘
В перевернутой структуре узкого места MobileNet_v2 свертка 1x1 используется в качестве последнего уровня для расширения до многомерного пространства признаков.Этот уровень чрезвычайно важен для предоставления богатых функций для прогнозирования, но он также увеличивает задержку.
Чтобы уменьшить задержку и сохранить пространственные характеристики высокой размерности, этот слой перемещен в конец среднего слоя объединения в MobileNet_v3, и теперь в конечном наборе признаков необходимо рассчитать только разрешение 1x1 вместо исходного. 7х7. В результате такого выбора конструкции вычисление признаков становится почти бесплатным с точки зрения вычислений и задержки.
Как только стоимость этого уровня генерации признаков будет снижена, предыдущий слой проекции узких мест больше не понадобится для сокращения вычислений. Это наблюдение позволяет удалить слои проекции и фильтрации в предыдущем слое узкого места, что еще больше снижает вычислительную сложность. Исходный этап и оптимизированный этап показаны на рисунке выше.
Еще одним трудоемким слоем является свертка первого слоя. Современные мобильные модели, как правило, используют 32 фильтра в полной свертке 3x3 для создания начального банка фильтров для обнаружения границ. Обычно эти фильтры являются зеркальным отображением друг друга.
mobileNet_v3 использует для этого уровня функцию нелинейной активации h-swish.Преимущество заключается в том, что количество фильтров после использования h-swish можно уменьшить до 16, сохраняя при этом ту же точность, что и 32 фильтра с использованием ReLU или swish. Это экономит дополнительные 3 мс и 10 миллионов MAdd.
2. Предложите использовать функцию активации h-swish
В статье по семантической сегментации предлагается нелинейная функция swish вместо функции ReLU, которая может значительно повысить точность нейронной сети, которая определяется как: swish x = x σ(x), где σ(x) является сигмовидной функцией.
Однако, хотя swish повышает точность, расчет сигмоидальной функции чрезвычайно дорог и не подходит для ее существования во встроенном мобильном терминале, поэтому MobileNet_V3 предлагает более простую функцию h-swish, которая определяется следующим образом:
Примечание: большинство преимуществ swish можно реализовать на более глубоких уровнях, поэтому в структуре MobileNet_v3, в дополнение к вышеупомянутому h-swish для первого уровня, h-swish используется только на среднем и верхнем уровнях. и другие слои по-прежнему используют h-swish.ReLU.
3. Предложите большое сжатие и возбуждение
MobileNet_v3 представляет модуль SE, предложенный в SENet, и вносит некоторые коррективы. Один из них — заменить сигмоид на h-свист. Второй — изменить количество каналов второго Linear на 1/4 следующего слоя. Но нет возможности умножить пиксель на пиксель, потому что количество каналов не совпадает, тогда я пошел искать код MobileNet_v3 и обнаружил, что он использует expand_as для расширения в канал следующего слоя после количества каналов стало 1/4 числа.
ShuffleNet_v1(2018)
Нововведений два:
1. Предложите перетасовку каналов для сгруппированных сверток.
Как показано на рисунке ниже, слева — это традиционная свертка, а справа — групповая свертка.Как упоминалось в предыдущей статье «Классическая модель эволюции структуры CNN (1)», первоначальная идея групповой свертки исходила от Использование AlexNet двух графических процессоров. С такой группировкой будет проблема: если групп будет слишком много, это приведет к тому, что каждый слой выходного слоя будет напрямую свернут из одного или нескольких каналов предыдущего слоя, что предотвратит поток информации между группами каналов. Ослабление репрезентативной силы модели.
Решение состоит в том, чтобы разрешить соединение различных групп, чтобы информация из разных групп каналов могла передаваться в полном объеме.
Лучшим способом, предложенным в shuffleNet, является непосредственное перетасовка порядка групп (как показано справа на рисунке выше), а затем соединение их по группам.
Примечание. Это все еще дифференцируется после перетасовки порядка, поэтому эту структуру можно встроить в сетевую модель для сквозного обучения.
2. На основе остаточного блока с помощью глубинной свертки (рис. а) мы настраиваем и предлагаем модуль ShuffleNet (рис. б и в).
Рисунок b — это обычный блок, а рисунок c — блок с понижающей дискретизацией.
Модуль shuffleNet заменяет свертку 1x1 на сгруппированную свертку 1x1, добавляет средний пул 3x3 к пути быстрого доступа и заменяет поэлементное добавление сращиванием каналов, что позволяет увеличить размер канала без увеличения вычислительных затрат.
Кроме того, модуль shuffleNet отменяет ReLU после свертки глубины.Впервые в Xception было предложено использовать только линейное преобразование, в то время как MobileNet_v2 объяснил, что использование ReLU после свертки глубины приведет к потере большего количества информации. Таким образом, окончательный блок ShuffleNet показан на рисунках b и c.
ShuffleNet_v2(2018)
В предыдущих облегченных моделях такие операции, как групповая свертка и свертка с разделением по глубине, предлагались для уменьшения FLOP, но FLOP не является прямой мерой скорости или размера модели.Однако на реальном устройстве из-за различных операций оптимизации вычислений количество вычислений не может точно измерить скорость модели.
Одна из основных причин заключается в том, что FLOP игнорирует некоторые важные факторы, а другая — MAC (стоимость доступа к памяти), которая представляет собой временную стоимость доступа к памяти. Например, групповая свертка, из-за которой некоторые оптимизированные алгоритмы реализации, используемые на нижнем уровне, имеют более низкую производительность после группировки, что приводит к большему количеству групп и более высоким временным затратам. Второй — параллелизм: при одинаковых FLOP модель с высоким параллелизмом работает быстрее, чем модель с низким параллелизмом.
Во-вторых, под разными платформами модельное время работы одних и тех же FLOP отличается. Например, в последней библиотеке CUDNN оптимальная реализация сверток 3x3 не занимает в 9 раз больше времени, чем свертки 1x1.
Поэтому ShuffleNet_v2 предлагает измерять скорость или размер модели с точки зрения фактического времени работы.
Нововведений два:
1. Было проведено четыре эксперимента в ShuffleNet v2, и были получены некоторые трудоемкие операции.После анализа принципов были предложены четыре принципа проектирования.
-
Когда количество входных и выходных каналов сверточного слоя одинаково, MAC является наименьшим.
-
Чем больше количество пакетов в свертке пакетов, тем больше MAC-адрес.
-
Ветви сети уменьшают параллелизм модели
-
Поэлементные операции нельзя игнорировать
Примечание: Этот документ очень достоин прочтения. Вы можете увидеть полную интерпретацию документа в разделе «Сводная информация о модели» Технического руководства CV. Принципы и детали этих четырех принципов проектирования здесь подробно не описываются.
2. В соответствии с приведенными выше четырьмя принципами проектирования скорректируйте необоснованные части модуля ShuffleNet_V1 и предложите новый модуль.
На рисунке a показана обычная единица shuffleNet v1, на рисунке b показана единица понижающей дискретизации shuffleNet v1, на рисунке c — обычная единица shuffleNet v2, а на рисунке d — единица пониженной дискретизации shuffleNet v2.
Разделение каналов было введено в shuffleNet v2, и количество каналов было разделено на c' и c - c', где c' равно c/2. Часть операции свертки, другая часть прямого concat. Вход и выход пути свертки равны, что учитывает первый принцип.
Две свертки 1x1 больше не группируются, отчасти из-за второго принципа, а отчасти потому, что разделение каналов эквивалентно группировке. После выполнения двусторонней конкатенации выполняется перетасовка каналов, которая предназначена для потока информации в канале. В противном случае половина информации о канале на левом конце будет проходить полностью, не проходя через сверточный слой.
Для слоя пространственной понижающей дискретизации этот блок не имеет разделения каналов, что может удвоить количество каналов после двух объединений. Остальные изменения легче понять, взглянув на картинки.
Примечание. Предложенное здесь разделение каналов, по-видимому, послужило источником вдохновения для упомянутых ниже сетей Cross Stage Partial Networks в CSPNet, а разделение каналов будет играть еще одну роль в CSPNet. В этом виде разделения каналов в каждом блоке половина каналов напрямую входит в следующий блок для участия в следующем блоке, что можно рассматривать как повторное использование функции.
SqueezeNet(2017)
SqueezeNet предлагает новый модуль, основанный на следующих трех концепциях дизайна:
(1) большое количество ядер свертки 1х1 используется для замены ядер свертки 3х3, так как параметры можно уменьшить в 9 раз;
(2) Уменьшите количество входных каналов (входных каналов) ядра свертки 3x3, потому что параметры ядра свертки: (количество входных каналов) * (количество фильтров) * 3 * 3.
(3) Понижающая выборка должна быть размещена как можно дальше за сетью.Предыдущие слои могут иметь более крупные карты признаков, что полезно для повышения точности модели.
Одним из нововведений является:
1. Поднимите пожарный модуль.
Модуль Fire состоит из слоев Squeeze и Expand.
В слое Squeeze используйте свертку 1x1, чтобы уменьшить количество каналов; в слое Expand используйте свертку 1x1 и свертку 3x3, а выходные данные свертки 1x1 и свертки 3x3 объединяются.
PELEE(2019)
PeleeNet — это улучшенная облегченная сеть, основанная на DenseNet, в основном для обнаружения целей в мобильном развертывании.
Нововведений три:
1. Предложите блок Stem.
Базовый блок может улучшить выразительность признаков практически без увеличения объема вычислений.
2. Предложите два плотных слоя.
Вдохновленный Inception, используются два плотных слоя. Рецептивные поля двух путей различны. Левый - 3x3, правый - два стека 3x3, а рецептивное поле - 5x5.
Примечание: PELEE также включает в себя некоторые другие инновации, но они не имеют никакого отношения к легкости, поэтому я не буду упоминать об этом. Заинтересованные читатели могут обратиться к оригинальной статье. В наборе данных ImageNet PeleeNet имеет только 66% модели MobileNet и является более точным, чем MobileNet.
CSPNet(2020)
Чтобы быть точным, эта статья предназначена не для того, чтобы предложить облегченную модель, а для того, чтобы предложить основу, которая повышает способность CNN к обучению. Причина, по которой эта статья упоминается здесь, заключается в том, что CSPNet предлагает идею, которая уменьшает объем вычислений примерно на 20%, сохраняя при этом точность сети.
CSPNet можно комбинировать с некоторыми существующими моделями (DenseNet, ResNet, ResNeXt), а YOLO_v4 использует CSPDarknet53 в качестве основы.
Одним из нововведений является:
1. Предложите частичную сеть между этапами (CSPNet).
Согласно методу, основанному на увеличении информационного потока, предложенному в DenseNet, предлагается разделить карты признаков перед стадией на две части на канале, одна часть проходит ряд операций свертки, активации и других операций стадии, а вторая другая часть находится непосредственно в конце сцены и в передней части.Часть конкате и перехода. Эксперименты показывают, что информация о градиенте при объединении и переходе может сильно различаться.
Этот метод имеет следующие преимущества: 1. Повышает обучаемость CNN, 2. Устраняет вычислительное узкое место, 3. Уменьшает стоимость памяти (около 20%).
Примечание. В этой статье есть и другие нововведения, здесь упоминаются только те, которые связаны с облегчением веса.
Эта статья взята из серии публикаций о проектах технического руководства CV для общедоступных аккаунтов.
Добро пожаловать в техническое руководство CV для общедоступной учетной записи, в котором основное внимание уделяется техническому обзору компьютерного зрения, отслеживанию новейших технологий и интерпретации классических статей.
Ответьте на ключевое слово «Техническое резюме» в официальном аккаунте, чтобы получить резюме следующих статей в формате pdf.
Другие статьи
Четкое обнаружение границ с использованием Dice loss
PVT — многофункциональная основа для плотного прогнозирования без свертки
CVPR2021 | Обнаружение объектов в открытом мире
Визуальное обнаружение и распознавание объектов Прошлое, настоящее и возможное
Краткое изложение методов недообучения и переобучения
Краткое изложение общих идей бумажных инноваций
Резюме методов эффективного чтения англоязычной литературы по направлению CV
Обзор непродолжительного обучения компьютерному зрению
Краткий обзор дистилляции знаний
Оптимизировать скорость чтения видео OpenCV
Краткое изложение методов функции потерь
Техническое резюме механизма внимания
Краткое изложение технологии пирамиды функций
Краткое изложение технологии объединения
Краткое изложение методов увеличения данных
Резюме эволюции структуры CNN (1) Классическая модель
Резюме эволюции структуры CNN (2) Облегченная модель
Резюме эволюции структуры CNN (3) Принципы проектирования
Как увидеть будущее направление компьютерного зрения
Краткое изложение технологии визуализации CNN (1) Визуализация карты объектов
Краткое описание технологии визуализации CNN (2) Визуализация ядра свертки
Краткое изложение технологии визуализации CNN (три) визуализации
Краткое описание технологии визуализации CNN (4) инструменты и проекты визуализации
Справочные документы
1. Xception: Deep Learning with Depthwise Separable Convolutions
2. MobileNets: Effificient Convolutional Neural Networks for Mobile Vision Applications
3. MobileNetV2: Inverted Residuals and Linear Bottlenecks
4. Searching for mobilenetv3
5. ShufflfleNet: An Extremely Effificient Convolutional Neural Network for Mobile Devices
6. ShuffleNet V2: Practical Guidelines for Effiffifficient CNN Architecture Design
7. SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
8. Pelee: A Real-Time Object Detection System on Mobile Devices
9. CSPNet: A New Backbone that can Enhance Learning Capability of CNN