Вступление

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

Строительные блоки, используемые в эффективных моделях

Прежде чем объяснять конкретные эффективные модели CNN, давайте проверим вычислительную стоимость строительных блоков, используемых в эффективных моделях CNN, и посмотрим, как выполняется свертка в пространственной и канальной области.

Если HxW обозначает пространственный размер выходной карты характеристик, N обозначает количество входных каналов, KxK обозначает размер сверточного ядра, а M обозначает количество выходных каналов, вычислительная стоимость стандартной свертки становится HWNK²M.

Важным моментом здесь является то, что вычислительные затраты стандартной свертки пропорциональны (1) пространственному размеру выходной карты характеристик HxW, (2) размеру ядра свертки K², (3) количеству входных и выходных каналов NxM .

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

Свертка

Прежде всего, я представляю интуитивно понятную иллюстрацию того, как свертка как в пространственной, так и в канальной области выполняется для стандартной свертки, вычислительные затраты которой составляют HWNK²M.

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

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

Далее, conv1x1 [1], или точечная свертка, которая используется для изменения размера каналов, визуализируется выше. Вычислительная стоимость этой свертки составляет HWNM, потому что размер ядра составляет 1x1, что приводит к снижению вычислительных затрат на 1/9 по сравнению с conv3x3. Эта свертка используется для «смешивания» информации между каналами.

Сгруппированная свертка

Сгруппированная свертка - это вариант свертки, при котором каналы входной карты признаков сгруппированы, а свертка выполняется независимо для каждого сгруппированного канала.

Если G обозначает количество групп, вычислительные затраты на групповую свертку составляют HWNK²M / G, что приводит к уменьшению вычислительных затрат на 1 / G по сравнению со стандартной сверткой.

Случай группового conv3x3 с G = 2. Мы видим, что количество подключений в области канала становится меньше, чем при стандартной свертке, что указывает на меньшие вычислительные затраты.

Случай группового conv3x3 с G = 3. Связи становятся более редкими.

Случай группового conv1x1 с G = 2. Таким образом, conv1x1 также можно сгруппировать. Этот тип свертки используется в ShuffleNet.

Случай сгруппированного conv1x1 с G = 3.

Глубинная свертка

В глубинной свертке [2,3,4] свертка выполняется независимо для каждого из входных каналов. Его также можно определить как частный случай групповой свертки, когда количество входных и выходных каналов одинаково, а G равно количеству каналов.

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

Перемешивание каналов

Перемешивание каналов - это операция (уровень), которая изменяет порядок каналов, используемых в ShuffleNet [5]. Эта операция реализуется изменением формы тензора и транспонированием.

Точнее, позволяя GN '(= N) обозначать количество входных каналов, размер входного канала сначала изменяется на (G, N'), затем транспонируется (G, N ') в (N', G) и, наконец, придать форму входному. Здесь G представляет количество групп для групповой свертки, которая используется вместе со слоем тасования каналов в ShuffleNet.

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

Случай тасования каналов при G = 2. Свертка не выполняется, а просто меняется порядок каналов.

Случай тасования каналов при G = 3.

Эффективные модели

Далее, для эффективных моделей CNN, я предоставляю интуитивно понятные иллюстрации о том, почему они эффективны и как выполняется свертка как в пространственной, так и в канальной области.

ResNet (версия с узким местом)

Остаточная единица с архитектурой узкого места, используемая в ResNet [6], является хорошей отправной точкой для дальнейшего сравнения с другими моделями.

Как показано выше, остаточная единица с архитектурой узкого места состоит из conv1x1, conv3x3 и conv1x1. Первый conv1x1 уменьшает размер входного канала, уменьшая вычислительные затраты на последующие относительно дорогие conv3x3. Последний conv1x1 восстанавливает размер выходного канала.

ResNeXt

ResNeXt [7] - эффективная модель CNN, которую можно рассматривать как частный случай ResNet, в которой conv3x3 заменено на grouped conv3x3. При использовании эффективного группированного свора скорость уменьшения канала в conv1x1 становится умеренной по сравнению с ResNet, что приводит к большей точности при тех же вычислительных затратах.

MobileNet (раздельный конв.)

MobileNet [8] представляет собой стек разделяемых модулей свертки, которые состоят из глубинной свертки и conv1x1 (точечной свертки).

Разделимая свертка независимо выполняет свертку в пространственной и канальной областях. Эта факторизация свертки значительно снижает вычислительные затраты с HWNK²M до HWNK² (по глубине) + HWNM (conv1x1), HWN (K² + M) в сумме. В общем, M ›› K² (например, K = 3 и M ≥ 32), степень уменьшения составляет примерно 1 / 8–1 / 9.

Важным моментом здесь является то, что узким местом вычислительных затрат теперь является conv1x1!

ShuffleNet

Мотивация ShuffleNet заключается в том, что conv1x1 является узким местом разделяемого conv, как упоминалось выше. Хотя conv1x1 уже эффективен и, похоже, нет места для улучшений, для этой цели можно использовать сгруппированный conv1x1!

На приведенном выше рисунке показан модуль для ShuffleNet. Важным строительным блоком здесь является слой перемешивания каналов, который «перемешивает» порядок каналов между группами в сгруппированной свертке. Без перемешивания каналов выходные данные сгруппированных сверток никогда не используются среди групп, что приводит к снижению точности.

MobileNet-v2

MobileNet-v2 [9] использует модульную архитектуру, аналогичную остаточной единице с архитектурой узких мест ResNet; модифицированная версия остаточной единицы, в которой conv3x3 заменяется глубинной сверткой.

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

Переупорядочив строительные блоки, как указано выше, и сравнив их с MobileNet-v1 (разделяемый conv), мы можем увидеть, как работает эта архитектура (это переупорядочение не меняет общую архитектуру модели, поскольку MobileNet-v2 является стеком этого модуля).

То есть вышеупомянутый модуль следует рассматривать как модифицированную версию разделяемого conv, где один conv1x1 в разделяемом conv разделяется на два conv1x1. Если обозначить T коэффициент расширения размера канала, вычислительная стоимость двух conv1x1 составляет 2HWN² / T, а стоимость conv1x1 в разделяемом conv - HWN². В [5] используется T = 6, что снижает вычислительные затраты для conv1x1 в 3 раза (T / 2 в целом).

FD-MobileNet

Наконец, я представляю MobileNet с быстрой понижающей дискретизацией (FD-MobileNet) [10]. В этой модели понижающая дискретизация выполняется на более ранних уровнях по сравнению с MobileNet. Этот простой прием может снизить общие вычислительные затраты. Причина кроется в традиционной стратегии понижающей дискретизации и вычислительной стоимости разделяемых конв.

Начиная с VGGNet, многие модели используют одну и ту же стратегию понижающей дискретизации: выполняют понижающую дискретизацию, а затем удваивают количество каналов последующих уровней. Для стандартной свертки вычислительные затраты не меняются после понижающей дискретизации, потому что они определены HWNK²M. Однако для разделяемой свертки ее вычислительные затраты становятся меньше после понижающей дискретизации; он уменьшается с HWN (K² + M) до H / 2 W / 2 2N (K² + 2M) = HWN (K² / 2 + M). Это относительно преобладает, когда M не так велик (т.е. более ранние слои).

Я заканчиваю эту статью следующей шпаргалкой, спасибо: P

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

[1] Линь М., Чен К. и Ян С. «Сеть в сети», в Proc. ICLR, 2014.

[2] Л. Сифре, «Рассеяние жестких движений для классификации изображений», Ph.D. диссертация, 2014.

[3] Л. Сифре и С. Маллат, «Рассеяние, инвариантное к вращению, масштабированию и деформации для различения текстур», в Proc. CVPR, 2013.

[4] Ф. Шолле, «Xception: глубокое обучение с разделенными по глубине свертками», в Proc. CVPR, 2017.

[5] X. Zhang, X. Zhou, M. Lin и J. Sun, «ShuffleNet: чрезвычайно эффективная сверточная нейронная сеть для мобильных устройств», в arXiv: 1707.01083, 2017.

[6] К. Хе, Х. Чжан, С. Рен и Дж. Сун, «Глубокое остаточное обучение для распознавания изображений», в Proc. CVPR, 2016.

[7] С. Се, Р. Гиршик, П. Доллар, З. Ту и К. Хе, «Агрегированные остаточные преобразования для глубоких нейронных сетей», в Proc. CVPR, 2017.

[8] А.Г. Ховард, М. Чжу, Б. Чен, Д. Калениченко, В. Ван, Т. Вейанд, М. Андреетто и Х. Адам, «Мобильные сети: эффективные сверточные нейронные сети для приложений мобильного зрения», в arXiv : 1704.04861, 2017.

[9] М. Сандлер, А. Ховард, М. Чжу, А. Жмогинов, Л. Чен, «MobileNetV2: инвертированные остатки и линейные узкие места», в arXiv: 1801.04381v3, 2018.

[10] З. Цинь, З. Чжан, X. Чен и Я. Пэн, «FD-MobileNet: улучшенная MobileNet со стратегией быстрого понижения дискретизации», в arXiv: 1802.03750, 2018.