Recog.ru - Разпознаване на образци за програмисти

Работата с каскаден класификатор включва два етапа: обучение и откриване. Можете да разгледате разпознаването, например на разпознаването на лица. И тук е описано как да се обучи класификаторът.

OpenCV има две приложения за обучение на каскади: opencv_haartraining и opencv_traincascade (нова версия, написана на C ++). Но основната разлика между двете е, че opencv_traincascade поддържа и двете Haar [Пол Виола, Майкъл Джоунс. Бързо откриване на обекти с помощта на усилена каскада от прости функции. Конференция по компютърно зрение и разпознаване на образци (CVPR), 2001, стр. 511-518.] И LBP [Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang и Stan Z. Li. Изучаване на многобройни блокови локални двоични модели за разпознаване на лица. Международна конференция по биометрия (ICB), 2007, стр. 828-837.] Характеристики. LBP от гледна точка както на обучението, така и на откриването е няколко пъти по-бързо от Haar. Що се отнася до надеждността на разпознаването, всичко зависи от извадката за обучение. 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
Файл с описание на фона, който съдържа списък с изображения, които се използват като фонове за произволно изкривени версии на обект.
-брой
Брой положителни изображения за генериране.
-bgcolor
Цвят на фона (понастоящем се приемат черно-бели изображения); цветът на фона показва прозрачен цвят. Тъй като може да има артефакти за компресия, броят на цветовете на толерантност може да бъде зададен с -bgthresh. Всички пиксели в диапазона [bgcolor-bgthresh, bgcolor + bgthresh] се интерпретират като прозрачни.
-bgthresh
-инв

Ако е посочено, цветовете ще бъдат обърнати.
-randinv
Ако е посочено, цветовете ще бъдат изтеглени на случаен принцип.
-maxidev
Максимално отклонение на интензитета на пикселите на преден план на изображенията.
-maxxangle
-maxxangle
-maxxangle

Максималните ъгли на въртене трябва да бъдат осигурени в радиани.
-шоу
Полезни опции за отстраняване на грешки. Ако е посочено, всяка проба ще бъде показана. Натискането на Esc ще даде сигнал за продължаване на процеса на създаване на изображения без показване.
-w
Ширина (в пиксели) на изходните примери.

Височина (в пиксели) на изходни примери.
Следната процедура се използва за създаване на пример за изображение на обект: оригиналното изображение се завърта произволно около трите оси. Избраният ъгъл е ограничен до максимумите на ъгъла. Пиксели с интензивност в диапазона [bg_color-bg_color_threshold; bg_color + bg_color_threshold] се интерпретират като прозрачни. Белият шум се добавя към интензивността на преден план. Ако е зададен превключвателят -inv, тогава пикселите на преден план се обръщат. Ако е зададен ключ –randinv, тогава алгоритъмът избира произволно дали обръщането на пикселите ще бъде приложено към тази извадка. И накрая, полученото изображение се поставя на произволен фон от файла за описание на фона, мащабира се до желания размер, посочен в -h и -w и се записва във vec файла, посочен в параметъра -vec.

Положителни примери могат да бъдат получени и от колекция от предварително маркирани изображения. Тази колекция, която е описана в текстов файл, е подобна на фонов файл с описание. Всеки ред от този файл съответства на изображение. Първият елемент на реда е името на файла. Това е последвано от броя на екземплярите на обекта. Следващите числа са координатите на ограничаващите кутийки обекти (x, y, ширина, височина).
Структура на директорията:

Тези. първото изображение дава една позиция на обекта, а второто две.
За да се създадат положителни изображения от такива колекции, аргументът -info трябва да бъде посочен вместо -img:
-информация
Схемата за създаване на изображения в този случай е следната. Екземплярите на обекти са взети от изображения. След това те се оразмеряват до размера на целевите изображения и се записват в изходния vec файл. Не се прилага изкривяване, така че влияещите аргументи са -w, -h, -show и -Num.
opencv_createsamples може да се използва за изследване на изображения, съхранени в положителен файл с изображение. За да направите това, трябва да бъдат посочени само опциите -vec, -w и -h.

Следващата стъпка е подготовката на класификатора. Както бе споменато по-горе, opencv_traincascade или opencv_haartraining могат да се използват за обучение на каскада от класификатори, но само opencv_traincascade ще бъде описано по-късно.
Аргументите на командния ред на приложението opencv_traincascade са групирани по цел:
1. Общи аргументи:
-данни
Къде трябва да се съхранява обученият класификатор.
-век
vec файл с положителни изображения (създаден от помощната програма opencv_createsamples).
-bg
Файл с описание на фона.
-numPos
-numNeg

Броят на положителните/отрицателните изображения, използвани в обучението за всеки етап от класификатора.
-numStages
Брой етапи на каскадата за обучение.
-precalcValBufSize

Размер на буфера - изчислена стойност на функцията (в MB).
-precalcIdxBufSize

Размер на буфера за индекси на изчислителни функции (в MB). Колкото повече памет имате, толкова по-бърз е процесът на обучение.
-baseFormatSave
Този аргумент е релевантен в случая на подобни на Хаар функции. Ако е посочено, тогава каскадата ще бъде запазена в стария формат.
2. Каскадни параметри:
-stageType
Тип на сцената. В момента се поддържат само усилени класификатори като етап на типа.
-featureType
Тип функция: HAAR - Хаар-подобни функции, LBP - локални двоични модели.
-w

Размерът на обучените изображения (в пиксели). Трябва да има абсолютно същите стойности, използвани по време на създаването на учебни изображения (opencv_createsamples).
3. Параметри на усиления класификатор:
-bt
Тип усилен класификатор: DAB - дискретен AdaBoost, RAB - истински AdaBoost, LB - LogitBoost, GAB - нежен AdaBoost.
-minHitRate
Минималната желана честота на удари на всеки етап от класификатора. Общият рейтинг на популярност може да се изчисли като (min_hit_rate ^ number_of_stages).
-maxFalseAlarmRate
Максималната желана скорост на фалшива аларма за всеки етап на класификатора. Общата честота на фалшивите аларми може да се изчисли като (max_false_alarm_rate ^ number_of_stages).
-weightTrimRate
Показва дали реколтата ще бъде използвана и нейното тегло. Достоен избор 0,95.
-maxDepth
Максималната дълбочина на слабо дърво. Достоен избор 1.
-maxWeakCount
Максималният брой слаби дървета за всеки етап от каскадата. Усиленият класификатор има толкова много слаби дървета (

Изборът на типа функция на Хаар се задава, както се използва при обучение. Основната употреба са само вертикални функции и всичко използва пълен набор от вертикални и 45-градусов набор от функции. Вижте [Rainer Lienhart и Jochen Maydt. Разширен набор от Хаар-подобни функции за бързо откриване на обекти. Изпратено на ICIP2002.] За повече подробности.