Een korte gids voor BBC R & D's video-gezichtsherkenning

Vaak zijn het de taken die mensen doen zonder na te denken die een aantal van de meest complexe bewerkingen achter de schermen vereisen. Eten proeven, chatten met vrienden, naar muziek luisteren en inderdaad mensen herkennen. Wanneer je een aflevering van Eastenders bekijkt, zie je de verschillende acteurs in verschillende omgevingen, vanuit verschillende invalshoeken en in verschillende belichting, maar je hersenen verwerken onmiddellijk deze variaties om te weten dat het Dot Cotton en Phil Mitchell in de scène zijn. Omdat we niet nadenken over de verwerking, zijn we verbaasd dat deze taken veel complexer zijn dan we in eerste instantie dachten toen we ze probeerden toe te passen op machine learning.

Maak de volgende foto's van Prins Harry en Megan Markle op straat. We kunnen Harry en Megan hier vanuit verschillende invalshoeken bekijken - voorkant, zijkant en achterkant - en toch herkennen we ze gemakkelijk aan hun kenmerken: huidskleur, haarkleur, enzovoort. We houden ook rekening met bepaalde sociale signalen. De menigte kijkt naar hen, ze zijn goed gekleed, ze staan ​​in het midden van elke opname en er is een duidelijke continuïteit van opnamen vanuit dezelfde scène. Er zijn veel lagen van menselijke intuïtie waar we niet eens aan denken als we culturele en fysieke indicatoren ontdekken.

We herkennen Harry en Megan van nature, ondanks de verschillende hoeken in deze opnamen

Dus hoe leren we een computer om dit alles te leren doen? Hoewel we geen algoritme kunnen krijgen om als een mens te denken, kunnen we het wel laten doen wat machine learning het beste doet: patronen detecteren in grote, gelabelde datasets. Dit omvat het verzamelen van afbeeldingen, het trainen van het algoritme, het verwerken van video's en het herkennen van de mensen erin. De uiteindelijke uitvoer is een lijst met mensen die in een video worden herkend, samen met de tijd en locatie in de frames waarin ze verschijnen.

We zijn al bezig met het bouwen van deze technologie bij de BBC. Ons systeem, FaceRec genaamd, wordt ontwikkeld door het Internet Research and Future Services Data Team binnen BBC Research and Development (we slaan enkele toetsaanslagen op en noemen ze vanaf nu gewoon het Data Team). Het is gebouwd met behulp van een combinatie van in-house code en externe open-source software - met name Seetaface, een C ++ gezichtsherkenningsmachine.

FaceRec werkt door video te verwerken via een reeks algoritmische stappen, die elk een specifiek deel van het totale probleem oplossen. We geven u een overzicht van hoe het allemaal werkt.

1. Detecteer schoten

Voor elk gezicht dat in een video wordt gedetecteerd, moeten we de video eerst opsplitsen in zijn samenstellende opnamen (een opname wordt gedefinieerd als een reeks frames die gedurende een ononderbroken periode lopen). Om dit te doen, gebruikt FaceRec de mediabewerkingsbibliotheek FFmpeg, die een functie gebruikt om de begin- en eindtijden van alle opnamen binnen een bepaalde video te retourneren.

2. Detecteer gezichten

De volgende stap is om elk frame te controleren om te zien of het menselijke gezichten bevat. Dit is een lastig probleem - moeten we proberen elk gezicht bij een voetbalwedstrijd te detecteren? Telt een gezicht op een t-shirt? Maken foto's op de voorkant van kranten?

FaceRec doorloopt elke opname en neemt frames van de opname en voert deze naar SeetaFace, die vervolgens de selectievakjes teruggeeft van waar het denkt dat de gezichten zijn. De gezichtsdetectiemotor van SeetaFace onderscheidt of een gezicht genoeg telt om in de uitvoer op te nemen. Houd er rekening mee dat SeetaFace niet zegt wie het denkt dat de gedetecteerde mensen zijn, maar alleen dat het gelooft dat het een gezicht op een bepaalde locatie binnen het frame heeft gedetecteerd.

3. Maak gezichtssporen

Nu we alle frames met gezichten hebben verzameld, is de volgende taak om deze gedetecteerde gezichten aan elkaar te naaien om een ​​face-track te maken. Een face-track is een continue stroom van selectiekaders rond een gezicht terwijl dit binnen het schotframe beweegt.

FaceRec neemt elk gezichtskader en probeert het toe te wijzen aan het volgende logische kader in het volgende frame. Dit is niet altijd helemaal duidelijk, omdat gezichten tijdelijk kunnen worden verborgen of begrenzende kaders elkaar kunnen kruisen wanneer de ene persoon achter de andere beweegt.

Grenzende dozen volgen gezichten door een schot

Onder de motorkap wordt dit probleem opgelost met behulp van Dlib en de Lucas-Kanade-methode. Hiermee maakt u gezichtstracks die worden gedefinieerd door tijdpunten, een lijst met frames en de selectiekaders van de gezichten.

4. Maak gezicht-vectoren voor tracks

Machine learning-algoritmen werken vaak door inputmateriaal om te zetten in wiskundige vectoren. Vervolgens leren ze welke delen van deze 'vectorruimte' tot specifieke categorieën of invoertypen behoren. In termen van gezichten, zouden ze leren dat vectoren die het gezicht van Prins Harry vertegenwoordigen zich meestal in een bepaald gebied bevinden, terwijl Megan-vectoren meestal in een ander gedeelte zijn. Je zou ook verwachten dat vectoren van het gezicht van Prins William in deze ruimte dichter bij Harry zijn dan bij Megan, omdat ze verwant zijn en vergelijkbare kenmerken delen.

Om vectoren voor de gedetecteerde gezichten te maken, gebruikt FaceRec de gezichtsidentificatiebibliotheek van SeetaFace. FaceRec voedt bijgesneden foto's van de gedetecteerde gezichten binnen hun selectiekaders vanaf het midden van het gezichtsspoor. Het ontvangt een 2024-dimensionale vector terug die de kenmerken van dat gezicht vertegenwoordigt.

5. Herken de gezichten van mensen in face-trackvectoren

We hebben nu een face-vector voor elk gedetecteerd face-track. De volgende stap is om deze vectoren om te zetten in de werkelijke namen van de herkende gezichten, en om de gezichten te markeren die we niet herkennen (en dus niet kunnen labelen).

De eerste vraag hier is: wie herkennen we? We kunnen zeker geen model bouwen om iedereen te herkennen die ooit heeft geleefd - en dat zouden we ook niet willen. Dus wie vinden wij belangrijk genoeg voor dit gezichtsherkenningssysteem?

Realistisch gezien moet dit worden aangestuurd door de journalisten in BBC News en de mensen over wie ze meestal rapporteren. We moeten er ook rekening mee houden dat onbekende mensen elke dag het nieuws maken, en als ze dat doen, hebben we mogelijk geen eerdere foto's van hen. Met deze beperkingen in gedachten, richtte het datateam zich vooral op beroemdheden, internationale leiders, Britse politici in het parlement en het House of Lords bij het trainen van FaceRec.

Om deze mensen te herkennen, moesten ze trainingsgegevens over elke persoon verzamelen - dat wil zeggen, veel gelabelde foto's van die persoon die alleen die persoon bevatten. Het Data Team verzamelde duizenden foto's en bouwde vervolgens hun eigen front-end systeem om eenvoudig individuele foto's te bekijken en te labelen. De unsexy waarheid van machine learning is dat het verzamelen van hoogwaardige, gelabelde gegevens vaak het duurste, arbeidsintensieve en toch belangrijke onderdeel is van het bouwen van een goed functionerend AI-systeem.

Nadat de foto's waren verzameld, voerde het datateam ze vervolgens in een machine learning classifier genaamd een support vector machine om getrainde modellen te maken. Wanneer ze een gezichtsvector van SeetaFace krijgen, voorspellen deze modellen de naam van de persoon in de oorspronkelijke gezichtsafbeelding of zeggen ze of ze het gezicht helemaal niet hebben herkend.

IRFS heeft twee modellen gemaakt:

  1. Archiefmodel: Beroemde personen vanaf de 20ste eeuw geselecteerd door mensen uit BBC Archive. Dit model bevatte ongeveer 1.000 mensen.
  2. Nieuwsmodel: nog in ontwikkeling, dit zal worden uitgebreid met meer dan 2000 leden van het Britse parlement en regionale assemblees, het House of Lords en wereldleiders. Trainingsafbeeldingen waren afkomstig van BBC News, Factual en Drama.

Deze getrainde modellen worden vervolgens gebruikt om te voorspellen welke mensen in video's in het gezicht staan.

6. Clustergezichtssporen

Nu alle face-tracks zijn gelabeld, is de laatste stap het verzamelen van alle tracks van dezelfde persoon.

Om dit te doen, plaatsen we alle geëxtraheerde gezichtsvectoren van een video in één vectorruimte, die we voor het plezier een gezichtsruimte zullen noemen. Om de face-space te visualiseren kunnen we een tool gebruiken genaamd Tensorboard, onderdeel van de machine learning bibliotheek Tensorflow.

Kijkend naar deze face-space, hopen we dat vectoren van dezelfde persoon dicht genoeg bij elkaar en ver genoeg van andere mensen zijn dat we ze automatisch kunnen groeperen. Dit staat in machine learning bekend als een clusterprobleem.

We kunnen de face-trackvectoren in deze face-space geprojecteerd zien voor de Harry en Megan-video hieronder. En we zien dat de meeste van de Megan-tracks zijn gebundeld, waardoor ze gemakkelijk te clusteren zijn. Dat is een manier waarop we weten dat de gemaakte gezichtsvectoren goed werken.

Gezichten visualiseren met TensorBoard

Degenen die bekend zijn met clustering zullen de moeilijkheid van ons gezichtsclusterprobleem zien. Voor elke video is er een variërend aantal clusters van verschillende grootte - met veel vectoren die één keer verschijnen en helemaal geen cluster bevatten.

In plaats van in een donker gat te vallen door te proberen dit probleem perfect op te lossen, besloot het Data Team om een ​​paar heuristieken uit te voeren. FaceRec splitst het probleem op in twee afzonderlijke categorieën: gezichten van mensen die het herkent en gezichten van mensen die het niet herkent. Voor herkende gezichten bundelt het eenvoudig alle gezichtssporen die hetzelfde voorspelde label (naam) hebben. Voor niet-herkende gezichten gebruikt het een techniek die hiërarchische clustering over de gezichtsvectoren wordt genoemd om ze te groeperen, maar ze geen labels te geven.

7. Voer de info uit

De laatste stap voor FaceRec is het voeden van alle verzamelde informatie tijdens de verschillende stappen. Dit komt in de vorm van een JSON-bestand dat het volgende bevat:

Een lijst met tracks in de video. Voor elke track heeft het:

  • Voorspelde persoon voor die track
  • Vertrouwen van de voorspelling
  • UUID volgen
  • Face-vector voor dat nummer
  • Lijst met frames in die track

In de lijst met frames bevat de informatie over elk frame:

  • Gezichtsvector voor dat frame als het is gedetecteerd
  • Coördinaten van het selectiekader voor het gezicht
  • Tijd in de video waarin het frame voorkomt

Wat kunnen we met deze gegevens doen? Je kunt onze volgende blogpost bekijken om onze ideeën te bekijken.

Inpakken

Dat is het eigenlijk wel. Hopelijk hebben we je geholpen bij het begrijpen van de vele delen die in een gezichtsherkenningssysteem voor video komen. En misschien hebben we je ook bewuster gemaakt van al het zware werk en dubbelzinnigheden die je eigen brein honderden keren per dag afhandelt bij het herkennen van je vrienden en geliefden.

Na het begrijpen van de interne werking van het FaceRec-systeem, was de taak voor News Labs om te zien waar deze technologie bedrijfswaarde kon toevoegen binnen de BBC. Hoe laten we de mogelijkheden van FaceRec zien met een intuïtieve demo? Op welke productiesystemen kunnen we FaceRec aanpassen? Wiens workflow-problemen zou het kunnen oplossen? En belangrijker, hoe denken mensen over het gebruik van gezichtsherkenning? We praten over de uitdagingen van het uitrollen van een nieuwe technologie binnen een grote organisatie en de vragen die we tegenkwamen bij het ontwikkelen van een prototype voor gezichtsherkenning in "Gezichtsherkenning - wat is het nut voor nieuwskamers?".