Memememe #selfie (5 / 7 steg)
Steg 5: Haar Cascades--utbildning kaskad
Det är där vi tränar en Haar Cascade klassificerare en annan OpenCV-verktyget. Beväpnad med ca 1000 negativa bilder och 2000 positiva bilder, kan vi köra detta kommando för att börja träna:
opencv_traincascade -data outputDirectory opencv_traincascade -data outputDirectory -vec cropped.vec \
-bg negativeImageDirectory/negatives.txt \
-numPos 1000 -numNeg 600 -numStages 20 \
-precalcValBufSize 1024 -precalcIdxBufSize 1024 \
-featureType HAAR \
-minHitRate 0.995 -maxFalseAlarmRate 0.5 \
-w 48 -h 48</p>
De flesta av dessa är standardvärden, ett undantag är ökar minnesanvändningen från 512Mb till 2Gb. Även en annan sak att notera, - numPos och -numNeg bör vara lägre än det totala antalet bilder som faktiskt finns och beskrivs i tjänstbeskrivningen/filer. Vi upptäckte detta genom trial and error, men det verkar som om verktyget opencv_traincascade långsamt ökar antalet "konsumeras" bilder som den går igenom utbildning arrangerar, för att möta de - minHitRate och -maxFalseAlarmRate, och när det inte finns tillräckligt många bilder att konsumera, det kraschar. Till exempel vi specificerat - numPos 1000 för våra körningar, men av scenen 10, det "konsumerar" 1030 bilder.
Om allt går bra, ska en cascade.xml-fil visas i outputDirectory efter ett par timmar (eller dagar).
Vi skrev ett skript som automatiserar de flesta av denna process.
Med dessa inställningar tog det vår utbildning ca 24 timmar att slutföra. Väntan på 20 etapper till slut, kan kommandot opencv_traincascade köras parallellt för att skapa en partiell cascade fil från de som redan är klar. Till exempel kommer att följande kommando generera en kaskad från de första 10 klassificerare i utdatakatalogen:
opencv_traincascade -data outputDirectory opencv_traincascade -data outputDirectory -vec cropped.vec \
-bg negativeImageDirectory/negatives.txt \
-numPos 1000 -numNeg 600 -numStages 10 \
-precalcValBufSize 1024 -precalcIdxBufSize 1024 \
-featureType HAAR \
-minHitRate 0.995 -maxFalseAlarmRate 0.5 \
-w 48 -h 48</p>
Det är i grunden samma kommando, men med - numStages in till 10.