Histogram of Oriented Gradients (HOG) i DLIB
histogrammet för oriented gradients (HOG) är en funktionsbeskrivare som används i datorsyn och bildbehandling för objektdetektering. Tanken bakom HOG är att extrahera funktioner i en vektor och mata in den i en klassificeringsalgoritm som en stödvektormaskin som kommer att bedöma om ett ansikte (eller något objekt du tränar det för att känna igen faktiskt) finns i en region eller inte. I HOG-funktionsbeskrivaren används fördelningen ( histogram ) av riktningar för gradienter ( orienterade gradienter ) som funktioner. Gradienter (X-och y-derivat ) av en bild är användbara eftersom storleken på gradienter är stor runt kanter och hörn ( regioner med abrupta intensitetsförändringar) och vi vet att kanter och hörn packar i mycket mer information om objektform än platta regioner.
i originalpapperet implementerades processen för mänsklig kroppsdetektering, och detekteringskedjan var följande :

att upptäcka ett ansikte från en bild med hog-metoden kräver följande steg: –
- beräkna gradientbilderna
- beräkna HOG
- blockera normalisering
- Mata vektorn till SVM
beräkna gradientbilderna: Det första steget är att beräkna bildens horisontella och vertikala lutningar genom att filtrera bilden med följande kärnor :

här måste inmatningsbilderna vara av samma storlek med ett fast bildförhållande som 64×128, 100 200 eller 128 256 men inte 101×205.


gradientbilden tog bort mycket icke-väsentlig information (t.ex. konstant färgad bakgrund ), men markerade konturer. Ändå kan vi identifiera bilden. Vid varje pixel har lutningen en storlek och en riktning.
beräkna HOG: bilden delas sedan in i 8×8 celler för att erbjuda en kompakt representation och göra vår HOG mer robust mot brus. Sedan beräknar vi en HOG för var och en av dessa celler.

för att uppskatta riktningen för en gradient i en region bygger vi helt enkelt ett histogram bland de 64 värdena för gradientriktningarna (8×8) och deras storlek (ytterligare 64 värden) inuti varje region. Nästa steg är att skapa ett histogram av gradienter i dessa 8-8-celler. Histogrammet innehåller 9 fack som motsvarar vinklarna 0, 20, 40 … 160.
När vi bygger HOG, kommer 3 fall att uppstå:
- vad händer om vinkeln är mindre än 160 kcal och inte halvvägs mellan 2 klasser. Då i sådana fall kommer vinkeln att läggas till i rätt kategori av svin.
- vad händer om vinkeln är mindre än 160 kcal och exakt mellan 2 klasser. Då anser vi i sådana fall ett lika bidrag till de 2 närmaste klasserna och delar upp storleken i 2
- vad händer om vinkeln är större än 160 kcal. Då anser vi i sådana fall att pixeln bidrog proportionellt till 160 kcal och till 0 kg.

i fig. 10 pixeln omgiven i blått har en vinkel (riktning ) på 80 grader och magnitud 2. Så det lägger till 2 till 5: e facket eftersom det följer det första fallet. Gradienten vid pixeln omgiven med rött har en vinkel på 10 grader och magnitud på 4. Eftersom 10 grader är halvvägs mellan 0 och 20 delas rösten av pixeln jämnt i de två facken som följer det andra fallet.

i fig. 11 pixeln med vinkel 165 grader bidrar proportionellt till 0 graders bin och 160 graders bin eftersom det följer det tredje fallet.
HOG ser ut så här för varje 8×8 cell som (fig 12).

Block normalisering : slutligen kan ett 16×16-block appliceras för att normalisera bilden och göra den invariant för belysning. Att tillämpa 16×16-block betyder att vi gör bilden mörkare genom att dela alla pixelvärden med 2, Så gradientstorleken kommer att förändras med hälften och därför ändras histogramvärdena med hälften. Helst vill vi att vår deskriptor ska vara oberoende av belysningsvariationer.
matar vektorn till SVM: ett 16 16-block har 4 histogram som kan sammanfogas för att bilda en 36 x 1-elementvektor. Slutligen sammanfogas alla 36×1-vektorerna till en stor vektor som kommer att vara vår funktionsvektor, där vi kan träna en mjuk SVM och förutsäga ansiktet i en bild.
i Dlib finns en utbildad modell för att upptäcka ansikten, du måste bara skapa ett objekt av den modellen.
så det är slutet på att förutsäga ansikten med HOG med Dlib.
slutsats
det finns alltid en enorm debatt som är bättre för att upptäcka ansikten Haar cascade classifier eller HOG based face detector. Dlib ligger före haar cascade classifier över implementering, hastighet och noggrannhet. Det finns flera fördelar med att använda HOG classifier. Först görs träningen med ett glidande underfönster på bilden så ingen delsampling och parametermanipulation krävs som det är i Haar-klassificeraren. Detta gör dlibs HOG + SVM ansiktsigenkänning lättare att använda och snabbare att träna. Observera att HOG har högre noggrannhet för ansiktsdetektering än Haar cascade classifier. Haar cascade classifier gör mer falsk positiv förutsägelse på ansikten än HOGBASERAD ansiktsdetektor.
Om du vill se noggrannheten hos Haar cascade classifier vs HOG based face detector kan du läsa här.