Una breve guida al riconoscimento video della BBC R & S

Spesso sono i compiti che gli umani svolgono senza pensare che richiedono alcune delle elaborazioni più complesse dietro le quinte. Degustare cibo, chiacchierare con gli amici, ascoltare musica e, in effetti, riconoscere le persone. Quando guardi un episodio di Eastenders, vedi i diversi attori in ambientazioni diverse, da angolazioni diverse e con illuminazione diversa, ma immediatamente il tuo cervello gestisce queste variazioni per sapere che sono Dot Cotton e Phil Mitchell nella scena. Poiché non pensiamo al trattamento in questione, siamo sorpresi di scoprire che queste attività sono molto più complesse di quanto pensassimo inizialmente quando proviamo ad applicarle all'apprendimento automatico.

Prendi le seguenti immagini dal principe Harry e Megan Markle per strada. Possiamo vedere Harry e Megan da diverse angolazioni qui - anteriore, laterale e posteriore - eppure li riconosciamo facilmente dalle loro caratteristiche: il colore della pelle, il colore dei capelli e così via. Stiamo anche prendendo in considerazione alcuni segnali sociali. La folla li sta guardando, sono ben vestiti, sono al centro di ogni ripresa e c'è un'ovvia continuità nella ripresa della stessa scena. Ci sono molti livelli di intuizione umana qui a cui tendiamo a non pensare nemmeno quando rileviamo indicatori sia culturali che fisici.

Riconosciamo naturalmente Harry e Megan, nonostante le diverse angolazioni in questi scatti

Quindi, come insegniamo a un computer a imparare a fare tutto questo? Sebbene non siamo in grado di ottenere un algoritmo per pensare come un essere umano, possiamo farlo fare ciò che l'apprendimento automatico fa meglio: rilevare modelli in set di dati di grandi dimensioni, etichettati. Ciò comporta la raccolta di immagini, l'addestramento dell'algoritmo, l'elaborazione di video e il riconoscimento delle persone al loro interno. L'output finale è un elenco di persone riconosciute in un video insieme all'ora e alla posizione nei frame in cui appaiono.

Stiamo già lavorando per sviluppare questa tecnologia alla BBC. Il nostro sistema, chiamato FaceRec, è stato sviluppato da Internet Research e Future Services Data Team all'interno della BBC Research and Development (salveremo alcuni tasti e li chiameremo da qui in poi). È costruito utilizzando una combinazione di codice interno e software open source esterno, in particolare Seetaface, un motore di riconoscimento facciale C ++.

FaceRec funziona elaborando video attraverso una serie di passaggi algoritmici, ognuno dei quali risolve una parte specifica del problema generale. Ti forniremo una panoramica di come funziona tutto.

1. Rileva i colpi

Affinché ogni volto venga rilevato in un video, dobbiamo prima suddividere il video nei suoi scatti costitutivi (uno scatto è definito come una serie di fotogrammi in esecuzione per un periodo di tempo ininterrotto). Per fare ciò, FaceRec utilizza la libreria di elaborazione multimediale FFmpeg, che utilizza una funzione per restituire tutti gli orari di inizio e fine di tutti gli scatti all'interno di un determinato video.

2. Rileva volti

Il prossimo passo è controllare ogni fotogramma per vedere se contiene volti umani. Questo è un problema difficile: dovremmo cercare di rilevare ogni singolo volto di una partita di calcio? Conta una faccia su una maglietta? Fare foto sulla parte anteriore dei giornali?

Scorrendo ogni scatto, FaceRec prende i fotogrammi dallo scatto e li trasmette a SeetaFace, che quindi restituisce le caselle di delimitazione di dove pensa che siano i volti. Il motore di rilevamento del volto di SeetaFace rileva se un volto "conta" abbastanza da includere nel suo output. Si noti che SeetaFace non sta dicendo chi pensa che siano le persone rilevate, ma semplicemente che ritiene di aver rilevato un volto in una determinata posizione all'interno della cornice.

3. Crea tracce di volti

Ora che abbiamo raccolto tutti i fotogrammi contenenti facce, l'attività successiva è quella di ricucire insieme queste facce rilevate per creare una traccia viso. Una traccia viso è un flusso continuo di riquadri di delimitazione attorno a una faccia mentre si muove all'interno della cornice di ripresa.

FaceRec prende ogni riquadro di delimitazione del volto e tenta di mapparlo al riquadro di delimitazione logico successivo nel fotogramma seguente. Questo non è sempre del tutto ovvio, poiché i volti possono essere temporaneamente oscurati o le caselle di delimitazione possono incrociarsi mentre una persona si muove dietro un'altra.

Le scatole delimitate tracciano i volti attraverso un colpo

Sotto il cofano, questo problema viene risolto utilizzando Dlib e il metodo Lucas-Kanade. Questo crea tracce di facce che sono definite da punti temporali, un elenco di cornici e le caselle di delimitazione delle facce.

4. Creare vettori di volti per le tracce

Gli algoritmi di machine learning spesso funzionano convertendo materiale di input in vettori matematici. Quindi imparano quali parti di questo "spazio vettoriale" appartengono a categorie o tipi di input specifici. In termini di facce, avrebbero imparato che i vettori che rappresentano la faccia del principe Harry tendono ad essere in una determinata area, mentre i vettori di Megan tendono ad essere finiti in una sezione diversa. Ti aspetteresti anche che i vettori della faccia del Principe William siano più vicini in questo spazio ad Harry che a Megan, poiché sono collegati e condividono caratteristiche simili.

Per creare vettori per i volti rilevati, FaceRec utilizza la libreria di identificazione dei volti di SeetaFace. FaceRec inserisce le foto ritagliate dei volti rilevati all'interno dei relativi riquadri dal punto centrale della traccia del volto. Riceve indietro un vettore 2024 dimensionale che rappresenta le caratteristiche di quella faccia.

5. Riconosci i volti delle persone nei vettori di tracciamento dei volti

Ora abbiamo un face-vector per ogni face-track rilevata. Il prossimo passo è trasformare questi vettori nei nomi effettivi dei volti riconosciuti, oltre a contrassegnare i volti che non riconosciamo (e quindi non possiamo etichettare).

La prima domanda qui è: solo chi riconosciamo? Sicuramente non possiamo costruire un modello per riconoscere tutti quelli che sono mai vissuti - e nemmeno lo vorremmo. Quindi chi riteniamo abbastanza importante per questo sistema di riconoscimento facciale?

Realisticamente, questo deve essere guidato dai giornalisti di BBC News e dalle persone su cui più comunemente riferiscono. Dobbiamo anche essere consapevoli del fatto che persone sconosciute fanno notizia ogni giorno e, quando lo fanno, potremmo non avere alcuna foto precedente di loro. Tenendo presenti queste limitazioni, il Data Team si è concentrato principalmente su celebrità, leader internazionali, politici britannici in Parlamento e alla Camera dei Lord durante l'addestramento di FaceRec.

Per riconoscere queste persone, avevano bisogno di raccogliere dati di allenamento su ogni persona, cioè un sacco di foto etichettate di quella persona che conteneva solo quella persona. Il team di dati ha raccolto migliaia di foto e quindi ha creato il proprio sistema front-end per visualizzare ed etichettare facilmente le singole foto. La verità poco appariscente dell'apprendimento automatico è che la raccolta di dati etichettati di qualità è spesso la parte più costosa, laboriosa e tuttavia importante della costruzione di un sistema di intelligenza artificiale ben funzionante.

Dopo aver raccolto le foto, il team di dati le ha quindi inserite in un classificatore di machine learning chiamato macchina vettoriale di supporto per creare modelli addestrati. Quando vengono alimentati un vettore di volti da SeetaFace, questi modelli prevedono il nome della persona nell'immagine del volto originale o dicono se non hanno riconosciuto affatto il volto.

IRFS ha creato due modelli:

  1. Modello di archivio: personaggi famosi dal XX secolo in poi selezionati da persone dell'archivio della BBC. Questo modello conteneva circa 1.000 persone.
  2. Modello di notizie: ancora in fase di sviluppo, questo si espanderà fino a includere oltre 2.000 membri del Parlamento britannico e assemblee regionali, la Camera dei Lord e leader globali. Le immagini di allenamento sono state fornite da BBC News, Factual e Drama.

Questi modelli addestrati vengono quindi utilizzati per prevedere quali persone si trovano nelle tracce dei volti nei video.

6. Tracce faccia cluster

Ora che tutte le tracce sono state etichettate, il passaggio finale è quello di raccogliere tutte le tracce della stessa persona.

Per fare ciò, mettiamo tutti i vettori del viso estratti di un video in uno spazio vettoriale, che chiameremo spazio del viso per divertimento. Per visualizzare lo spazio facciale possiamo usare uno strumento chiamato Tensorboard, parte della libreria di apprendimento automatico Tensorflow.

Guardando questo spazio-volto, speriamo che i vettori della stessa persona siano abbastanza vicini tra loro e abbastanza lontani dalle altre persone da poterli raggruppare automaticamente. Questo è noto nell'apprendimento automatico come un problema di clustering.

Possiamo vedere i vettori della traccia faccia proiettati in questo spazio-faccia per il video di Harry e Megan qui sotto. E vediamo che la maggior parte delle tracce Megan sono raggruppate insieme, rendendole facili da raggruppare. Questo è un modo in cui sappiamo che i vettori di volti creati stanno funzionando bene.

Visualizzazione dei volti con TensorBoard

Chi ha familiarità con il clustering vedrà la difficoltà del nostro problema di clustering di volti. Per ogni video, ci sarà un numero variabile di cluster di varie dimensioni - con un sacco di vettori che appaiono una volta e non appartengono affatto a nessun cluster.

Invece di cadere in un buco nero cercando di risolvere perfettamente questo problema, il Data Team ha deciso di correre con poche euristiche. FaceRec suddivide il problema in due categorie separate: volti di persone che riconosce e volti di persone che non riconosce. Per i volti riconosciuti, raggruppa semplicemente tutte le tracce dei volti che hanno la stessa etichetta (nome) prevista. Per le facce non riconosciute utilizza una tecnica chiamata raggruppamento gerarchico sui vettori delle facce per raggrupparli, ma non dare loro etichette.

7. Invia le informazioni

L'ultimo passaggio per FaceRec è fornire tutte le informazioni raccolte durante i diversi passaggi. Questo si presenta sotto forma di un file JSON che contiene:

Un elenco di tracce nel video. Per ogni traccia ha:

  • Persona prevista per quella traccia
  • Fiducia della previsione
  • Traccia l'UUID
  • Face-vector per quella traccia
  • Elenco di frame in quella traccia

Nell'elenco dei frame, le informazioni su ciascun frame includono:

  • Vettore di faccia per quel fotogramma se è stato rilevato
  • Coordinate del riquadro di delimitazione per il viso
  • Tempo nel video in cui si verifica il frame

Cosa possiamo fare con questi dati? Puoi dare un'occhiata al nostro prossimo post sul blog per vedere le nostre idee.

Incartare

Questo è tutto. Speriamo di averti aiutato a capire le molte parti che vanno in un sistema di riconoscimento facciale video. E forse ti abbiamo anche reso più consapevole di tutte le pesanti sollevazioni e ambiguità che il tuo cervello gestisce centinaia di volte al giorno quando riconosce i tuoi amici e i tuoi cari.

Dopo aver compreso il funzionamento interno del sistema FaceRec, il compito di News Labs era vedere dove questa tecnologia potesse aggiungere valore commerciale all'interno della BBC. Come mostriamo le abilità di FaceRec con una demo intuitiva? In quali sistemi di produzione potremmo vedere FaceRec? Di quali problemi di flusso di lavoro potrebbe risolvere? E, soprattutto, come si sentono le persone sull'uso del riconoscimento facciale? Parliamo delle sfide legate all'introduzione di una nuova tecnologia all'interno di una grande organizzazione e delle domande che abbiamo affrontato durante lo sviluppo di un prototipo di riconoscimento facciale in "Riconoscimento facciale - A che serve per le redazioni?".