В этом блоге мы узнаем об основах модели VGG.
Фон
Запуск конкурса компьютерного зрения ImageNet Large Scale Visual Recognition Challenge (ILSVRC) в 2011 году проложил путь к инновациям в области задач компьютерного зрения. Используя набор данных ImageNet, сеть AlexNet на основе CNN была предложена Алексом Крижевским в 2012 году. Сеть выиграла конкурс в том году с коэффициентом ошибок в пятерке лучших 15,3%. В следующие пару лет Карен Симонян и Эндрю Зиссерман предложили идею сети VGG и представили реальную модель, основанную на этой идее, на конкурсе ImageNet 2014 года, где она заняла первое место. Они назвали модель VGG в честь отделения группы визуальной геометрии в Оксфордском университете, где они учились.
Что такое ВГГ?
VGG — это стандартная архитектура сверточной нейронной сети (CNN) с несколькими уровнями, которая была разработана для повышения точности классификации за счет увеличения глубины CNN. «Глубина» относится к количеству слоев свертки с VGG16 или VGG19, состоящих из 16 и 19 слоев свертки. VGG был обучен на наборе данных ILSVRC, который включал изображения 1000 классов, разделенных на три набора из 1,3 миллиона обучающих изображений, 100 000 тестовых изображений и 50 000 проверочных изображений. Точность модели в испытании ImageNet составила 92,7 %.
Чем она отличается от предыдущих моделей?
По сравнению с большими рецептивными полями в предыдущих моделях, таких как AlexNet и ZFNet, VGG использует очень маленький рецептивный фильтр 3x3 (наименьший возможный размер, который по-прежнему захватывает лево/право и вверх/вниз) с шагом 1 пиксель по сравнению с AlexaNet, который использует фильтр 11x11 с шагом 4 и ZFNet, в котором используется фильтр 7x7 с размером 4.
Идея использования унифицированных фильтров 3x3 заключается в том, что они могут воспроизводить фильтры переменного размера, используемые в AlexNet и ZFNet. Например, два последовательных фильтра 3x3 обеспечивают эффективное рецептивное поле 5x5. Точно так же три фильтра 3x3 эквивалентны фильтру 7x7. Этот блог Акила Анвара довольно хорошо объясняет вышеупомянутую концепцию.
Теперь давайте проверим количество переменных, которые необходимо обучить. Фильтр слоя свертки 5x5 имеет 25 параметров, а два фильтра 3x3 имеют в общей сложности 18 (= 3x3x2) параметров. Несколько фильтров 3x3 также приводят к появлению нескольких нелинейных слоев активации, которые делают модель более различительной и позволяют сети быстрее сходиться.
Конфигурации VGG
Авторы предложили различные конфигурации (VGG16, VGG19 и т. д.) сети в зависимости от глубины сети. Основным строительным блоком этих конфигураций является стек из нескольких сверточных слоев с размером фильтра 3x3, шагом 1 и заполнением 1, за которым следует слой максимального объединения размером 2x2. За стеками свертки следуют три полносвязных слоя. Первые два размером 4096 и последний размером 1000 — это выходной слой с функцией активации softmax. Размер 1000 относится к общему количеству возможных классов в ImageNet.
Архитектура VGG16
Из всех конфигураций VGG16 была признана самой эффективной моделью в наборе данных ImageNet. В этом разделе мы рассмотрим фактическую архитектуру этой конфигурации.
- Входные данные: изображение размером 224 x 224 пикселя с 3 каналами (RGB). Единственная необходимая предварительная обработка — это нормализация значений RGB путем вычитания среднего значения из каждого пикселя.
- Сверточные слои. Сверточные слои в VGG используют очень маленький восприимчивый фильтр размером 3x3, наименьший возможный размер, который может захватывать вверх-вниз и влево-вправо. Существуют также фильтры свертки 1x1 (действующие как линейное преобразование входных данных), которые следуют за нелинейной функцией активации ReLU, которая позволяет сети изучать более сложные функции.
- Полностью подключенные уровни. VGG имеет 3 полностью подключенных уровня, каждый из первых двух имеет 4096 каналов, а третий уровень имеет 1000 каналов — по одному для каждого класса.
- Скрытые слои. Все скрытые слои в сети VGG используют ReLU.
Как это работает?
Входное изображение размером 224x224 проходит через первый стек из 2 сверточных слоев, каждый из которых имеет 64 фильтра очень маленького рецептивного поля 3x3 с последующими активациями ReLU. Шаг свертки зафиксирован на уровне 1 пикселя, а заполнение равно 1 пикселю. До этой фазы пространственное разрешение не меняется, а размер карты объектов такой же, как у входного изображения. Затем карты объектов проходят через слой максимального объединения в окне 2x2 с шагом 2 пикселя, что уменьшает размер карты объектов вдвое. Размер активации или функции в конце первого стека слоев уменьшается до половины входного изображения 112x112x64.
Теперь полученная карта объектов затем проходит через аналогичную секунду со 128 фильтрами (вместо 64, как в первом слое). В результате выходные данные в конце этого слоя уменьшаются вдвое и становятся 56x56x128. Затем следует третий стек с тремя слоями свертки и слоем максимального пула. Поскольку количество фильтров, примененных на этом шаге, равно 256, выходной размер стека составляет 28x28x256. Затем следуют два стека по три слоя свертки, каждый из которых содержит 512 фильтров. Выход в конце этих стеков 7x7x512.
За стопками сверточных слоев следуют три полносвязных слоя вместе с последним уплощением. Первые два слоя содержат по 4096 нейронов в каждом, а последний полносвязный слой — это выходной слой с 1000 нейронами, соответствующими тысяче классов, представленных в наборе данных ImageNet. За выходным слоем следует слой активации softmax, используемый для категориальной классификации.
На приведенном ниже рисунке показаны структурные детали модели VGG16, объясняющие размер ввода и вывода, размер ядра и шага, а также количество параметров на каждом шаге.
Задачи
Несмотря на то, что модель VGG очень проста, элегантна и удобна в использовании, с ней связаны некоторые проблемы. VGG имеет более 138 МБ, а размер модели составляет более 533 МБ. Это делает внедрение сети VGG трудоемкой задачей. Во-вторых, глубина сети приводит к проблеме исчезающего градиента.
Модель VGG все еще используется в нескольких задачах классификации изображений, но в будущем более мелкие сетевые архитектуры, такие как GoogleNet и SqueezeNet, часто предпочтительнее.
Ссылки:
- https://towardsdatascience.com/vgg-neural-networks-the-next-step-after-alexnet-3f91fa9ffe2c
- https://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture9.pdf
- https://viso.ai/deep-learning/vgg-very-deep-convolutional-networks/
- https://www.mygreatlearning.com/blog/introduction-to-vgg16/
- https://towardsdatascience.com/the-w3h-of-alexnet-vggnet-resnet-and-inception-7baaaecccc96
Документы:
- https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf
- https://arxiv.org/abs/1409.1556