Сегодняшняя тема - AlexNet с конференции NIPS 2012. AlexNet - победитель конкурса ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 2012.

До ILSVRC 2012 конкуренты в основном использовали методы проектирования функций в сочетании с классификатором (то есть SVM).

AlexNet ознаменовал прорыв в глубоком обучении, где CNN была использована для существенного снижения количества ошибок в ILSVRC 2012 и достижения первого места в конкурсе ILSVRC.

Основные моменты этого документа:

  1. Прорыв в глубоком обучении с использованием CNN для классификации изображений.
  2. Мульти-графические процессоры
  3. Используйте ReLU
  4. Использовать отсев

Контур

  1. Архитектура
  • ReLU нелинейность
  • Мульти-графические процессоры
  • Перекрывающееся объединение
  • Нормализация местного ответа (LRN)
  • Выбывать
  • Увеличение данных
  • Другие детали

2. Результаты

3. Реализации

  • AlexNet от torchvision
  • AlexNet с LRN

AlexNet

Архитектура

AlexNet содержит пять сверточных и три полносвязных слоя. Выходные данные последнего полностью подключенного слоя отправляются на 1000-слойный слой softmax, который соответствует 1000 меткам классов в наборе данных ImageNet.

Обучение сети на двух графических процессорах GTX 580 с 3 ГБ памяти занимает от пяти до шести дней.

Вот краткое изложение слоев AlexNet:

ReLU нелинейность

До AlexNet, sigmoid и tanh обычно использовались как активации, которые снижают нелинейность. AlexNet использует Rectified Linear Units (ReLUs)activations, которые не насыщают нелинейностью.

Формула ReLU:

Преимущества ReLU:

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

Мульти-графические процессоры

Мы видим, что архитектура разделена на две параллельные части. В Alexnet 1,2 миллиона параметров обучения слишком велики, чтобы уместиться в NVIDIA GTX 580 GPU с 3 ГБ памяти. Поэтому автор разложил сеть на два GPU.

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

В настоящее время графические процессоры NVIDIA достаточно велики, чтобы справиться с этими задачами. Таким образом, реализация теперь разделит сеть на две части.

Перекрывающееся объединение

Традиционно соседние нейроны соседними объединяющими единицами не перекрываются. В этой статье автор использует перекрывающееся максимальное объединение размера 3 x 3 с шагом 2.

Эта схема снижает частоту первых 1 и 5 ошибок на 0,4% и 0,3% соответственно по сравнению с максимальным объединением размера 2 x 2 с шагом 2.

Нормализация местного ответа

Local Response Normalization (LRN) используется в AlexNet для помощи в обобщении.

Формула Local Response Normalization (LRN):

LRN снижает частоту ошибок первого и пятого уровней на 1,4% и 1,2%.

В 2014 году Карен Симонян и др. (VGGNet) показали, что LRN не улучшает производительность набора данных ILSVRC, но приводит к увеличению памяти и времени вычислений.

В настоящее время вместо LRN используется пакетная нормализация.

Уменьшить переоснащение

Выбывать

AlexNet использует метод регуляризации под названием DropOut, который случайным образом устанавливает выход каждого скрытого нейрона на ноль с вероятностью p = 0,5p = 0,5. Эти выпавшие нейроны не участвуют в прямом и обратном проходе.

DropOut снижает сложную коадаптацию нейронов, поскольку нейрон не может полагаться на присутствие определенных других нейронов.

Традиционно во время тестирования нам нужно будет умножить выходные данные на p = 0,5, чтобы ответ был таким же, как время обучения. В реализации обычно масштабируют оставшиеся нейроны, которые не выпадают, путем деления на (1-p) во время обучения. Следовательно, нам не нужно масштабироваться во время тестирования.

Увеличение данных

AlexNet использует две формы увеличения данных.

  • Первое: переводы и горизонтальные отражения: извлекайте случайные 224 x 224 патчи (и отражения) из 256 x 256 изображений. Этот метод увеличивает размер обучающей выборки в 2048 раз.
  • Извлечь 224 x 224 из изображений 256 x 256: (256−224) ∗ (225−224) = 1024
  • Горизонтальные отражения: 1024 * 2 = 2048
  • Во-вторых: изменение интенсивности каналов RGB: выполните PCA для набора значений пикселей RGB по всему набору обучения. Затем используйте собственные значения и собственные векторы для управления интенсивностью пикселей. Собственные значения выбираются один раз для целых пикселей конкретного изображения.

Другие детали

Тренируйтесь со стохастическим градиентным спуском с:

  • Размер пакета: 128
  • Импульс: 0,9
  • Снижение веса: 0,0005
  • Инициализируйте веса в каждом слое из гауссова распределения с нулевым средним значением со стандартным значением 0,01.
  • Смещение: инициализируйте 1 для 2-го, 4-го, 5-го сверточных слоев и полностью связанных слоев. Инициализируйте 0 для оставшихся слоев.
  • Скорость обучения: 0,01. Равная скорость обучения для всех слоев и погружение на 10, когда ошибка проверки перестала улучшаться.

Обучите примерно 90 циклов с 1,2 миллионами обучающих изображений, что заняло от 5 до 6 дней на двух графических процессорах NVIDIA GTX 580 3 ГБ.

Результаты

  • Результаты ILSVRC-2010: частота ошибок первого и пятого тестовых наборов составила 37,5% и 17,0%. Разреженное кодирование и SIFT + FV - лучшие характеристики до AlexNet.

  • Результаты на ILSVRC-2012:

Реализации

В этом разделе мы рассмотрим реализацию AlexNet в Pytorch. Сначала мы взглянем на AlexNet из репозитория pytorch / vision. Эта реализация отличается функциями свертки и отсутствием нормализации местного отклика. Во-вторых, мы рассмотрим реализацию, которая соответствует описанию в статье.

AlexNet от torchvision

Это реализация AlexNet от pytorch / torchvision.

Примечание:

  • Количество nn.Conv2d не совпадает с исходной бумагой.
  • В этой модели используется nn.AdaptiveAvgPool2d, чтобы модель могла обрабатывать изображения произвольного размера. ПР №746
  • В этой модели не используется нормализация местного отклика, как описано в исходной статье.
  • Эта модель реализована в январе 2017 года с предварительно обученной моделью.
  • Слой нормализации локального отклика PyTorch будет реализован в январе 2018 года. PR # 4667

AlexNet с LRN

Это реализация AlexNet, модифицированная по сравнению с AlexNet Jeicaoyu.

Примечание:

  • Количество фильтров Conv2d теперь совпадает с исходной бумагой.
  • Используйте слой нормализации локального отклика PyTorch, который был реализован в январе 2018 года. PR # 4667
  • Это только в образовательных целях. У нас нет предварительно подготовленных весов для этой модели.

Ссылка

Мои обзоры

Классификация изображений: [NIPS 2012] AlexNet
Сегментация изображений: [CVPR 2019] Pose2Seg
Оценка позы: [CVPR 2017] OpenPose
Отслеживание позы: [CVPR 2019] STAF