En kort guide till BBC FoU: s ansiktsigenkänning

Ofta är det uppgifterna som människor gör utan att tänka som kräver någon av de mest komplexa bearbetningarna bakom kulisserna. Smaka på mat, chatta med vänner, lyssna på musik och känner igen människor. När du tittar på ett avsnitt av Eastenders ser du de olika skådespelarna i olika inställningar, från olika vinklar och i olika belysning, men omedelbart hanterar din hjärna dessa variationer för att veta att det är Dot Cotton och Phil Mitchell i scenen. Eftersom vi inte tänker på den berörda behandlingen är vi förvånade över att de här uppgifterna är mycket mer komplexa än vad vi ursprungligen trodde när vi försöker tillämpa dem på maskininlärning.

Ta följande bilder från Prince Harry och Megan Markle ute på gatan. Vi kan se Harry och Megan från olika vinklar här - fram, sida och bak - men vi känner igen dem enkelt från deras funktioner: hudfärg, hårfärg, och så vidare. Vi tar också hänsyn till vissa sociala ledtrådar. Publiken tittar på dem, de är välklädda, de är i mitten av varje skott och det finns en uppenbar kontinuitet för skott från samma scen. Det finns många lager av mänsklig intuition här vi tenderar att inte ens tänka på när vi upptäcker såväl kulturella som fysiska indikatorer.

Vi känner naturligtvis igen Harry och Megan, trots de olika vinklarna i dessa bilder

Så hur kan vi lära en dator att lära sig att göra allt detta? Även om vi inte kan få en algoritm att tänka som en människa, kan vi få den att göra vad maskininlärning gör bäst: upptäck mönster i stora, märkta datasätt. Det handlar om att samla bilder, utbilda algoritmen, bearbeta videor och känna igen personerna i dem. Den slutliga utgången är en lista över personer som känns igen i en video tillsammans med tid och plats i de ramar de visas.

Vi arbetar redan för att bygga den här tekniken på BBC. Vårt system, som heter FaceRec, utvecklas av Internet Research and Future Services Data Team inom BBC Research and Development (vi kommer att spara några tangenttryckningar och bara kalla dem Data Team härifrån och ut). Det är byggt med en kombination av intern kod och extern open source-programvara - särskilt Seetaface, en C ++ ansiktsigenkänningsmotor.

FaceRec fungerar genom att bearbeta video genom en serie algoritmiska steg, var och en löser en specifik del av det övergripande problemet. Vi ger dig en översikt över hur allt fungerar.

1. Upptäck bilder

För att varje ansikte ska upptäckas i en video måste vi först bryta upp videon i dess beståndsbilder (ett skott definieras som en serie ramar som körs under en oavbruten tidsperiod). För att göra detta använder FaceRec mediebearbetningsbiblioteket FFmpeg, som använder en funktion för att returnera alla skottens start- och sluttider inom en viss video.

2. Upptäck ansikten

Nästa steg är att kontrollera varje ram för att se om den innehåller mänskliga ansikten. Detta är ett knepigt problem - ska vi försöka upptäcka varje ansikte i en fotbollsmatch? Räknar ett ansikte på en t-shirt? Gör bilder på framsidan av tidningar?

Iterating genom varje skott tar FaceRec bilder från skottet och matar dessa till SeetaFace, som sedan returnerar avgränsningsrutorna där de anser att ansikten är. SeetaFas ansiktsdetekteringsmotor upptäcker om ett ansikte "räknar" tillräckligt för att inkludera i dess utgång. Observera att SeetaFace inte säger vem det tror att de upptäckta personerna är, bara att de tror att de har upptäckt ett ansikte på en viss plats inom ramen.

3. Skapa ansiktsspår

Nu när vi har samlat alla ramar som innehåller ansikten är nästa uppgift att sy ihop dessa upptäckta ansikten för att skapa ett ansiktsspår. Ett ansiktsspår är ett kontinuerligt flöde av avgränsande lådor runt ett ansikte när det rör sig inom skottramen.

FaceRec tar varje ansiktsavgränsande ruta och försöker kartlägga den till nästa logiska avgränsningsruta i följande ram. Detta är inte alltid helt uppenbart, eftersom ansikten tillfälligt kan döljas eller avgränsande lådor kan korsa varandra när en person rör sig bakom en annan.

Bindande lådor spårar ansikten genom ett skott

Under huven löses problemet med Dlib och metoden Lucas-Kanade. Detta skapar ansiktsspår som definieras av tidpunkter, en lista med ramar och ansiktsens avgränsande rutor.

4. Skapa ansiktsvektorer för spår

Maskininlärningsalgoritmer fungerar ofta genom att konvertera inmatningsmaterial till matematiska vektorer. De lär sig sedan vilka delar av detta "vektorrum" som tillhör specifika kategorier eller ingångstyper. När det gäller ansikten, skulle de lära sig att vektorer som representerar Prins Harrys ansikte tenderar att vara i ett visst område, medan Megan-vektorer tenderar att vara över i ett annat avsnitt. Du kan också förvänta dig att vektorer av Prince William's ansikte skulle vara närmare Harry i det här utrymmet än Megan, eftersom de är släkt och delar liknande egenskaper.

För att skapa vektorer för detekterade ansikten använder FaceRec SeetaFaces ansiktsidentifieringsbibliotek. FaceRec matar in beskurna foton av de upptäckta ansikten i deras avgränsande rutor från mittpunkten på ansiktsspåret. Den tar emot en 2024-dimensionell vektor som representerar funktionerna i ansiktet.

5. Känn igen människors ansikten i ansiktsspårvektorer

Vi har nu en ansiktsvektor för varje upptäckt ansiktsspår. Nästa steg är att förvandla dessa vektorer till de faktiska namnen på de igenkända ansikten, samt flagga ansikten vi inte känner igen (och därför inte kan märka).

Den första frågan här är: vem känner vi igen? Vi kan säkert inte bygga en modell för att känna igen alla som någonsin har levt - och inte heller skulle vi vilja. Så vem anser vi vara tillräckligt viktiga för detta ansiktsigenkänningssystem?

Realistiskt måste detta drivas av journalisterna i BBC News och de människor de oftast rapporterar om. Vi måste också vara medvetna om att okända människor gör nyheterna varje dag, och när de gör det, kanske vi inte har några tidigare bilder av dem. Med tanke på dessa begränsningar fokuserade Datateamet främst på kändisar, internationella ledare, brittiska politiker i parlamentet och House of Lords när de utbildade FaceRec.

För att känna igen dessa människor behövde de samla in träningsdata om varje person - det vill säga massor av märkta foton av den personen som bara innehöll den personen. Datateamet samlade tusentals foton och byggde sedan sitt eget front-end-system för att enkelt kunna se och märka enskilda foton. Den unsexy-sanningen i maskininlärning är att insamling av kvalitet, märkt data ofta är den dyraste, besvärliga och ändå viktiga delen av att bygga ett väl fungerande AI-system.

Efter att ha samlat in fotona matade Data Team dem sedan in i en maskininlärningsklassificering som kallas en supportvektormaskin för att skapa utbildade modeller. När de matas med en ansiktsvektor från SeetaFace förutspår dessa modeller namnet på personen i den ursprungliga ansiktsbilden eller säger om de inte kände igen ansiktet alls.

IRFS skapade två modeller:

  1. Arkivmodell: Kända personer från 1900-talet och framåt utvalda av personer från BBC Archive. Denna modell innehöll ungefär 1 000 personer.
  2. Nyhetsmodell: Fortfarande under utveckling kommer detta att utvidgas till att omfatta över 2 000 ledamöter av det brittiska parlamentet och regionala församlingar, House of Lords och globala ledare. Träningsbilder hämtades från BBC News, Factual och Drama.

Dessa utbildade modeller används sedan för att förutsäga vilka människor som är i ansiktsspåren i videor.

6. Cluster-ansiktsspår

Nu när alla ansiktsspår har märkts är det sista steget att samla alla spåren för samma person.

För att göra detta lägger vi alla videors extraherade ansiktsvektorer i ett vektorutrymme, som vi kallar ett ansiktsutrymme för skojs skull. För att visualisera ansiktsutrymmet kan vi använda ett verktyg som heter Tensorboard, en del av maskinlärningsbiblioteket Tensorflow.

När vi tittar på detta ansiktsutrymme hoppas vi att vektorer från samma person är tillräckligt nära varandra och tillräckligt långt borta från andra människor att vi automatiskt kan gruppera dem. Detta är känt i maskininlärning som ett klusterproblem.

Vi kan se ansiktsspårvektorerna som projiceras i detta ansiktsutrymme för Harry och Megan-videon nedan. Och vi ser att de flesta av Megan-spåren är ihop, vilket gör dem lätta att klustera. Det är ett sätt vi vet att de skapade ansiktsvektorerna fungerar bra.

Visualisera ansikten med TensorBoard

De som är bekanta med kluster kommer att se svårigheten med vårt problem med ansiktskluster. För varje video kommer det att finnas ett varierat antal kluster av olika storlekar - med massor av vektorer som visas en gång och tillhör inget kluster alls.

Istället för att falla ner ett mörkt hål genom att försöka lösa detta problem perfekt, beslutade Datateamet att springa med några få heuristik. FaceRec delar upp problemet i två separata kategorier: ansikten på människor som det känner igen och ansikten på människor det inte gör. För erkända ansikten kluster det helt enkelt alla ansiktsspår tillsammans som har samma förutspådda etikett (namn). För okända ansikten använder den en teknik som kallas hierarkisk gruppering över ansiktsvektorerna för att gruppera dem, men inte ge dem etiketter.

7. Skriv ut informationen

Det sista steget för FaceRec är att mata ut all information som samlas in i de olika stegen. Detta kommer i form av en JSON-fil som innehåller:

En lista över spår i videon. För varje spår har den:

  • Förutspådd person för det spåret
  • Förtroende för förutsägelsen
  • Spåra UUID
  • Ansiktsvektor för det spåret
  • Lista med ramar i det spåret

I listan med ramar innehåller informationen om varje ram:

  • Ansiktsvektor för den ramen om den har upptäckts
  • Bindning av rutan koordinater för ansiktet
  • Tid i videoklippet inträffar

Vad kan vi göra med denna information? Du kan kolla in vårt nästa blogginlägg för att se våra idéer.

Sammanfatta

Det handlar verkligen om det. Förhoppningsvis har vi hjälpt dig förstå de många delarna som ingår i ett system för ansiktsigenkänning av video. Och kanske har vi också gjort dig mer medveten om alla de tunga lyft och oklarheter som din egen hjärna hanterar hundratals gånger om dagen när du känner igen dina vänner och nära och kära.

Efter att ha förstått de inre funktionerna i FaceRec-systemet var uppgiften för News Labs att se var denna teknik skulle kunna ge affärsvärde inom BBC. Hur visar vi upp FaceRecs förmågor med en intuitiv demo? Vilka produktionssystem kan vi se FaceRec anpassa sig till? Vilka arbetsflödesproblem kan det lösa? Och viktigare, hur tycker människor om att använda ansiktsigenkänning? Vi pratar om utmaningarna med att rulla ut en ny teknik inom en stor organisation och de frågor vi stod inför när vi utvecklade en prototyp för ansiktsigenkänning i ”Ansiktsigenkänning - vilken användning har det för nyhetslokaler?”.