Tesina del corso di Visione e Percezione Progetto Parte I: Riconoscimento di Facce Prof.ssa Fiora Pirri Tutor Stefano Marra, Matia Pizzoli Anno Accademico 2007/2008 Obiettivo: data un’immagine con diverse persone presenti, riconoscere i volti delle persone. Studenti: Ilaria Fedeli Francesco Rulli Federico Tozzi Il Metodo di Viola-Jones Features di Haar Classificatore AdaBoost Immagine Integrale Cascata di Classificatori Architettura dell’Applicazione (1) SKIN DETECTION IMAGE FIRST DETECTION CLEANING FILTER SECOND DETECTION FACES SECOND EXTRACTION FACES FIRST EXTRACTION ADABOOST Architettura dell’Applicazione (2) 1. L’immagine viene introdotta in un modulo di skin-detection. Il risultato è l’immagine segmentata in due cluster, in cui i pixel considerati come pelle sono lasciati al loro valore originale mentre i pixel considerati come altro da pelle sono posti a zero. 2. L’immagine clusterizzata entra nel modulo First Detection. Dapprima viene eseguito il cleaning filter sull’immagine ed in seguito viene effettuata una suddivisione dell’immagine in diverse regioni in cui vi sono le possibili facce. 3. Le regioni in uscita dal modulo First Detection vengono immesse nel modulo Second Detection. A questo punto il classificatore AdaBoost viene applicato ad esse per individuare le facce. Infine avviene l’ultima e definitiva estrazione di facce con l’eliminazione dei rilevamenti multipli. Scelte Implementative (1) La prima scelta implementativa è stata quella di introdurre il modulo First Detection all’uscita del modulo Skin-Detection. Questo perché la SkinDetection lascia inalterati eventuali effetti di occlusione sull’immagine. L’elaborazione dell’immagine è stata effettuata con l’ausilio del modulo cleaning filter costituito dalla seguente cascata di filtri: • rgb2gray • imfill • strel • medfilt2 • imdilate • imopen • im2bw • bwlabel Scelte Implementative (2) output skin-detection output medfilt2 output imfill output imdilate Scelte Implementative (3) output imopen output bwlabel output im2bw output first detection Scelte Implementative (4) Se avessimo applicato l’estrazione delle regioni, su cui poi effettuare la Second Detection, direttamente sull’immagine della Skin-Detection avremmo avuto questo risultato, a cui non si sarebbe potuto applicare AdaBoost: Scelte Implementative (5) Altre scelte implementative sono state: 1. L’estrazione delle features è stata suddivisa in due modalità: quella riguardante la fase di training e quella relativa alla vera e propria detection. Infatti nella fase di training abbiamo avuto bisogno di calcolare tutti e quattro i possibili tipi di features mentre nella fase di detection è sufficiente estrarre solo le features che compongono il classificatore forte. 2. Il nostro classificatore forte è stato rappresentato con una struttura denominata adaboost_train. Essa contiene tre campi: weak_learners; acc; alphas. 3. Abbiamo implementato il generico weak learner come un percettrone e abbiamo calcolato la soglia come risultato dell’algoritmo di apprendimento del percettrone di Rosenblatt. 4. All’interno di una regione, per individuare le possibili facce presenti, effettuiamo uno scanning della regione stessa mediante una finestrella di scala e posizione differenti fino a coprire l’intera regione. Implementazione del sistema Software matlab Albero delle chiamate Face_Detection.m A - GUI DI AVVIO Detections.m skin_detection.m B – SKIN DETECTION faces_firstExtraction.m faces_secondExtraction.m C – FIRST DETECTION for i=1:regioni trovate D – SECOND DETECTION find_faces.m delete_multiple_detections.m Integrazione della Detenzione Multipla • Inizialmente dato che attraverso la Skin-Detection riuscivamo ad isolare le persone abbiamo scelto una tecnica di integrazione dei rilevamenti multipli elementare: veniva selezionato il riquadro più grande. Tale metodo risulta essere affetto da due criticità: non riesce a considerare più facce all’interno di una regione e non elimina i falsi positivi. • Per ovviare a ciò abbiamo scelto la seguente tecnica di integrazione dei rilevamenti multipli: tutti i riquadri all’interno di una regione sono stati clusterizzati. La clusterizzazione è stata effettuata mediante una misura di distanza. Due riquadri sono accorpati nello stesso cluster se la distanza tra i due punti, appartenenti ai due riquadri, in alto a sinistra è minore di una certa soglia. In seguito per ciascun cluster viene selezionato il riquadro più grande. Inoltre se un cluster è formato da un solo elemento, ovvero riquadro, questo viene considerato come un falso positivo e quindi scartato. I passaggi del nostro sistema Risultati (1) Durante lo sviluppo del progetto sono stati addestrati diversi classificatori forti, ognuno caratterizzato da un certo numero di features, weak learner e immagini test. Per valutare le perfomance dei nostri classificatori abbiamo adottato, come misura d’errore, l’accuratezza di seguito così definita: N 1 accuracy N H xi yi N i 1 dove N è il numero di esempi positivi e negativi, xi è l’i-esimo esempio, yi è l’etichetta dell’i-esimo esempio, H è il risultato del classificatore forte. Risultati (2) Di seguito le curve test dell’accuracy e dei quattro classificatori addestrati: strong classifier con 10 iterazioni, weak learners, 9000 features e 200 immagini strong classifier con 40 iterazioni, weak learners, 9000 features e 600 immagini strong classifier con 60 iterazioni, weak learners, 9000 features e 2000 immagini strong classifier con 80 iterazioni, weak learners, 9000 features e 3000 immagini Risultati (3) Di seguito il grafico dei parametri alpha in funzione delle features selezionate ad ogni passo, e il grafico dell’errore di classificazione di ciascuna features: Risultati Positivi (1) Risultati Positivi (2) Risultati positivi (3) Risultati positivi (4) Risultati negativi (1) Risultati negativi (2) Riferimenti [1] Paul Viola e Michael J. Jones, Robust Real-Time Face Detection. [2] per adaboost sono state riprese e modificate le funzioni sul sito http://www.ics.uci.edu/~smyth/courses/cs175/projectcode/ [3] per la skin detection è stata ripresa l’implementazione sul sito http://www.dis.uniroma1.it/~visiope/Tesine2005.htm Maurizio Conventi, Mauro Manzo, Simone Antonio Gaetani. [4] per la costruzione del cleaning filter ci siamo ispirati al sito http://webeng.cs.ait.ac.th/cvwiki/matlab:tutorial:detectface e a Roberto Aloi, Face Detection Techniques based on k-means clustering and image filtering. [5] Julien Meynet, Fast Face Detection Using AdaBoost.