Сегодняшняя тема - AlexNet с конференции NIPS 2012. AlexNet - победитель конкурса ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 2012.
До ILSVRC 2012 конкуренты в основном использовали методы проектирования функций в сочетании с классификатором (то есть SVM).
AlexNet ознаменовал прорыв в глубоком обучении, где CNN была использована для существенного снижения количества ошибок в ILSVRC 2012 и достижения первого места в конкурсе ILSVRC.
Основные моменты этого документа:
- Прорыв в глубоком обучении с использованием CNN для классификации изображений.
- Мульти-графические процессоры
- Используйте ReLU
- Использовать отсев
Контур
- Архитектура
- 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] Классификация ImageNet с глубокими сверточными нейронными сетями.
- [2015 ICLR] [VGGNet] Очень глубокие сверточные сети для распознавания крупномасштабных изображений
- [Код] Погрузитесь в репозиторий PyTorch
Мои обзоры
Классификация изображений: [NIPS 2012] AlexNet
Сегментация изображений: [CVPR 2019] Pose2Seg
Оценка позы: [CVPR 2017] OpenPose
Отслеживание позы: [CVPR 2019] STAF