Що таке ядро згортки
Кожне цифрове фото зображення, під своїм візуальним виглядом, є сіткою чисел. Сірої шкали зображення – це одна матриця, де кожен елемент містить значення яскравості від 0 (чорний) до 255 (білий); кольорове зображення – це три такі матриці, що стоять одна над одною, по одній для каналів червоного, зеленого та синього. Згортка – це операція, яка дозволяє систематично трансформувати цю сітку шляхом зсуву невеликої матриці — ядра або фільтра — по кожній позиції зображення та комбінування значень під нею в одне числового виходу.
Типове ядро набагато менше, ніж зображення, часто лише 3×3 або 5×5 клітин. На кожній позиції множиться кожне значення ядра на значення пікселя, яке воно перекриває, і сумуються результати – це та сама операція, що й скалярний добуток двох зведених у векторні форми векторів. Ця сума стає одним пікселем нового зображення, яке називається картою ознак. Перемістіть ядро на один крок вправо, повторіть обчислення та отримаєте наступний піксель виходу. Зробіть це по всьому зображенню і ви трансформуєте його відповідно до будь-якого шаблону, який містить ядро.
Що робить це таким потужним полягає в тому, що кілька чисел, розташованих у правильному порядку, можуть виявляти значущу структуру. Ядро, яке має від’ємне значення зліва і позитивне справа, сильно реагує там, де значення яскравості переходить від темного до світлого – тобто воно виявляє вертикальні краї. Ядро з однорідними позитивними значеннями усереднює сусідство, розмиває зображення. Математична операція ніколи не змінюється; лише числа всередині ядра змінюються, і цього достатньо для створення дуже різних ефектів.
Читання Ядра Руками: Виявники Кромок та Розмиття
Розглянемо класичний вертикальний ядро, що використовується в ранніх роботах машинного зору:
[-1 0 1] [-1 0 1] [-1 0 1] Кожен рядок віднімає піксель зліва від позиції від пікселя справа. У рівній області, де сусідні пікселі майже ідентичні, цей сума приблизно дорівнює нулю, тому вихід залишається темним. Але де зображення переходить із темної зони в світлу — скажімо, з 0 до 255 — сума різко зростає, створюючи яскравий піксель у виході. Результатом є карта, яка світиться точно там, де зустрічаються вертикальні краї, і залишається темною всюди інше.
Оператор Собеля, один із найпоширеніших ядер для виявлення кромок, вдосконалює цю концепцію, надаючи більшу вагу центральному рядку або стовпчику:
Sobel X: Sobel Y: [-1 0 1] [-1 -2 -1] [-2 0 2] [ 0 0 0] [-1 0 1] [ 1 2 1] Обчислення Sobel X та Sobel Y окремо, а потім об'єднання результатів за допомогою величини = sqrt(Gx² + Gy²) дає силу краю, яка чутлива до градієнтів у будь-якому напрямку, а не лише горизонтальному або вертикальному.
Ядра розмиття працюють на протилежному принципі: замість підсилення відмінностей, вони їх згладжують. Ядро розмиву 3x3 є просто дев'ять клітинок, кожна з яких містить 1/9, тому піксель вихідного значення стає середнім значенням свого сусідства. Ядро гаусового розмиття надає більшу вагу центральній клітинці та поступово зменшується до країв, слідуючи за кривою ділення, що створює більш гладкий і природний вигляд розмиття з меншою кількістю різких артефактів, ніж простий середній показник. Ядро для підвищення чіткості робить це в зворотньому порядку: підсилює центральний піксель відносно сусідніх, наприклад [[-1,-1,-1],[-1,9,-1],[-1,-1,-1]], що підкреслює локальний контраст і робить краї більш чіткими.
[-1 0 1] [-1 0 1] [-1 0 1]
Крок, Розмірний Шар та Розмір Вихідного Масиву
Три параметри точно контролюють, як ядро переміщується по зображенню, і який розмір матиме отриманий масив ознак.
Розмірний шар – це крок, на який ядро робить переміщення між обчисленнями. При розмірному шарі 1 ядро зсувається на один піксель за раз, що призводить до виводу майже такого ж розміру, як і вхідний. При розмірному шарі 2 кожне інше положення пропускається, зменшуючи роздільну здатність виводу в кожному вимірі вдвічі – це простий та поширений спосіб зменшення роздільної здатності зображення, зберігаючи при цьому операцію фільтрації.
Розмірний шар вирішує, що відбувається на межах. Зображення 5x5, згощене з ядром 3x3 і без розмірного шару («роздільний» розмірний шар), може бути лише центроване в позиціях 3x3, тому вихід зменшується до 3x3. Якщо ви хочете, щоб вихід залишався таким самим розміром, як і вхід («однаковий» розмірний шар), то потрібно заповнити межу додатковими рядками та стовпцями – зазвичай нулями – перед зсувом ядра, щоб кожен оригінальний піксель міг служити центром ядра.
Ці два параметри поєднуються в одну формулу, яка точно передбачає розмір виводу:
розмір_виводу = підлогу((розмір_входу + 2 * розмірний_шар − розмір_ядра) / розмірний_шар) + 1 Ця формула важлива на практиці, оскільки вона визначає, скільки шарів згортки ви можете укласти перед тим, як зображення зменшиться до нічого, і скільки потрібно розмірного шару для збереження просторового розв’язку в глибокій мережі. Це також саме той тип взаємозв’язку, який стає інтуїтивним лише тоді, коли ви можете переміщувати повзунки для розміру ядра, розмірний шар та розмірний шар і спостерігати, як вихідна сітка змінюється в режимі реального часу – тому візуалізатор згортки, який одночасно показує ковзаюче вікно та отриманий масив ознак, є одним із найефективніших способів засвоїти концепцію.
output_size = floor((input_size + 2 × padding − kernel_size) / stride) + 1
Від розроблених вручну фільтрів до навчених ядер
Все, що було описано раніше, використовує ядра, які людина розробляє вручну — значення в ядрі Соболя або гаусовому ядрі були отримані математично десятиліття тому і ніколи не змінюються. Конволюційні нейронні мережі (КНМ) використовують той самий механізм
зсувного вікна
але розглядають значення ядер як налаштовувані параметри замість фіксованих констант. Шар конволюції починається з ядер, ініціалізованих до малих випадкових чисел, а градієнтний спуск коригує ці числа, шар за шаром, щоб отримані карти ознак стали корисними для будь-якої задачі, на яку навчається мережа — класифікація цифр, виявлення облич, сегментація пухлин.
Ранні шари навченої КНМ схильні відтворювати фільтри, які виглядають дивовижно подібно до розроблених вручну: детектори країв, кольорові-супротивні клаптики, орієнтовані грати. Це вражаюча валідація класичної інтуїції щодо проектування фільтрів — мережа збігається на подібних рішеннях, тому що вони справді корисні для вилучення структури з природних зображень. Більш глибокі шари об'єднують ці карти ознак низького рівня в детектори для все більш абстрактних шаблонів: текстур, частин об’єктів і врешті-решт цілих категорій об’єктів.
Шар конволюції узагальнює ідею одного ядра, застосовуючи багато ядер паралельно до одного й того ж вхідного зображення, кожне з яких виробляє свою власну карту ознак, усі зібрані разом у 3D об’єм виводу. Якщо шар застосовує 16 фільтрів розміром 3×3 до зображення RGB з 3 каналами, його тензор ваг має форму (3, 3, 3, 16) — три вхідних канали на фільтр, шістнадцять незалежних фільтрів. Кількість налаштовуваних параметрів у цьому одному шарі становить 3×3×3×16 = 432 ваги плюс 16 термінів зміщення, що значно менше, ніж кількість параметрів, необхідних повністю з’єднаній шару для обробки того самого зображення, оскільки ядро повторно використовується (з тими ж ваговими коефіцієнтами) на кожній просторовій позиції. Ця спільність ваг є точно тому, як КНМ масштабуються до великих зображень без вибуху кількості параметрів.
Рецептивний Поле: Як Збійка Шарів Розглядає Більше
Один 3x3 фільтр лише «бачить» фрагмент розміром 3x3 пікселів вхідного зображення — його рецептивне поле становить 3x3 пікселі. Але якщо з’єднати другий 3x3 згортковий шар поверх першого, нейрон у другому шарі бачить фрагмент 3x3 пікселів виходу першого шару, і кожен з цих нейронів сам обчислювався з фрагменту 3x3 пікселів оригінального зображення. Ефективне рецептивне поле в оригінальному зображенні становить 5x5. Додайте третій шар, і воно збільшується до 7x7, слідуючи за тим самим шаблоном, що кожен наступний 3x3 шар (з кроком 1) додає два пікселі до рецептивного поля в кожній осі.
Цей накопичувальний ефект пояснює, чому глибокі мережі можуть розпізнавати велику масштабну структуру — ціле обличчя, автомобіль, будівлю — незважаючи на те, що кожен окремий фільтр є маленьким. Це також пояснює ключову компромісну дилему: два з’єднані 3x3 згорткові шари досягають того ж 5x5 рецептивного поля, як і один 5x5 згортковий шар, але з меншою кількістю загальних параметрів (2×9=18 проти 25 на кожну пару входів-виходів) та додатковою нелінійністю між ними, що є однією з причин, чому сучасні архітектури віддають перевагу багатьом маленьким фільтрам замість кількох великих.
Зменшення розмірів карт ознак за допомогою пулінгу
Згортка зазвичай поєднується з другою операцією зменшення просторових розмірів – пулінгом, яка знижує розмір карт ознак без додавання натренованих параметрів. Макс-пулінг зсуває невелике вікно (зазвичай 2x2) по карті ознак і зберігає лише найбільше значення в кожному вікні, відкидаючи все інше. Це зменшує ширину та висоту карти ознак у два рази, зберігаючи найсильніші активації – фактично запитуючи «чи був цей шаблон присутній будь-де в невеликій області?» замість «точно де він знаходився?»
Ця втрата точного розташування є свідомою: це дає мережі певну стійкість до перекладів, щоб ознака, виявлена трохи зсунутою від центру на одному зображенні, все ще викликала такий самий сигнал, якби вона була ідеально центрована. Середнє пулінг, яке бере середнє значення замість максимального, рідше використовується в проміжних шарах, але залишається поширеним у кінці мережі (глобальне середнє пулінг), де воно стискає кожну цілу карту ознак до одного числа перед остаточним шаром класифікації.”]}cat: error. The response is not in JSON format. Please ensure the output is valid JSON. Specifically, the keys must be enclosed in double quotes and the values must be strings. Also, the structure of the JSON should match the example provided. It appears that you are trying to translate the given text into Ukrainian, but the output is not in the correct format. Here's a corrected version: {
heading
paragraphs
}
Часті запитання
Яка різниця між згорткою та перехресною кореляцією?
Математично, справжня згортка перевертає ядро як горизонтально, так і вертикально перед тим, як ковзати його по зображенню, а перехресна кореляція цього не робить. На практиці майже будь-яка глибока навчальна платформа та бібліотека обробки зображень реалізує те, що технічно є перехресною кореляцією, але називає це «згорткою» — оскільки значення ядра розроблені вручну або навчені, перевертання не має жодного практичного впливу на результат.
Чому CNN використовують маленькі ядра, такі як 3x3 замість більших?
З'єднання кількох маленьких ядер досягає того ж охоплення, що й одне велике ядро, але при цьому використовується менше параметрів і додаються більше нелінійних кроків активації між ними, що сприяє підвищенню представницької здатності мережі без значного збільшення обчислювальної вартості.
Чи завжди більший ядро захоплює більше корисної інформації?
Не обов’язково. Більше ядро бачить ширшу область за один крок, але воно також має більше параметрів для навчання, більш схильне до перенавчання на обмежених даних і агресивніше розмиває деталі. Сучасні архітектури переважно віддають пріоритет глибині (багато маленьких ядер) над шириною (невелика кількість великих ядер).
Що відбувається з пікселями на межі під час згортки?
Без заповнення ядро не може центруватися на зовнішніх рядках і стовпцях, тому ці пікселі або відкидаються (чинне заповнення, що призводить до меншого вихідного розміру), або зображення штучно розширюється, часто нулями, щоб ядро все ще могло застосовуватися в кожній початковій позиції пікселя (однорідне заповнення, яке дає вихідний розмір, такий самий, як і вхідний).
Як я можу побачити, що робить згорткове ядро?
Найчітший спосіб — це анімувати ковзаюче вікно: показати поточну позицію ядра на сітці вхідних даних, обчислення множення та суми для цієї позиції та відповідний піксель, який загоряється у карті ознак виводу, а потім переміщатися по позиціям один за одним або відтворювати це безперервно, щоб побачити, як з'являється кінцева карта ознак.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation