Як працює VGG16 — нейромережа для виділення ознак зображень | robot_dreams
Для відстеження статусу замовлення - авторизуйтесь
Введіть код, який був надісланий на пошту Введіть код із SMS, який був надісланий на номер
 
Код дійсний протягом 2 хвилин Код з SMS дійсний протягом 2 хвилин
Ви впевнені, що хочете вийти?
Сеанс завершено
На головну
Як працює 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.

Ще статті
У два рази більше натхнення та інформації на другій онлайн-конференції від robot_dreams
Експертки про те, як оцінюють кандидатів на нетехнічних інтерв’ю