Навчання каскадного класифікатора
Робота з каскадним класифікатором включає два етапи: навчання та детектування. Детектування ви можете подивитися, наприклад, виявлення осіб. А тут описано, як навчати класифікатор.
OpenCV має дві програми для тренування каскадів: opencv_haartraining і opencv_traincascade (нова версія написана на C++). Але головна відмінність між цими двома програмами є те, що opencv_traincascade підтримує як Хаара[Paul Viola, Michael Jones. Rapid Object Detection використовуючи Boosted Cascade of Simple Features. Conference on Computer Vision and Pattern Recognition (CVPR), 2001, pp. 511-518.], так і LBP [Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang та Stan Z. Li. Learning Multi-scale Block Local Binary Patterns для Face Recognition. International Conference on Biometrics (ICB), 2007, pp. 828-837] особливості. LBP з погляду, як навчання, і детектування у кілька разів швидше Хаара. Щодо достовірності розпізнавання, то все залежить від навчальної вибірки. Можна навчити LBP так, що воно наближатиметься до Хаара особливостям. opencv_traincascade та opencv_haartraining зберігають навчені класифікатори у різних форматах. Новий інтерфейс виявлення (CascadeClassifier класу в objdetect модулі) підтримують обидва формати. opencv_traincascade може зберігати навчання каскаду у старому форматі. Але opencv_traincascade і opencv_haartraining не може завантажити класифікатор в іншому форматі для подальшого навчання після перерви. opencv_traincascade програма може використовувати TBB для багатопоточності. Щоб використовувати його в режимі багатоядерних процесорів OpenCV, має бути відкомпільовано з TBB. Інші утиліти, що використовуються для навчання: 1.opencv_createsamples використовується для підготовки навчального набору позитивних та тестових зразків у форматі, який підтримується як opencv_haartraining, так і opencv_traincascade додатками. На виході виходить файл із розширенням *.vec, це двійковий формат, який містить зображення. 2. opencv_performance може бути використаний для оцінки якості класифікаторів, але тільки для навчених opencv_haartraining. Вона використовує колекцію розмічених зображень, запускає класифікатор і повідомляє про продуктивність, тобто. кількість знайдених об'єктів, кількість пропущених об'єктів, кількість помилкових спрацьовувань та іншу інформацію. Для навчання необхідно зібрати образи. Є два типи образів: негативні та позитивні. Негативні образи відповідають відсутності об'єкта зображення. Позитивні образи відповідають зображенням із виявленими об'єктами. Набір негативних образів має бути підготовлений вручну, тоді як безліч позитивних образів створюється за допомогою утиліти opencv_createsamples.
Негативні образи мають бути взяті із довільного зображення. Ці зображення не повинні містити виявлених об'єктів. Негативні образи перелічені у спеціальному файлі. Це текстовий файл, у якому кожен рядок містить ім'я файлу зображення (щодо каталогу файлу) негативно. Цей файл потрібно створити вручну. Зауважте, що негативні приклади називають також фоновими пробами або зразками фону зображення. Описані зображення можуть бути різними. Але кожне зображення має бути більшим, ніж розмір вікна навчання. Приклад описуваного файлу: Структура каталогів:
Позитивні образи створюються утилітою opencv_createsamples. Вони можуть бути створені з одного зображення зоб'єктом або із колекції раніше розмічених зображень. Зверніть увагу, що вам потрібен великий набір позитивних образів, перш ніж передати його у вказану утиліту. Наприклад, вам, можливо, буде потрібно лише один позитивний образ для абсолютно однакових об'єктів, таких як логотип OpenCV, але вам безумовно потрібні сотні і навіть тисячі позитивних образів для особи. Нехай один образ є логотипом компанії. Тоді безліч позитивних образів створюються з даного об'єкта зображення, випадковими обертаннями, змінами інтенсивності логотипу, а також розміщенням логотипу на довільному тлі. Кількість та діапазон випадковості можна змінювати за допомогою аргументів командного рядка утиліти opencv_createsamples Аргументи:-vecІм'я вихідного файлу, що містить позитивні образи для навчання.-imgДжерело зображення об'єкта (наприклад, логотип компанії).-bgФайл опис фону, який містить список зображень, які використовуються як фон для випадково спотворених версій об'єкта.-numКількість позитивних образів для генерації.-bgcolorКолір фону (нині передбачається чорно-білі зображення); колір фону означає прозорий колір. Так як можуть бути артефакти стиснення, кількість кольорів допуску може бути задано -bgthresh. Усі пікселі в діапазоні [bgcolor-bgthresh, bgcolor+bgthresh] інтерпретуються як прозорі.-bgthresh -invЯкщо вказано, кольори будуть звернені.-randinvЯкщо вказано, кольори будуть звернені у випадковому порядку.-maxidevМаксимальне відхилення інтенсивностей пікселів на передньому плані образів.-maxxangle-maxxangle -maxxangleМаксимальні кути повороту повинні бути надані врадіанах.-showКорисні опції налагодження. Якщо вказано, кожен зразок буде показаний. Натискання Esc дасть сигнал продовжувати процес створення образів без відображення.-wШиріна (у пікселях) вихідних прикладів.-hВисота (у пікселях) вихідних прикладів. Наступна процедура використовується для створення екземпляра образу об'єкта: вихідне зображення повертається випадково навколо всіх трьох осей. Вибраний кут обмежений максимумами кута. Пікселі, що мають інтенсивність у діапзоні [bg_color-bg_color_threshold; bg_color + bg_color_threshold] інтерпретуються як прозорі. Білий шум додається до інтенсивності на передньому плані. Якщо -inv ключ вказано, пікселі на передньому плані інвертуються. Якщо –randinv ключ вказано, то алгоритм випадково вибирає, чи буде звернення пікселів застосовано до цього зразка. Нарешті, отримане зображення поміщається на довільне тло з файлу опису тла, масштабувати до потрібного розміру, вказаного -h і -w і зберігається в vec-файл, заданий у параметрі -vec.
Позитивні приклади можуть бути отримані з колекції раніше розмічених зображень. Ця колекція, яка описується у текстовому файлі, схожа на файл опису тла. Кожен рядок цього файлу відповідає зображенню. Перший елемент лінії є ім'я файлу. За нею слідує кількість екземплярів об'єкта. Наступні числа є координатами об'єктів, що обмежують прямокутників (х, у, ширина, висота). Структура каталогів:
Тобто. перше зображення дає одне положення об'єкта, а друге два. Для того, щоб створити позитивні образи з таких колекцій, -info аргумент має бути вказаний замість -img:-infoСхема створення образів в даному випадку полягає в наступному. Примірники об'єктів взяті ззображень. Потім вони змінюються до розміру цільових образів та зберігаються у вихідний vec-файл. Жодних спотворень не застосовується, тому що аргументи це: -w,-h,-show і -Num. opencv_createsamples може бути використана для вивчення образів, що зберігаються у файлі позитивних образів. Для того щоб зробити це тільки -vec, -w і -h параметри мають бути вказані.
Наступним кроком є підготовка класифікатора. Як згадувалося вище opencv_traincascade або opencv_haartraining можуть бути використані для навчання каскаду класифікаторів, але тільки opencv_traincascade буде описаний надалі. Аргументи командного рядка opencv_traincascade програми згруповані за цілями: 1. Загальні аргументи:-dataДе навчений класифікатор має бути збережений.-vecvec-файл із позитивними образами (створений утилітою opencv_createsamples).-bgФайл опису фону.-numPos -numNegКількість позитивних / негативних образів, що використовуються в навчанні для кожного етапу класифікатора.-numStagesКількість етапів каскаду для навчання.-precalcValBufSize
Розмір буфера - розрахункове значення функції (МБ).-precalcIdxBufSize
Розмір буфера для індексів розрахункових функцій (МБ). Що більше пам'яті у вас є, то швидше процес навчання.-baseFormatSaveЦей аргумент є актуальним у разі Хаар-подібних функцій. Якщо його вказано, то каскад буде збережено у старому форматі. 2. Параметри каскаду:-stageTypeТип етапів. Тільки boosted класифікатори підтримуються як типовий етап на даний момент.-featureTypeТип функції: HAAR - Хаара-подібні функції, LBP - місцеві моделі двійкові.-w -hРозмір навчальних образів (упікселях). Повинно бути рівними ті самі значення, які використовуються під час створення образів навчання (opencv_createsamples). 3. Параметри Boosted-класифікатора:-btТип boosted класифікаторів: DAB - Дискретна AdaBoost, RAB - Real AdaBoost, LB - LogitBoost, GAB - Gentle AdaBoost.-minHitRateМінімальний бажаний показник влучення на кожному етапі класифікатора. Загальний рейтинг популярності можна оцінити як (min_hit_rate^number_of_stages).-maxFalseAlarmRateМаксимальний бажаний рівень хибних тривог для кожного етапу класифікатора. Загальний рівень помилкових тривог можна оцінити як (max_false_alarm_rate^number_of_stages).-weightTrimRateВказує, чи буде використана обрізка та її вага. Гідний вибір 0,95.-maxDepthМаксимальна глибина слабкого дерева. Гідний вибір 1.-maxWeakCountМаксимальна кількість слабких дерев для кожного етапу каскаду. Boosted класифікатор має так багато слабких дерев ( Вибір типу функції Хаара встановлено, як використовуються в навчанні. Основне використання тільки вертикальні функції, а все використовує повний набір вертикальних і 45 градусів набором функцій. Див. [Rainer Lienhart and Jochen Maydt. An Додаткова інформація.