En kort guide til BBC R & Ds video ansiktsgjenkjenning

Ofte er det oppgavene mennesker gjør uten å tenke som krever noe av den mest komplekse behandlingen bak kulissene. Smaker på mat, prater med venner, hører på musikk og kjenner igjen folk. Når du ser en episode av Eastenders, ser du de forskjellige skuespillerne i forskjellige omgivelser, fra forskjellige vinkler og i annen belysning, men øyeblikkelig hjernen din håndterer disse variasjonene for å vite at det er Dot Cotton og Phil Mitchell i scenen. Fordi vi ikke tenker på behandlingen som er involvert, er vi overrasket over at disse oppgavene er mye mer kompliserte enn vi først trodde når vi prøver å bruke dem på maskinlæring.

Ta følgende bilder fra prins Harry og Megan Markle ute på gaten. Vi kan se Harry og Megan fra forskjellige vinkler her - foran, side og bak - og likevel gjenkjenner vi dem lett fra deres egenskaper: hudfarge, hårfarge og så videre. Vi tar også hensyn til visse sosiale holdepunkter. Publikum ser på dem, de er godt kledd, de er i sentrum av hvert skudd, og det er en åpenbar kontinuitet med skudd fra samme scene. Det er mange lag med menneskelig intuisjon her vi pleier ikke engang å tenke på når vi oppdager så vel kulturelle som fysiske indikatorer.

Vi kjenner naturlig igjen Harry og Megan, til tross for de forskjellige vinklene i disse skuddene

Så hvordan lærer vi en datamaskin å lære å gjøre alt dette? Selv om vi ikke kan få en algoritme til å tenke som et menneske, kan vi få den til å gjøre det maskinlæring gjør best: oppdage mønstre i store, merkede datasett. Dette innebærer å samle bilder, trene algoritmen, behandle videoer og gjenkjenne menneskene i dem. Den endelige utdataene er en liste over personer som er gjenkjent i en video sammen med tid og sted i rammene de vises.

Vi jobber allerede med å bygge denne teknologien på BBC. Systemet vårt, kalt FaceRec, utvikles av Internet Research and Future Services Data Team innen BBC Research and Development (vi vil lagre noen tastetrykk og bare kalle dem datateamet herfra og ut). Den er bygget ved hjelp av en kombinasjon av egen kode og ekstern open source-programvare - spesielt Seetaface, en C ++ ansiktsgjenkjenningsmotor.

FaceRec fungerer ved å behandle video gjennom en serie algoritmiske trinn, som hver løser en spesifikk del av det totale problemet. Vi gir deg en oversikt over hvordan det hele fungerer.

1. Oppdage skudd

For at hvert ansikt skal bli oppdaget i en video, må vi først bryte videoen opp i de bestående bildene (et skudd er definert som en serie rammer som kjører i en uavbrutt periode). For å gjøre dette bruker FaceRec mediebehandlingsbiblioteket FFmpeg, som bruker en funksjon for å returnere alle opptakets start- og sluttider innen en gitt video.

2. Registrer ansikter

Neste trinn er å sjekke hver ramme for å se om den inneholder menneskelige ansikter. Dette er et vanskelig problem - skal vi prøve å oppdage hvert eneste ansikt på en fotballkamp? Teller et ansikt på en t-skjorte? Gjør bilder på forsiden av aviser?

Iterating gjennom hvert skudd, tar FaceRec bilder fra skuddet og mater disse til SeetaFace, som deretter returnerer avgrensningsboksene til hvor det tror ansiktene er. SeetaFas ansiktsgjenkjenningsmotor avgjør om et ansikt "teller" nok til å inkludere det. Vær oppmerksom på at SeetaFace ikke sier hvem de tror de oppdagede menneskene er, bare at den mener at den har oppdaget et ansikt på et gitt sted innenfor rammen.

3. Lag ansiktsspor

Nå som vi har samlet alle rammene som inneholder ansikter, er den neste oppgaven å sy disse oppdagede ansiktene sammen for å lage et ansiktsspor. Et ansiktsspor er en kontinuerlig strøm av avgrensende bokser rundt et ansikt når det beveger seg innenfor skuddrammen.

FaceRec tar hver ansiktsavgrensende boks og prøver å kartlegge den til den neste logiske avgrensningsboksen i den følgende rammen. Dette er ikke alltid helt åpenbart, da ansikter midlertidig kan skjupes eller avgrensende bokser kan krysse hverandre når en person beveger seg bak en annen.

Bindende bokser sporer ansikter gjennom et skudd

Under panseret løses dette problemet ved å bruke Dlib og Lucas-Kanade-metoden. Dette skaper ansiktsspor som er definert av tidspunkter, en liste over rammer og avgrensningsboksene til ansiktene.

4. Lag ansiktsvektorer for spor

Maskinlæringsalgoritmer fungerer ofte ved å konvertere input-materiale til matematiske vektorer. De lærer deretter hvilke deler av dette "vektorområdet" som tilhører spesifikke kategorier eller inndatatyper. Når det gjelder ansikter, ville de lære at vektorer som representerer ansiktet til Prins Harry pleier å være i et bestemt område, mens Megan-vektorer har en tendens til å være over i et annet avsnitt. Du kan også forvente at vektorer av prins William's ansikt vil være nærmere i dette rommet til Harry enn Megan, siden de er i slekt og har lignende egenskaper.

For å lage vektorer for de oppdagede ansiktene, bruker FaceRec SeetaFas ansiktsidentifikasjonsbibliotek. FaceRec mater inn beskjærte bilder av de oppdagede ansiktene i avgrensende bokser fra midtpunktet av ansiktsporet. Den mottar en 2024-dimensjonal vektor som representerer funksjonene i ansiktet.

5. Gjenkjenne menneskers ansikter i ansiktssporvektorer

Vi har nå en ansiktsvektor for hvert detekterte ansiktsspor. Neste trinn er å gjøre disse vektorene om til de faktiske navnene på de anerkjente ansiktene, samt flagge ansiktene vi ikke kjenner (og derfor ikke kan merke).

Det første spørsmålet her er: bare hvem kjenner vi igjen? Vi kan helt sikkert ikke bygge en modell for å gjenkjenne alle som noen gang har levd - og det vil vi heller ikke. Så hvem anser vi som viktig nok for dette ansiktsgjenkjenningssystemet?

Realistisk sett må dette styres av journalistene i BBC News og menneskene de ofte rapporterer om. Vi må også være klar over at ukjente personer lager nyhetene hver dag, og når de gjør det, har vi kanskje ikke tidligere bilder av dem. Med tanke på disse begrensningene, fokuserte Datateamet hovedsakelig på kjendiser, internasjonale ledere, britiske politikere i parlamentet og House of Lords når de trente FaceRec.

For å kjenne igjen disse menneskene, trengte de å samle treningsdata om hver person - det vil si mange merkede bilder av den personen som bare inneholder den personen. Datateamet samlet tusenvis av bilder og bygde deretter sitt eget front-end-system for enkelt å se og merke individuelle bilder. Den useksuelle sannheten i maskinlæring er at innsamling av kvalifiserte, merkede data ofte er den dyreste, arbeidskrevende og likevel viktige delen av å bygge et velfungerende AI-system.

Etter å ha samlet bildene, matet Data Team dem deretter inn i en maskinlæringsklassifiserer kalt en støttevektormaskin for å lage trente modeller. Når de blir matet til en ansiktsvektor fra SeetaFace, forutsier disse modellene navnet på personen i det originale ansiktsbildet eller sier om de ikke kjente igjen ansiktet i det hele tatt.

IRFS opprettet to modeller:

  1. Arkivmodell: Kjente personer fra 1900-tallet og utover valgt av personer fra BBC Archive. Denne modellen inneholdt omtrent 1000 mennesker.
  2. Nyhetsmodell: Fortsatt i utvikling, vil dette utvide seg til å omfatte over 2000 medlemmer av det britiske parlamentet og regionale forsamlinger, House of Lords og globale ledere. Treningsbilder ble hentet fra BBC News, Factual og Drama.

Disse trente modellene blir deretter brukt til å forutsi hvilke mennesker som er i ansiktssporene i videoer.

6. Cluster face tracks

Nå som alle ansiktssporene er merket, er det siste trinnet å samle alle sporene til den samme personen.

For å gjøre dette legger vi alle videoens utpakkede ansiktsvektorer i ett vektor-rom, som vi vil kalle et ansiktsrom for moro skyld. For å visualisere ansiktsområdet, kan vi bruke et verktøy som heter Tensorboard, en del av maskinens læringsbibliotek Tensorflow.

Når vi ser på dette ansiktsområdet, håper vi at vektorer fra samme person er nær nok sammen og langt nok borte fra andre mennesker til at vi automatisk kan gruppere dem. Dette er kjent i maskinlæring som et klyngeproblem.

Vi kan se ansiktssporvektorene projisert inn i dette ansiktsområdet for Harry og Megan-videoen nedenfor. Og vi ser at de fleste av Megan-sporene er samlet sammen, noe som gjør dem enkle å klynge. Det er en måte vi vet at ansiktsvektorene som er opprettet fungerer godt.

Visualiserer ansikter med TensorBoard

De som er kjent med klynging vil se vanskeligheten med vårt ansiktsklyngeproblem. For hver video vil det være et varierende antall klynger i forskjellige størrelser - med mange vektorer som vises en gang og ikke tilhører noen klynge.

I stedet for å falle ned et mørkt hull ved å prøve å løse dette problemet, bestemte Datateamet å løpe med noen få heuristikker. FaceRec deler problemet opp i to separate kategorier: ansikter til mennesker den kjenner igjen og ansikter til mennesker det ikke gjør. For anerkjente ansikter klynger det bare alle ansiktsspor sammen som har den samme forutsagte etiketten (navnet). For ukjente ansikter bruker den en teknikk som kalles hierarkisk klynging over ansiktsvektorene for å gruppere dem, men ikke gi dem etiketter.

7. Skriv ut informasjonen

Det siste trinnet for FaceRec er å mate ut all informasjon som er samlet inn gjennom de forskjellige trinnene. Dette kommer i form av en JSON-fil som inneholder:

En liste over spor i videoen. For hvert spor har det:

  • Spådd person for det sporet
  • Tillit til prediksjonen
  • Spor UUID
  • Ansiktsvektor for det sporet
  • Liste over rammer i det sporet

I listen over rammer inkluderer informasjonen om hver ramme:

  • Ansiktsvektor for den rammen hvis den er oppdaget
  • Bindingsboks koordinater for ansiktet
  • Tid i videoen rammen oppstår

Hva kan vi gjøre med disse dataene? Du kan sjekke ut vårt neste blogginnlegg for å se ideene våre.

Wrap-up

Det handler om det. Forhåpentligvis har vi hjulpet deg å forstå de mange delene som går inn i et video ansiktsgjenkjenningssystem. Og kanskje har vi også gjort deg mer bevisst på alle tunge løft og uklarheter din egen hjerne håndterer hundrevis av ganger om dagen når du gjenkjenner dine venner og kjære.

Etter å ha forstått de indre funksjonene i FaceRec-systemet, var oppgaven for News Labs å se hvor denne teknologien kunne tilføre forretningsverdi i BBC. Hvordan viser vi opp FaceRecs evner med en intuitiv demo? Hvilke produksjonssystemer kunne vi se FaceRec passe inn i? Hvilke arbeidsflytproblemer kunne det løse? Og viktigere, hvordan føler folk det å bruke ansiktsgjenkjenning? Vi snakker om utfordringene med å rulle ut en ny teknologi i en stor organisasjon og spørsmålene vi sto overfor når vi utviklet en prototype for ansiktsgjenkjenning i “Ansiktsgjenkjenning - hva bruker det til nyhetslokaler?”.