Riconoscere espressioni facciali : software eFeedback

eFeedback è un sistema software realizzato in C++ in grado di riconoscere espressioni facciali e quindi le emozioni basandosi sulle grandezze Valence e Arousal del modello circonflesso delle emozioni.
Non entrerò in dettaglio nella descrizione del dominio applicativo, quindi non spiegherò precisamente che cosa sono e quali sono le emozioni di base, che cos’è il modello circonflesso, cosa sono la Valence e l’Arousal, ecc… Ma mi concentrerò solo sulla fase realizzativa del software.
La struttura generale del software è la seguente:

efeedback riconoscere espressioni facciali

Dove:

  • Abbiamo in input una immagine in cui è presente un volto, oppure un video. Il video viene ulteriormente processato per ottenere i frame ad una cadenza fissata da un parametro, settato in fase di configurazione.
  • La prima fase di rilevamento volto e tracking consiste nella elaborazione dell’immagine, da cui si ottiene la porzione che circoscrive il volto. Questa porzione ottenuta viene elaborata da una libreria grafica per ottenerne i punti facciali che verranno usati per riconoscere l’espressione facciale. Per questa fase è stata utilizzata la libreria CSIRO Facial Analysis SDK, essa permette di ottenere 66 punti dal viso; questi punti sono detti “Landmarks”.
  • La seconda fase consiste nella classificazione, con i 66 landmarks ottenuti si effettua apprendimento e si costruisce il classificatore. Abbiamo a che fare con 66 punti, ogni punto è costituito dalle coordinate x y all’interno dell’immagine, quindi abbiamo per ogni istanza 66×2=132 dati da cui apprendere. L’alta dimensionalità dei dati ci fa capire che l’algoritmo SVM per apprendimento supervisionato avrà alta accuratezza. Dalla letteratura infatti, sappiamo che il metodo di apprendimento a vettori di supporto (Support Vector Machine, SVM) ha alta accuratezza con dati a molte dimensioni.

Il task è quindi riconoscere i valori di Valence (Positiva/Negativa) e Arousal(Alto/Basso) che sono dipendenti dall’emozione, sulla base dei 66 punti landmarks. Verranno creati 2 classificatori, uno per la Valence e l’altro per l’Arousal, entrambi con l’algoritmo SVM.

efeedback riconoscere espressioni facciali

Machine Learning

In questo contesto quindi, abbiamo delle istanze da classificare con valore Valence e valore Arousal. Si tratta quindi di apprendimento supervisionato, perché abbiamo già le classi dove classificare le istanze (Valence:Positive/Negative, Arousal:High/Low). Come detto prima, l’algoritmo di apprendimento scelto è SVM, i motivi che hanno portato a questa scelta sono stati dettati dalla necessità di avere un’alta accuratezza con dati ad alta dimensionalità, sono state effettuate comunque delle sperimentazioni con altri algoritmi, ma SVM è stato sempre il migliore.
Questi classificatori non sono definitivi, infatti grazie all’intervento dell’utente è possibile continuare ad apprendere aggiornandoli. L’utente può dare in input a eFeedback una immagine di un volto seguita dalla classe di appartenenza reale, così eFeedback potrà apprendere da questo nuovo dato.

Per l’apprendimento iniziale è necessario un database che contenga diverse immagini di volti già etichettate con i valori di Valence e Arousal. A questo scopo è stato usato il database Cohn-Kanade Extended. Questo database etichetta ogni immagine significativa con una delle emozioni di base. Una componente di eFeedback è stata creata ad-hoc per la lettura di questi dati, converte le etichette delle immagini nei valori corrispondenti di Valence e Arousal e crea il dataset da usare per l’apprendimento del modello.

L’algoritmo SVM che crea i due classificatori, è chiamato SMO e fa parte del tool WEKA.

Riconoscere espressioni facciali dal modello circonflesso

Dalla teoria delle emozioni (Ekman) ogni emozione può essere spiegata come la combinazione lineare tra le dimensioni del modello circonflesso, valenza e livello di attivazione. eFeedback restituisce questi due valori, dai quali quindi si puù ottenere l’emozione corrispondente.

Accuratezza ottenuta

  • Classificatore Valence
    • Split al 66% : accuracy = 82.88%
    • Cross-validation 10 fold : accuracy = 79.2%
  • Classificatore Arousal
    • Split al 66% : accuracy = 73%
    • Cross-validation 10 fold : accuracy = 78.1%