Как работает VGG16 — нейросеть для выделения признаков изображений | robot_dreams
Для отслеживания статуса заказа — авторизируйтесь
Введите код, который был выслан на почту Введите код с SMS, который был выслан на номер
 
Код действителен в течение 5 минут Код с sms действителен в течение 5 минут
Вы уверены, что хотите выйти?
Сеанс завершен
На главную
Как работает VGG16 — нейросеть для выделения признаков изображений

Как работает VGG16 — нейросеть для выделения признаков изображений

И почему она полезна для всех, кто работает с computer vision

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

Так что начнем с разбора именно сверточных нейронок.

Как работает сверточная нейронная сеть: объясняем на пальцах

Хотя первые сверточные нейронки создавали еще в 90-х, для их работы нужны были огромные количества обучающих данных и большие вычислительные ресурсы. Поэтому считается, что архитектуру первых сверточных нейронных сетей придумал французский ученый Ян Лекун (Yann LeCun) в 2012 году. Многослойность, по принципу которой она строится, Ян подсмотрел в природе: сеть копирует работу зрительной системы у млекопитающих, в частности — у человека.

Ян Лекун, автор архитектуры первых сверточных нейронных сетей. С 2013 года — глава Facebook AI Research // Photo by Jérémy Barande

Вот как это происходит на примере. Допустим, перед нейронной сетью стоит задача распознать предмет на фотографии:

 

1. Сверточная сеть делит изображение на маленькие кусочки, которые называются фильтрами или ядрами.

2. Фильтры скользят по всему изображению, проверяя, насколько они совпадают с разными его частями. Каждый фильтр пытается обнаружить специфические признаки объекта: границы, цвета, текстуры.

3. Если фильтр обнаруживает искомый признак, он создает активацию — высокое значение в определенной области изображения.

4. Активации объединяются вместе, чтобы сгенерировать новое представление изображения, где более высокие уровни абстракции связаны с более глубокими слоями сети. Таким образом, сверточная сеть самостоятельно анализирует иерархические признаки изображений, начиная с простых форм и линий — и заканчивая сложными объектами и концепциями.

5. Наконец, обработанные признаки передаются в полносвязные слои сети для классификации или выполнения других задач, например, обнаружения объектов или сегментации изображений.

 

Сверточные нейронные сети значительно улучшили показатели систем компьютерного зрения: до их использования распознавание проходило успешно только в 25 % случаев, а в 2012 году модель AlexNet на основе сверточных сетей показала распознавание в почти 84 % случаев.

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

Особенности модели VGG16

Перейдем к модели VGG16. Аббревиатура VGG — это сокращение от названия Visual Geometry Group, группы при Оксфордском университете, которая и разработала эту технологию в 2013 году. Число 16 в имени означает количество слоев, которые используются в этой нейронной сети: 13 сверточных слоев и 3 полносвязанных слоя.

Рассмотрим схему работы модели VGG16 детальнее:

Как работает нейронная сеть VGG16

Размерность входного слоя нейронной сети VGG16 составляет 224 на 224 пикселя. Задача входного слоя — преобразовать входные данные в формат, понятный для последующих слоев нейронной сети. То есть это точка входа, через которую данные передаются в модель для обработки.

Вот что происходит, когда изображение прошло через точку входа:

 

1. Данные проходят два сверточных слоя, у которых функция активации ReLu и размеры ядер — 3x3 пикселя.

2. После двух сверточных слоев следует слой MaxPooling, который уменьшает размерность данных в два раза.

3. Далее следуют два сверточных слоя, у которых также есть функция активации ReLu и размер ядер 3x3. У этих слоев 128 фильтров. После этого применяется операция MaxPooling — и размер карты признаков снова уменьшается в два раза.

4. Затем идут три сверточных слоя, у которых 256 фильтров, и т. д.

 

По мере углубления сети количество фильтров увеличивается с 64 до 512. После каждого сверточного слоя следует активация ReLu, которая помогает введению нелинейности в модель. В конце, после последнего слоя MaxPooling, мы получаем размерность 7x7 и 512 каналов.

Данные подаются на вход полносвязанной нейронной сети, которая содержит 4096 нейронов и также имеет функцию активации ReLu (кроме последнего слоя Softmax). Поскольку изначально сеть обучалась на тысяче разных классов, на выходе у нее — тысяча нейронов.

Важно! Когда мы используем два сверточных слоя подряд, мы получаем карту признаков, которая анализируется вторым сверточным слоем. Получается, что ситуация аналогична тому, как если бы мы взяли ядро с размерностью 5х5. Но если все-таки взять фильтр с размерностью 5х5, то, подсчитав количество настраиваемых коэффициентов, можно убедиться, что два сверточных слоя выгоднее по сравнению с одним с фильтром большей размерности.

Это нетрудно подсчитать по формуле:

число_настраиваемых_коэффициентов = количество_фильтров * (размер_ядра_свертки * размер_ядра_свертки + 1)

Для одного слоя результат будет 5*5+1=26, а для двух слоев — 2(3*3+1)=20. То есть число настраиваемых коэффициентов будет меньше, но при этом скорость обучения нейронной сети — выше.

Как работать с VGG16

Чтобы начать работать с VGG16, вам нужен фреймворк глубокого обучения. Например, на Python. Можно использовать:

 

1. TensorFlow

2. PyTorch

3. Keras

 

Список не ограничивается этими фреймворками, но именно они предоставляют удобные средства для создания, обучения и тестирования моделей нейронных сетей. Например, PyTorch предлагает загрузить уже обученную модель из библиотеки torchvision.models, в Keras она загружается из keras.applications, а в TensorFlow — через библиотеку tf.keras.applications.

Важно! Также VGG16 можно найти в открытых репозиториях, например, GitHub.

Для проверки производительности и точности обработки данных рекомендуется применять тестовые наборы данных, которые содержат изображения, соответствующие задаче классификации объектов. Это могут быть такие наборы, как CIFAR-10, ImageNet або COCO.

Заключение

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

«VGG — это классика. У нее относительно старая архитектура, но она до сих пор используется. Есть, конечно, более эффективные альтернативы, но новичкам знать принципы ее работы очень полезно. Потому что как вы хотите работать с нейросетями, если не знаете, что такое VGG?»

Ян Колода, Senior CV&ML Engineer,
PhD в Image Processing & Computer Vision,
лектор курса Computer Vision в robot_dreams

Главная особенность VGG16 — задействование небольших фильтров с размером ядра 3x3 пикселя и применение глубоких сверточных слоев. Часто модель требует оптимизации и регуляризации, что объясняется особенностями архитектуры и высокой вычислительной сложностью.

Также эта нейросеть требует большого объема памяти для хранения параметров модели. Общее количество параметров в модели VGG16 — около 138 миллионов. Это включает в себя вес и смещения всех слоев нейронной сети.

Полезно! Если вы используете фреймворк Keras, то объем памяти, занимаемый моделью, можно узнать с помощью метода model.summary(). Он выведет сводку архитектуры модели, включая общее число параметров и размеры каждого слоя.

Помимо VGG16 есть также модель VGG19, которая появилась в 2014 году. У нее практически идентичная архитектура и отличие только в числе используемых слоев — тут их 19. К ее изучению можно приступить как раз после VGG16. А если ищете что-нибудь сложнее и производительнее, присмотритесь к ResNet, Inception и EfficientNet.

Ещё статьи
Экспертки о том, как оценивают кандидатов на нетехнических интервью
Часть 2. Работа с записями: вставка, чтение, изменение и удаление