KATEDRA SYSTEMÓW MULTIMEDIALNYCH
Inteligentne Systemy Decyzyjne
Ćwiczenie 10: Lokalizacja twarzy w obrazie za pomocą
kaskady klasyfikatorów AdaBoost
Opracowanie: dr inż. Piotr Szczuko
1. Wprowadzenie - etapy rozpoznawania twarzy
Technologia rozpoznawania twarzy jest obecnie jedną z najdynamiczniej rozwijających się technologii biometrycznych. Pierwszym krokiem w działaniu takich metod jest określenie, w którym miejscu obrazu zlokalizowana jest twarz. Następnie obszar ten jest wyodrębniany, analizowany i klasyfikowany np. za pomocą metody twarzy własnych, klasyfikatorów SVM, lub złożonych metod badania cech lokalnych twarzy (zagadnienie poza tematem przedmiotu).
Metody lokalizacji twarzy opierać się mogą na tzw. założeniach heurystycznych, tzn. zdroworozsądkowych, np. określenie gdzie w obrazie znajduje się obiekt ruchomy, założenie, że jest to osoba, a następnie analiza górnej części całej sylwetki, która powinna zawierać głowę osoby. Jeżeli wybrany w ten sposób obszar jest kontrastowy, zawiera dużą liczbę krawędzi i detali, to uznawany jest za obraz twarzy i poddawany rozpoznaniu.
Z kolei metoda lokalizacji badana w tym ćwiczeniu wykorzystuje kaskadę klasyfikatorów AdaBoost, analizujących tzw. cechy Haara (ang. Haar features). Jej dużą zaletą jest niska złożoność obliczeniowa, możliwość klasyfikowania obrazów w dowolnej skali, duża skuteczność. Szczegóły przedstawione są poniżej.
2. Metoda lokalizacji twarzy w obrazie
Kaskada klasyfikatorów AdaBoost (skrót od ang. Adaptive Boosting - adaptacyjne wzmacnianie) jest heurystycznym, binarnym klasyfikatorem (dokonuje rozpoznania, czy obiekt, obraz, sygnał, jest reprezentantem jednej, wytrenowanej klasy, czy nie). Jest on klasyfikatorem silnym (duża skuteczność działania, niska stopa błędów poprawnej akceptacji i fałszywego odrzucenia), który składa się z zestawu klasyfikatorów słabych. Każdy kolejny klasyfikator w kaskadzie jest optymalizowany do poprawnego rozpoznawania wzorców błędnie zakwalifikowanych przez wcześniejsze klasyfikatory.
Kaskada klasyfikatorów AdaBoost pozwala uzyskać większą skuteczność działania, niż pojedynczy silny klasyfikator.
Faza treningu wymaga przygotowania zestawu treningowego z wzorcami pozytywnymi i negatywnymi w bardzo dużej liczbie przykładów (dla twarzy po kilkaset tysięcy obrazów).
2.1 Klasyfikator podstawowy
Podstawowy, słaby klasyfikator zwraca wartość binarną 1 (akceptuj) lub 0 (odrzuć) w zależności od tego, czy wartość jego funkcji klasyfikacji jest większa (mniejsza) od zadanego progu. Wartość progu jest ustalana jest w taki sposób, aby najdokładniej odseparować dwie rozpoznawane klasy.
W procesie treningu jako pierwszy klasyfikator słaby wybierany jest ten, który charakteryzuje się najmniejszym, ważonym błędem rozpoznawania wzorców treningowych. Dla wzorca treningowego, który nie został prawidłowo rozpoznany zwiększana jest waga i kolejny etap kaskady dobierany jest tak, aby jak najskuteczniej odróżnić go od obiektów spoza klasy. Każdy kolejno dodawany klasyfikator słaby jest zatem optymalizowany pod kątem rozpoznania wzorców, które sprawiły najwięcej problemów wcześniejszym klasyfikatorom.
Pozytywny wynik klasyfikacji próbki wymaga pozytywnego rozpoznania kolejno przez wszystkie człony kaskady. Nierozpoznanie próbki przez którykolwiek człon kaskady skutkuje negatywnym wynikiem klasyfikacji (Rys. 1).
Rys. 1. Zestaw połączonych klasyfikatorów AdaBoost (członów). T oznacza akceptację, F – odrzucenie.
Strategia opisana powyżej oznacza, że każdy kolejny człon kaskady zawiera coraz więcej parametrów, np. 1, 10, 25, 25, 50…, gdyż ma za zadanie skuteczniej odróżnić „problematyczne przypadki”, z którymi nie poradził sobie człon poprzedni.
Dodawanie kolejnych parametrów (klasyfikatorów słabych) do kaskady trwa dopóki:
stopa błędów typu false-positives (wykrycie obiektu mimo jego faktycznego braku) nie spadnie poniżej założonego progu, np. 50%, lub:
stopa błędów typu false-negatives (nie wykrycie obiektu mimo jego faktycznej obecności) nie wzrośnie powyżej założonego progu, np. 0,1%
Typowo stosuje się ok. 20-30 członów w kaskadzie, które zawierają łącznie jedynie kilka procent wszystkich możliwych parametrów (np. 6000 spośród 120 tys.)
Cechy kaskady klasyfikatorów AdaBoost:
Możliwość samodzielnego ustalenia kompromisu pomiędzy uzyskiwanymi wynikami a złożonością obliczeniową
Bardzo wysoka wydajność algorytmu
Automatyczny wybór optymalnych parametrów w procesie treningu klasyfikatora
Zastosowanie klasyfikatorów AdaBoost połączonych w kaskadę pozwala jednocześnie uzyskać większą skuteczność klasyfikacji i większą wydajność
Może być używana łącznie z innymi algorytmami decyzyjnymi w celu poprawy ich skuteczności
2.2 Zastosowanie klasyfikatora do rozpoznawania obrazów
2.2.1 Parametry obrazu
Parametrami opisującymi klasyfikowany obraz są różnice między sumą wartości pikseli (odcieni szarości pikseli np. w skali od 0 do 255) w białych i czarnych obszarach figur. Wyliczane są one w następujący sposób:
1. Wybierz parametr (cechę Haara) (Rys. 2a) 2. Umieść szablon cechy na obrazie twarzy (Rys. 2b)
3. Wylicz sumę jasności pikseli obrazu oryginalnego „przykrytych” jasną częścią szablonu 4. Wylicz sumę jasności pikseli obrazu oryginalnego „przykrytych” ciemną częścią szablonu 5. Wylicz różnicę między 3. a 4. Otrzymywana jest wartość skalarna, będąca poszukiwanym
parametrem
6. Wróć do 1. i wylicz kolejny parametr.
a) b)
Rys. 2. Parametry wykorzystywane przy rozpoznawaniu obrazów: a) trzy typy szablonów parametrów (cech Haara, ang. Haar-like features)
1. Edge features: krawędzie, granice między ciemnymi a jasnymi obszarami, 2. Line features: linie o różnym kierunku i grubości,
3. Center-surround features: ciemne obszary na jasnym tle.
b) przykład lokalizacji charakterystycznych cech krawędzi i linii w obrazie twarzy.
2.2.2 Poszukiwanie twarzy w obrazie
Kaskada klasyfikatorów AdaBoost jest trenowana z wykorzystaniem zestawu kilku tysięcy wzorców pozytywnych i negatywnych o jednej, stałej i niewielkiej rozdzielczości, np. 24x24 piksele. W wyniku skalowania parametrów możliwe jest rozpoznawanie w obrazie obiektów o rozmiarach równych lub większych od rozmiaru wzorców.
W procesie detekcji okno, w którym prowadzona jest klasyfikacja, przesuwane jest po całym obrazie wejściowym z zadanym krokiem w celu poszukiwania twarzy w podstawowej skali. Następnie skalowane jest w górę o zadany współczynnik (x1.5, x2.0, itd.) i ponownie cały obraz jest skanowany. W praktyce w procesie detekcji zdecydowana większość okien jest odrzucana w pierwszym drugim członie kaskady, jako niezawierające twarzy. Przypomnieć tu należy, że pierwszy człon jest wytrenowany w celu jak najskuteczniejszego odrzucania obrazów nie będących twarzami, a kolejne człony korygują powstałe błędy fałszywej akceptacji. Wobec tego dla każdego okna wymagane jest obliczenie średnio około 20-30 parametrów, stosowanych w kilku pierwszych członach kaskady. Finalny pozytywny wynik klasyfikacji próbki wymaga pozytywnego rozpoznania kolejno przez wszystkie człony kaskady.
3. Aplikacja HaarDetector
Program HaarDetector umożliwia wykrywanie zdefiniowanych elementów obrazu metodą kaskady AdaBoost. Możliwe jest wczytywanie obrazów oraz pozyskiwanie klatek z kamery USB. Program
obsługuje definicje kaskad dostarczone w plikach .XML, m.in. wstępnie przygotowane kaskady wytrenowane do detekcji:
- twarzy en face, - twarzy z profilu, - oczu (lub jednego oka), - sylwetki
- górnej / dolnej części sylwetki, - itd.
3.1.
Obsługa programu
Po uruchomieniu programu należy:
1. - wcisnąć klawisz „Image” aby wczytać obraz z pliku
2. - wybrać z listy typ kaskady dostosowany do postawionego zadania (np. detekcja oczu „haarcascade_eye”)
3. - wybrać suwakiem „Min. object size” oczekiwany najmniejszy rozmiar obiektu, który ma być wykryty w obrazie
4. - wcisnąć klawisz Detect
5. - w oknie log zaobserwować wyniki detekcji (liczbę wykrytych obiektów, położenie, rozmiary oraz czas detekcji w milisekundach)
6. Wynik wyświetlony jest także w oknie podglądu obrazu.
7. Okno, które zostało wyświetlone przez program jako ostanie można zapisać klawiszem „Save”. Plik zapisany będzie pod nazwą wpisaną w pole tekstowe „OutputFilename” (oznaczone na rys. numerem 7).
4. Zadania do wykonania
1. Praca na plikua. Wczytać plik dostarczony z instrukcja z grupa osób (losc_group.jpg)
b. W programie do podglądu lub edycji zdjęć (np. domyślnym programie windowsa lub Paint’cie, ) określić jakie są wielkości twarzy w obrazie (minimalna i maksymalna). Umieścić te dane w sprawozdaniu.
c. Ustawić odpowiednio do tych rozmiarów suwaki „Min. / Max. object size”
1
2
3
4
5
7
d. Wybrać kolejno każdy z 4 dostępnych klasyfikatorów twarzy en face (haarcascade_frontalface_alt, haarcascade_frontalface_alt2, haarcascade_frontal-face_alt_tree, haarcascade_frontalface_default). Dla każdego wykonać:
i. Detekcję twarzy
ii. Zapisanie do sprawozdania:
1. liczby wykrytych twarzy / czy jest prawidłowa?
2. liczby elementów obrazu wykrytych nieprawidłowo jako twarze 3. czasu obliczeń
iii. Zmniejszenie wartości suwaka „Min. object size”, zwiększenie wartości „Max. object size”, każdy około dwukrotnie
iv. Detekcję twarzy
v. Zapisanie do sprawozdania:
1. liczby wykrytych twarzy / czy jest prawidłowa?
2. liczby elementów obrazu wykrytych nieprawidłowo jako twarze 3. czasu obliczeń
vi. Zapisanie do sprawozdania wniosków o skuteczności i czasie działania. Zapisanie jak dobór rozmiarów obiektów wpływa na skuteczność i czas. Obliczenie dla każdej detekcji parametrów positive, true-positive,
false-negative (doczytać w Internecie jak się je liczy)
e. W podsumowaniu w sprawozdaniu napisać która z 4 definicji najlepiej wykonała detekcję twarzy en face.
2. Praca na strumieniu z kamery USB
a. Uruchomić strumieniowanie z kamery klawiszem „USB Cam” b. Zaznaczyć check-box „Detect”
c. Wybrać kolejno każdą z kaskad na liście i skierować kamerę tak, by zapewnić możliwość wykrycia pożądanego obiektu (twarzy en face lub z profilu, oczu małych, dużych, itd.). Dla każdej z kaskad wykonać:
i. „Dostrojenie” suwaków „Min. / Max. object size” tak, aby wykrywany był tylko właściwy obiekt oraz czas detekcji był jak najkrótszy
ii. Zapisanie do sprawozdania czasów detekcji
iii. Ustawienie ekstremalnych wartości „Min. / Max. object size”, tak aby algorytm wykrywał wszystkie obiekty.
iv. Zapisanie do sprawozdania czasów detekcji oraz spostrzeżeń opisujących występujące pomyłki algorytmu.
v. Zaproponowanie w sprawozdaniu jak można automatycznie dostosowywać wartości „Min./Max. object size” aby algorytm zachowywał dużą skuteczność 3. Analiza kaskady AdaBoost
a. Otworzyć plik .XLM z definicją dowolnej kaskady b. Zapoznać się ze strukturą pliku
c. Narysować w sprawozdaniu schemat blokowy, który wyjaśnia hierarchię elementów „stage”, „tree” oraz atrybutów „feature”, „rects”. Zapoznaj się w tym celu z wstępem teoretycznym i rys. 1 i rys. 2 w instrukcji.
d. Dla najmniejszej z kaskad (plik „haarcascade_lefteye_2splits.xml”) podać w sprawozdaniu ile jest stopni kaskady „stage” oraz ile na każdym z nich jest badanych cech Haara „trees”.
e. Zapoznać się z materiałami z wykładu i uzasadnić w sprawozdaniu dlaczego liczba cech rośnie w kolejnych stopniach kaskady.