Этот пост можно скачать в формате PDF здесь.

Это часть серии руководств по архитектуре CNN.

Основная цель - дать представление о DenseNets в применении к набору данных CIFAR-10.

  • Для DenseNets, примененного к ImageNet, который представляет собой более подробное руководство, есть еще одно руководство здесь.
  • Найдите здесь код для создания этих архитектур:

Индекс

  • Вступление
  • Состав
  • Свертка 1
  • Плотный блок
  • Блок перехода
  • Плотные слои
  • Резюме

Вступление

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

Набор данных ImageNet состоит из набора изображений (авторы использовали 1,28 миллиона обучающих изображений, 50 тысяч проверочных изображений и 100 тысяч тестовых изображений) размером (224x224), принадлежащих к 1000 различным классам. Однако CIFAR10 состоит из другого набора изображений (45 тыс. Обучающих изображений, 5 тыс. Проверочных изображений и 10 тыс. Тестовых изображений), распределенных всего по 10 различным классам.

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

Мы собираемся следовать предложенному авторами решению (обучить DenseNets на CIFAR10 для построения DenseNet-BC со 100 слоями и коэффициентом роста 12), которому также сложно следовать, как и для набора данных ImageNet. В документе [1], раздел 3 DenseNets - Детали реализации, представлены конфигурации для создания DenseNet для CIFAR10.

Давайте тогда последуем буквальному объяснению, которое они дают для построения DenseNets. Самое главное, для реализации CIFAR10 имеется 3 DenseBlocks вместо четырех, с одинаково распределенным количеством DenseLayers в каждом DenseBlock. Поскольку параметр, указанный авторами, - это общее количество слоев сети L, мы вычисляем, сколько плотных слоев в каждом плотном блоке нам нужно включить, чтобы достичь этой конфигурации. Коэффициент сжатия theta:

Причина удаления 4 слоев заключается в том, что нам нужно учитывать только те, которые принадлежат плотным блокам. Кроме того, сжатие вводит новую операцию в переходном слое (первая свертка 1x1, как мы видели в исходной работе).

Следовательно, для 100 слоев DenseNet-BC каждый DenseBlock будет состоять из 16 плотных слоев. Поскольку мы будем называть DenseNets после «DenseNet-Layers-GrowthRate», DenseNet, рассматриваемая в этой работе, соответствует DenseNet-100–12.

Состав

Следуя той же методологии, что и при предыдущей работе над DenseNets, давайте сначала взглянем на общую картину, а потом углубимся в детали слой за слоем.

Рисунок 1 выглядит уже знакомым после демистификации ResNet-121. Мы можем наблюдать тот же паттерн: первый единственный сверточный слой, за которым следуют две пары пар плотных блоков и переходных блоков, третий плотный блок, за которым следует глобальное среднее объединение, чтобы уменьшить его до вектора 1x1x342, который будет питать плотный слой.

Свертка 1

Первым шагом в DenseNet перед входом в первый плотный блок является свертка 3x3 с операцией пакетной нормализации. Шаг равен 1, и есть отступ 1, чтобы соответствовать размеру вывода с размером ввода. Обратите внимание, что у нас уже есть первое большое отличие от DenseNet для ImageNet, что мы не включили сюда операцию максимального объединения в этот первый блок, чтобы уменьшить размер входного объема.

С помощью рисунка 2 мы можем проверить, что выходной объем Conv1 действительно равен 32x32x24. Следующим шагом является введение этого нового объема в качестве входных данных для следующего плотного блока 1 (D1).

Плотные блоки

Плотные блоки (DB) состоят из 16 плотных слоев, как было рассчитано ранее для DenseNet-BC-100–12.

На рисунке 3 представлена ​​упрощенная версия, так как 16 блоков, слишком много для сжатия в одном изображении, но идея соблюдается, поскольку мы могли видеть, как количество карт функций увеличивается с темпом роста, 12, каждый раз (24, 36, 48… ). Поскольку слоев 16, окончательный объем DB1 будет 216.

Переходные блоки

Блок перехода (TB) между двумя базами данных действует как понижающая выборка, уменьшая вдвое количество карт функций (theta = 0,5), а также вдвое уменьшая размер карт функций за счет объединения с шагом = 2, размером ядра = 2 и отступ = 1.

Плотные слои

Нам просто нужно увидеть, что происходит в базе данных, чтобы подтвердить, почему размер карты характеристик увеличивает (скорость роста * количество плотных слоев) / 2 - проверьте, как в D1 увеличивается с 24 до 216 - а размер карт характеристик остается постоянным.

Можно проверить, как каждый плотный слой (DL) выполняет свертку 1x1 со скоростью роста 4 * количества фильтров. Число 4 дано авторами в статье, и большинство репозиториев называют его bn_size (множитель для количества слоев горлышка бутылки). Эта свертка 1x1 применяет линейное преобразование, предшествующее свертке 3x3, при этом количество фильтров является скоростью роста.

Посмотрите, как вторая свертка отвечает только за количество объединяемых карт фильтров, поэтому она идеально соответствует конфигурации скорости роста после их объединения. Каждый DL добавляет k новых карт функций в свой входной объем. Это еще раз подтверждает, почему плотный блок добавляет скорость роста * количество плотных слоев.

Резюме

ResNets, построенные авторами в соответствии с объясненными правилами, образуют следующие структуры, изменяя значение n на рисунке 1:

Обратите внимание, что интуитивно эти архитектуры не соответствуют архитектурам ImageNet, показанным в конце работы над ImageNet.

Найдите здесь код для создания этих архитектур: