la oss takle dette problemet ett trinn om gangen. For hvert trinn lærer vi om en annen maskinlæringsalgoritme. Jeg skal ikke forklare hver eneste algoritme helt for å hindre at dette blir til en bok, men du lærer de viktigste ideene bak hver enkelt, og du lærer hvordan du kan bygge ditt eget ansiktsgjenkjenningssystem i Python ved Hjelp Av OpenFace og dlib.
Trinn 1: Finne Alle Ansikter
det første trinnet i vår rørledning er ansiktsgjenkjenning. Selvfølgelig må vi finne ansiktene i et fotografi før vi kan prøve å fortelle dem fra hverandre!
Hvis du har brukt et kamera i de siste 10 årene, har du sikkert sett ansiktsgjenkjenning i aksjon:
ansiktsgjenkjenning er en flott funksjon for kameraer. Når kameraet automatisk kan plukke ut ansikter, kan det sørge for at alle ansiktene er i fokus før det tar bildet. Men vi vil bruke den til et annet formål — å finne områdene av bildet vi ønsker å gi videre til neste trinn i vår pipeline.Ansiktsgjenkjenning ble vanlig på begynnelsen av 2000-tallet da Paul Viola og Michael Jones oppfant en måte å oppdage ansikter som var raske nok til å kjøre på billige kameraer. Men det finnes mye mer pålitelige løsninger nå. Vi skal bruke en metode oppfunnet i 2005 kalt Histogram Av Orienterte Gradienter-eller BARE HOG for kort.
for å finne ansikter i et bilde, begynner vi med å gjøre bildet vårt svart og hvitt fordi vi ikke trenger fargedata for å finne ansikter:
så ser vi på hver eneste piksel i bildet vårt en om gangen. For hver enkelt piksel vil vi se på pikslene som omgir den direkte:
vårt mål er å finne ut hvor mørkt den nåværende pikselen er i forhold til pikslene som omgir den. Da ønsker vi å tegne en pil som viser i hvilken retning bildet blir mørkere:
hvis du gjentar denne prosessen for hver eneste piksel i bildet, ender du opp med at hver piksel blir erstattet av en pil. Disse pilene kalles gradienter, og de viser strømmen fra lys til mørk over hele bildet:
dette kan virke som en tilfeldig ting å gjøre, men det er en veldig god grunn til å erstatte pikslene med gradienter. Hvis vi analyserer piksler direkte, vil virkelig mørke bilder og virkelig lyse bilder av samme person ha helt forskjellige pikselverdier. Men ved å bare vurdere retningen som lysstyrken endres, vil både virkelig mørke bilder og virkelig lyse bilder ende opp med samme eksakte representasjon. Det gjør problemet mye enklere å løse!
men å lagre gradienten for hver enkelt piksel gir oss altfor mye detalj. Vi ender opp med å savne skogen for trærne. Det ville være bedre om vi bare kunne se den grunnleggende strømmen av lyshet / mørke på et høyere nivå, slik at vi kunne se bildets grunnleggende mønster.
For å gjøre dette, bryter vi opp bildet i små firkanter på 16×16 piksler hver. I hver rute teller vi opp hvor mange gradienter som peker i hver hovedretning(hvor mange peker opp, peker opp til høyre, peker til høyre osv.). Da vil vi erstatte den plassen i bildet med pilen retninger som var den sterkeste.
sluttresultatet er at vi gjør det opprinnelige bildet til en veldig enkel representasjon som fanger den grunnleggende strukturen til et ansikt på en enkel måte:
for å finne ansikter i DETTE HOGBILDET, er alt vi trenger å gjøre å finne den delen av bildet vårt som ser mest ut som et kjent HOGMØNSTER som ble hentet fra en rekke andre treningsflater: