Зображення – це просто сітка чисел
Для комп’ютера фотографія – це просто сітка чисел. Сіро-сіра картинка є двовимірним масивом, де кожен елемент (кожен піксель) містить один рівень інтенсивності, зазвичай від 0 (чорний) до 255 (білий). Колірна картинка додає третю виміру: три стовпчики, по одному для рівнянтенсності червоного, зеленого та синього кольору, тому скромна картинка розміром 224 на 224 пікселі кольорового зображення насправді є масивом 224 × 224 × 3, або приблизно 150 000 окремих чисел. Будь-яка система комп’ютерного зору, навіть найскладніша, в кінцевому підсумку повинна видобувати сенс з цього простого набору чисел, без будь-якого внутрішнього уявлення про краї, форми чи об'єкти.
До глибокого навчання комп’ютерний зір покладався на розроблені вручну операції – фільтри, спроектовані дослідниками для виявлення конкретних закономірностей, таких як оператори Соболя або Канні. Це працювало до певної міри, але потребувало від людини вгадувати заздалегідь, які закономірності мають значення. Згорткові нейронні мережі (ЗНМ) замінюють цю здогадку: замість того, щоб людина проєктувала фільтри, мережа навчається їх безпосередньо з розмічених прикладів, виявляючи будь-які візуальні закономірності, які виявляються корисними для поставленого завдання.
Конволюція крок за кроком
Шаровий шар працює шляхом зсуву невеликої сітки навчальних чисел, що називається фільтром або ядром — зазвичай 3×3 або 5×5 — по зображенню, на один позицію одночасно. На кожній позиції значення фільтра множаться елементами з підрядними пікселями, а всі продукти підсумовуються в одне число. Це одне число стає одним пікселем вихідного зображення, що називається картою ознак. Зсувайте фільтр у кожну позицію зображення і ви отримаєте всю карту ознак: нову сітку, зазвичай меншого розміру, де кожна величина підсумовує наскільки сильно присутній цей шаблон фільтра в цій локації оригінального зображення.
Конкретно, якщо 3×3 ядро було навчено для виявлення вертикальних країв, воно міститиме великі позитивні числа вниз по одній колонці та великі негативні числа вниз по іншій; де завгодно в зображенні є справжній вертикальний край (різкий перехід яскравості з верхньої до нижньої), елементне множення та підсумовування виробляє велике значення виходу, а де зображення плоске або має горизонтальний край замість цього, вихід залишається близьким до нуля. Один шаровий шар зазвичай навчає десятки різних фільтрів одночасно — деякі налаштовані для горизонтальних країв, інші для діагональних країв, інші для переходів кольорів або невеликих текстур — і збирає всі їхні карти ознак разом як вихід шару.
Три налаштування контролюють, як саме відбувається зсув. Крок визначає, на скільки пікселів фільтр переходить між позиціями; крок 1 перевіряє кожну можливу позицію і виробляє велику, детальну карту ознак, тоді як крок 2 пропускає кожну другу позицію, зменшуючи вихід приблизно вчетверо. Наповнення визначає, що відбувається на краях зображення: з «дійсним» наповненням фільтр лише зсувається там, де він повністю поміщається в зображенні, що трохи зменшує вихід із кожним шаром, тоді як «однакове» наповнення додає межу нулів навколо зображення так, щоб вихід залишався таким самим розміром, як і вхід. А розмір виходу безпосередньо залежить від цих виборів: для входу розміром H, фільтра розміру K, кроку S та наповнення P розмір виводу становить (H + 2P − K) / S + 1.
Чому переміщення невеликого фільтра по всьому зображенню таке потужне
Операція конволюції має дві властивості, які роблять її набагато ефективнішою за повністю з’єднаний шар для обробки даних зображень, і обидві випливають безпосередньо з того, що один і той же невеликий фільтр повторно використовується у кожній позиції. Перша – спільне використання параметрів: 3x3 фільтр має лише 9 ваг (плюс термін зміщення) незалежно від розміру вхідного зображення, оскільки цей самий набір з 9 чисел повторно використовується на кожному переміщеному положенні, а не кожне положення отримує власний незалежний набір ваг. Повністю з’єднаний шар, який обробляє зображення 224x224 пікселів, потребував би десятки мільйонів ваг лише для одного шару; конволюційний шар із кількома 3x3 фільтрами потребує лише сотні.
Друга властивість – нечутливість до перекладів. Оскільки фільтр застосовується однаково у всьому зображенні, шаблон, який фільтр навчився виявляти – наприклад, вигин краю, що є частиною крила метелика – буде виявлено там, де б він не знаходився у кадрі, чи то в верхньому лівому куті, чи в центрі. Повністю з’єднаний мережа фактично повинна була б перевчитися, що таке вигин краю крила окремо для кожної можливої позиції, що є неефективним і гарантує погану узагальненість зображень, де об'єкт трохи змістився.
Шари зготування, зазвичай вставлені між конволюційними шарами, доповнюють це, навмисно зменшуючи карти ознак – найчастіше з використанням max pooling, який переміщує невелике вікно (зазвичай 2x2) по карті ознак і зберігає лише найбільше значення у кожному вікні, відкидаючи решту. Це знижує обчислювальні витрати в подальших етапах, робить мережу більш стійкою до невеликих зсувів або спотворень у тому, де з’являється ознака, і поступово збільшує ефективний поле зору: площу оригінального зображення, яка в кінцевому підсумку впливає на кожне значення глибоко в мережі.
Від країв до очей до облич: ієрархія ознак
Один конволюційний шар може виявляти лише дуже локальні, прості закономірності, оскільки його фільтр малий і бачить лише невеликий фрагмент зображення одночасно. Реальна сила згорткової нейронної мережі полягає в укладанні багатьох конволюційних шарів один на одного. Вихід першого шару – карти ознак, що показують, де відбуваються краї та прості кольорові переходи, стає входом для другого конволюційного шару. Оскільки фільтри другого шару працюють над картами ознак першого шару, а не над необробленими пікселями, і завдяки використанню пулінгу ефективний охопило поле було збільшено, другий шар може об'єднати кілька сусідніх країв у більш складну закономірність, наприклад, кут, криву або невелику текстуру.
Це посилюється глибиною. До третього або четвертого шару фільтри часто реагують на розпізнавані частини – щось як «кругла форма з темним центром», яке схоже на око, або хвилястий смугастий візерунок. На найглибших шарах великої мережі фільтри можуть реагувати на цілі частини об'єктів або цілі категорії: колесо, крило, обличчя. Саме тому архітектури CNN описують як автоматичне навчання ієрархічних ознак: ніхто не говорить мережі, що таке око; це виявляється корисно лише через те, що «виявлення закономірностей, схожих на очі», виявляється корисним проміжним кроком на шляху до правильного класифікації фотографій тварин або облич, за достатньої кількості розмічених навчальних прикладів і достатньої кількості шарів для поступового побудови ієрархії.
Цей процес, що базується на укладанні шарами за шаром, є саме тим видом процесу, який виграє від інтерактивної, крок за кроком візуалізації: спостерігати, як невеликий 3x3 фільтр ковзає по сітці зображень і генерує один вихідний параметр одночасно, робить механізм конкретним, а спостерігати, як кілька таких карт ознак накопичуються та подаються на вхід до наступного шару, робить ідею ієрархії ознак відчутною способом, який статична діаграма не може.
Від фільтрів до відомих архітектур
Сучасні архітектури CNN по суті є різними стратегіями організації шарів конволюції та пулінгу ефективно. AlexNet, який виграв конкурс ImageNet 2012 року та спричинив бум глибокого навчання в комп'ютерному vision, використовував п’ять шарів конволюції з великими ранніми фільтрами. VGG показало, що використання багатьох невеликих фільтрів 3×3 (замість меншої кількості великих) може досягти більшого ефективного поля сприйняття з меншою кількістю параметрів і кращою продуктивністю, але за рахунок глибини. ResNet вирішив проблему, яка виникла, коли мережі ставали надто глибокими — зникання градієнтів під час їхнього поширення назад через десятки шарів — шляхом додавання з’єднуючих шарів, які дозволяли безпосередньо додавати вихід одного шару до його входу, що дозволяло успішно навчати мереж із понад сотню шарів. Більш сучасні архітектури, включаючи EfficientNet і трансформери з visione (які замінюють конволюцію механізмом само-уваги, запозиченим з мовних моделей), продовжують вдосконалювати компроміс між точністю, розміром моделі та швидкістю виведення, але операція кочення фільтра, описана тут, залишається основополодним будівельним блоком, який зробив глибоке комп'ютерне vision практичним з першого погляду.
Часті запитання
Чому використовувати невеликі фільтри, такі як 3x3, замість одного великого фільтра, який бачить весь зображення одночасно?
Один фільтр, що охоплює все зображення, потребував би величезної кількості параметрів, лише виявляв би одну фіксовану глобальну закономірність, а не локальні, багаторазово використовувані ознаки, і підривав би мету обміну параметрами та інваріантності до перекладів. З'єднання декількох невеликих фільтрів (наприклад, три 3x3 шари один за одним) покриває еквівалентну площу одному великому фільтру, але з набагато меншою загальною кількістю параметрів і з доданими нелінійними активаційними функціями між кожним шаром, що дає мережі більшу виразність для тієї ж або нижчої обчислювальної вартості.
Що таке саме feature map?
Feature map – це результат, який отримують при зсуві одного фільтра по всьому вхідному зображенню. Кожна одиниця в feature map представляє міцність виявлення конкретного шаблону цього фільтра у відповідному місці вхідного зображення. Конволюційний шар із 64 фільтрами створює 64 окремі feature maps, які стовпчиком укладені разом і підкреслюють різні навчені закономірності, такі як певна орієнтація краю, перехід кольору або текстура.
Чи вирішує мережа, що саме виявляє кожен фільтр, чи людина проєктує його?
Мережа навчається значенням фільтрів повністю з даних за допомогою зворотного поширення та градієнтного спуску – того самого процесу оптимізації, який використовується для навчання решти мережі. Людина лише обирає архітектуру, тобто розмір фільтра, кількість фільтрів на шарі та скільки шарів з'єднати в стовпчик. Що саме виявляє кожен окремий фільтр, автоматично виникає під час навчання на мічених зображеннях і зазвичай не розробляється або передбачається заздалегідь.
Як 1x1 конволюція має сенс, якщо фільтр лише покриває один піксель?
1x1 конволюція не об'єднує жодних сусідніх просторових пікселів, але вона об'єднує інформацію по каналах, оскільки все ще множить і підсумовує по всій глибині feature maps у цьому місці. Це дешевий спосіб змінити кількість feature maps (або стиснути багато каналів в менше, або розширити менше в більше), водночас додаючи додаткову нелінійну трансформацію, тому архітектури, такі як Inception і ResNet, широко використовують 1x1 конволюції для ефективності.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation