Система Віоли — Джонса виявляння об'єктівСисте́ма Ві́оли — Джо́нса виявля́ння об'є́ктів (англ. Viola–Jones object detection framework) — це система машинного навчання виявляння об'єктів, запропонована 2001 року Полом Віолою[en] та Майклом Джонсом[en].[1][2] Її було вмотивовано головно задачею виявляння облич, хоча її можливо пристосовувати й для виявляння інших класів об'єктів. Цей алгоритм ефективний для свого часу, здатний виявляти обличчя на зображеннях 384 на 288 пікселів зі швидкістю 15 кадрів за секунду на звичайному Intel Pentium III 700 МГц. Він також стійкий, забезпечує високі влучність та повноту. Хоч він і має нижчу точність за сучасніші методи, такі як згорткова нейронна мережа, його ефективність і компактний розмір (лише близько 50 тисяч параметрів у порівнянні з мільйонами параметрів для типових ЗНМ, таких як DeepFace[en]) означають, що його все ще використовують у випадках з обмеженою обчислювальною потужністю. Наприклад, у первинній праці[1] повідомили, що цей виявляч облич може працювати на Compaq iPAQ з 2 кадрами за секунду (цей пристрій має малопотужний StrongARM без апаратного забезпечення рухомої коми). Опис задачіВиявляння облич — це задача бінарної класифікації, поєднана з задачею встановлення розташування: для заданого зображення вирішити чи воно містить обличчя, і побудувати обмежувальні рамки для облич. Щоби зробити це завдання легшим, алгоритм Віоли — Джонса виявляє лише повністю видимі (без затуляння) фронтальні (без повороту голови) вертикальні (без нахилу), добре освітлені повнорозмірні (займають більшу частину кадру) обличчя на зображеннях із фіксованою роздільністю. Ці обмеження не такі суворі, як здається, оскільки можливо унормовувати картинку, щоби наближувати її до вимог Віоли — Джонса.
Вимога «фронтальності» не підлягає обговоренню, оскільки не існує простого перетворення зображення, яке могло би перетворювати обличчя з профілю на анфас. Проте можливо натренувати декілька класифікаторів Віоли — Джонса, по одному на кут: один для анфасу, один для огляду в 3/4, один для профілю, ще кілька для кутів між ними. Потім під час виконання можливо виконувати всі ці класифікатори паралельно, щоби виявляти обличчя під різними кутами огляду. Вимога «повної видимості» також не підлягає обговоренню, і її неможливо виконати, просто навчивши більше класифікаторів Віоли — Джонса, оскільки існує занадто багато можливих способів затуляння обличчя. Складові системиПовне подання алгоритму наведено в [3]. Розгляньмо зображення фіксованої роздільності . Наше завдання — ухвалити бінарне рішення: чи це фотографія стандартизованого обличчя (фронтального, добре освітленого тощо), чи ні. Віола — Джонс — це, по суті, алгоритм навчання ознак з підсилюванням, тренований за допомогою видозміненого алгоритму AdaBoost[en] на класифікаторах гааровими ознаками для пошуку послідовності класифікаторів . Класифікатори гааровими ознаками грубі, але обчислюються дуже швидко, а видозмінений AdaBoost створює сильний класифікатор із багатьох слабких. Під час виконання задане зображення послідовно перевіряють на . Якщо в будь-який момент , алгоритм негайно повертає «обличчя не виявлено». Якщо всі класифікатори повертають 1, тоді алгоритм повертає «обличчя виявлено». Через це класифікатор Віоли — Джонса також називають «каскадним гааровим класифікатором» (англ. "Haar cascade classifier"). Класифікатори гааровими ознакамиРозгляньмо перцептрон , визначений двома змінними . Він бере зображення фіксованої роздільності, й повертає
![]() Класифікатор гааровими ознаками — це перцептрон з дуже особливим видом , що робить його надзвичайно невитратним для обчислення. А саме, якщо ми випишемо матрицю , ми виявимо, що вона набуває лише трьох можливих значень , і якщо ми забарвимо матрицю білим на , чорним на , та прозорим на , то ця матриця це один з 5 можливих шаблонів, показаних праворуч. Кожен шаблон також мусить бути симетричним відносно x та y (без урахування зміни кольору), тому, наприклад, для горизонтальної біло-чорної ознаки ці два прямокутники мусять мати однакову ширину. Для вертикальної біло-чорно-білої ознаки білі прямокутники мусять мати однакову висоту, але обмежень щодо висоти чорного прямокутника немає. ![]() ![]() Обґрунтування гаарових ознакГаарові ознаки, які використовують в алгоритмі Віоли — Джонса, — це підмножина загальніших гаарових базисних функцій, які раніше використовували в галузі виявляння об'єктів на основі зображень.[4] Незважаючи на грубість порівняно з такими альтернативами як керовані фільтри, гаарові ознаки достатньо складні, щоби їх було можливо зіставляти з ознаками типових людських облич. Наприклад:
Склад властивостей, які утворюють зіста́вні ознаки обличчя:
Крім того, будова гаарових ознак дозволяє ефективно обчислювати з використанням лише сталої кількості додавань і віднімань, незалежно від розміру прямокутних елементів, завдяки використанню таблиці сумарних площ. Навчання та використання класифікатора Віоли — ДжонсаОбрати роздільність для класифікування зображень. У первинній статті радили . навчанняЗібрати навчальний набір, де одні зображення містять обличчя, а інші ні. Виконати певне видозмінене тренування AdaBoost на наборі всіх класифікаторів гааровими ознаками розмірності , поки не буде досягнуто бажаного рівня влучності та повноти. Цей видозмінений алгоритм AdaBoost видаватиме послідовність класифікаторів гааровими ознаками . Деталі видозміненого алгоритму AdaBoost розкрито нижче. використанняЩоби скористатися класифікатором Віоли — Джонса з на зображенні , послідовно обчислити . Якщо в будь-який момент, , алгоритм негайно повертає «обличчя не виявлено». Якщо всі класифікатори повертають 1, то алгоритм повертає «виявлено обличчя». Алгоритм навчанняОдначе швидкість, з якою можливо оцінювати ознаки, не компенсує належним чином їхню кількість. Наприклад, у стандартному підвікні розміром 24x24 пікселі загалом є M = 162336[5] можливих ознак, і було би до неможливого витратно під час перевірки зображення оцінювати їх усі. Тож ця система виявляння об'єктів використовує варіант алгоритму навчання AdaBoost[en] як для обрання найкращих ознак, так і для тренування класифікаторів, які їх використовують. Цей алгоритм створює «сильний» класифікатор як лінійну комбінацію зважених простих «слабких» класифікаторів. Кожен слабкий класифікатор — це порогова функція на основі ознаки . Порогове значення та полярність визначають тренуванням, як і коефіцієнти . Тут подано спрощену версію алгоритму навчання:[6] Вхід: Набір із N позитивних і негативних тренувальних зображень із їхніми мітками . Якщо зображення i є обличчям, , якщо ні, .
Каскадна архітектура
Мусимо витрачати більшу частину часу на лише потенційно позитивні підвікна.
У каскадуванні кожен етап складається з сильного класифікатора. Таким чином, усі ознаки згруповано в кілька етапів, де кожен етап має певну кількість ознак. Робота кожного етапу полягає у визначенні того, чи дане підвікно точно не обличчя, чи воно може ним бути. Дане підвікно негайно відкидають як не обличчя, якщо воно не проходить будь-якого з етапів. Нижче наведено просту систему для навчання каскаду:
F(0) = 1,0; D(0) = 1,0; i = 0 поки F(i) > Ftarget збільшити i n(i) = 0; F(i)= F(i-1) поки F(i) > f × F(i-1) збільшити n(i) використати P та N для тренування класифікатора з n(i) ознаками за допомогою AdaBoost[en] Оцінити поточний каскадний класифікатор на затверджувальному наборі, щоби визначити F(i) та D(i) зменшити поріг для i-того класифікатора (тобто скільки слабких класифікаторів потрібно задовольнити, щоби задовольнити сильний) допоки поточний каскадний класифікатор не матиме рівня виявляння принаймні d × D(i-1) (це також впливає на F(i)) N = ∅ якщо F(i) > Ftarget то оцінити поточний каскадний виявляч на наборі зображень без облич та помістити будь-які хибні виявлення до набору N. Каскадна архітектура має цікаві наслідки для продуктивності окремих класифікаторів. Оскільки активування кожного класифікатора повністю залежить від поведінки його попередника, хибнопозитивний рівень всього каскаду становить Аналогічно, рівень виявляння Отже, щоби відповідати хибнопозитивним рівням, яких зазвичай досягають інші виявлячі, кожен класифікатор може виходити з напрочуд низькою продуктивністю. Наприклад, для 32-етапного каскаду для досягнення хибнопозитивного рівня 10−6 кожен класифікатор повинен досягти хибнопозитивного рівня лише приблизно 65 %. Водночас, проте, кожен класифікатор повинен мати виняткові можливості для досягання адекватного рівня виявляння. Наприклад, щоби досягти рівня виявляння близько 90 %, кожному класифікаторові у вищезгаданому каскаді потрібно досягти рівня виявляння близько 99,7 %.[8] Використання Віоли — Джонса для відстежування об'єктівУ відео рухомих об'єктів не потрібно застосовувати функцію виявляння об'єктів до кожного кадру. Замість цього можливо використовувати такі алгоритми відстежування як алгоритм КЛТ, щоб виявляти характерні ознаки в обмежувальних рамках виявляння та відстежувати їхнє переміщення між кадрами. Це не лише покращує швидкість відстежування, усуваючи потребу повторно виявляти об'єкти в кожному кадрі, але й покращує стійкість, оскільки характерні ознаки стійкіші до обертання та фотометричних змін, ніж система виявляння Віоли — Джонса.[9] Примітки
Посилання
Втілення |
Portal di Ensiklopedia Dunia