Документирование моего пути к fast.ai: ОБЗОР БУМАГИ. НАБОР ТРЮКОВ ДЛЯ КЛАССИФИКАЦИИ ИЗОБРАЖЕНИЙ С ПОМОЩЬЮ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ.

Для проекта Урок 13.1 я решил погрузиться в статью 2018 года под названием Сумка трюков для классификации изображений с помощью сверточных нейронных сетей, написанную Тонг Хе, Чжи Чжан, Хан Чжан. », Чжунъюэ Чжан, Цзюньюань Се, Му Ли. Особое внимание мы уделим разделу 4 статьи.

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

1. Изменения модели.

Модификации модели, обсуждаемые в статье, представляют собой архитектурные корректировки, которые, не изменяя вычислительной сложности, существенно влияют на точность. В качестве примера используемой архитектуры будет Res Net.

1.2. Архитектура ResNet.

Здесь авторы обсуждают некоторые аспекты архитектуры ResNet. Напоминаем, что эта сеть состоит из входного слоя, 4 последующих стадий и выходного слоя, как мы можем видеть на рисунке 1.

У нас есть входной стебель, который выполняет свертку 7 × 7, имеет выходной канал 64 и шаг 2. Затем у нас есть слой максимального объединения 3 × 3 с шагом 2. В этом слое мы эффективно уменьшая в 4 раза ширину и высоту ввода, и увеличиваем размер канала до 64.

На этапе 2 и последующих у нас есть блок субдискретизации и остаточные блоки.

Блок понижающей дискретизации имеет 2 пути:

  1. Путь A: у нас есть 3 свертки с ядрами размеров: 1×1, 3×3 и 1×1. Наша 1-я свертка имеет шаг 2, поэтому мы вдвое уменьшаем ширину и высоту входных данных. У 3-й свертки выходной канал в 4 раза больше, чем у двух предыдущих (структура узкого места).
  2. Путь B: у нас есть только 1 свертка с размером ядра: 1×1. Здесь используется шаг 2, поэтому мы можем изменить форму входных данных, чтобы они были такими же, как на выходе пути A.

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

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

Меняя количество остаточных блоков, мы получаем разные модели, т. е. с ResNet-50 и ResNet-152 мы просто указываем количество сверточных слоев, которые у нас есть в сети.

4.2. Настройки ResNet.

В этой части статьи авторы рассматривают 2 настройки ResNet и предлагают третью.

ResNet-B — это модификация, которая впервые была использована в реализации сети Torch, а затем использовалась в различных документах.

Он изменяет блок понижающей дискретизации. Идея, стоящая за этим, заключается в том, что ранее в пути A блока понижающей дискретизации наша первая свертка использовала размер ядра 1 × 1 с шагом 2. Это заставило нас потерять 3/4 информации, присутствующей во входных данных. ResNet-B изменяет это и использует шаг 2 только во второй свертке. Мы достигаем цели не терять никакой информации, и мы не меняем выходную форму пути A, так как размер ядра остается 3 × 3.

ResNet-C — это модификация, которая была предложена в Inception-v2, но с тех пор нашла применение в таких моделях, как SENet PSPNet, DeepLabV3 и ShuffleNetV2.

Он изменяет входной стержень. Идея заключается в том, что вычислительные затраты на выполнение свертки квадратичны ширине и высоте ядра. В нашем случае у нас свертка 7×7, которая в 5,4 раза дороже свертки 3×3. Решением этой проблемы является изменение входного стебля на 3 свертки с размером ядра 3 × 3. 1-я и 2-я свертки будут иметь выходной канал 32 и шаг 2, но 3-я свертка будет иметь выходной канал. 64.

ResNet-D — это модификация самих авторов. Идея заключается в том, что в пути B блока понижающей дискретизации мы также используем ядро ​​размером 1 × 1 с шагом 2. Как и в пути A, мы также теряем 3/4 входной информации. . ResNet-D модифицирует это и использует средний слой пула 2 × 2 с шагом 2 перед выполнением свертки с размером ядра 1 × 1 и шагом 1. Авторы утверждают, что влияние на вычислительные затраты незначительный.

4.3. Результаты эксперимента.

Авторы используют архитектуру ResNet-50 с тремя предложенными настройками во время своих экспериментов, используя размер пакета 1024 и точность FP16. Мы можем наблюдать результаты экспериментов в Таблице 5 статьи.

ResNet-50-B использует больше информации в пути A блока понижающей дискретизации, поэтому авторы получают результат на 0,5% лучше, чем стандартный ResNet-50. ResNet-50-C изменяет входной шток и выдает результат, который добавляет еще 0,2% к предыдущей точности. ResNet-50-D использует больше информации в пути B блока понижения дискретизации, поэтому авторы получают улучшение на 0,3% по сравнению с предыдущим результатом.

Четыре модели имеют одинаковый размер, но разные вычислительные затраты. ResNet-50-D выполняет наибольшее количество операций с плавающей запятой, но разница находится в пределах 15%, если мы сравниваем его со стандартной архитектурой ResNet-50. Наконец, они добавляют, что обучение ResNet-50-D всего на 3% медленнее по сравнению со стандартным ResNet-50.