Paso 5: Haar cascadas: la cascada de formación
Es donde entrenamos un clasificador de cascada de Haar usando otra utilidad de OpenCV. Armados con imágenes negativas alrededor de 1000 y 2000 imágenes positivas, podemos ejecutar este comando para iniciar la capacitación:
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>
La mayoría de estos son los valores por defecto, una excepción notable es el aumento de uso de memoria de 512Mb a 2Gb. También, otra cosa a la nota, - numPos y - numNeg debe ser menor que el número total de imágenes realmente disponibles y descritos en los archivos de Descripción/colección. Nos enteramos de esto por ensayo y error, pero parece que la utilidad de opencv_traincascade poco a poco aumenta el número de imágenes "consumido" como pasa a través de las etapas de formación, con el fin de cumplir con los - minHitRate y - maxFalseAlarmRate, y cuando no hay suficientes imágenes para consumir, se cuelga. Por ejemplo, hemos especificado - numPos 1000 para nuestras carreras, pero por etapa 10, "consumía" 1030 imágenes.
Si todo va bien, un archivo de cascade.xml debe aparecer en la outputDirectory después de un par de horas (o días).
Escribimos un script que automatiza la mayor parte de este proceso.
Con estos ajustes, tomó nuestra formación cerca de 24 horas completar. Espera de las etapas de 20 hasta el final, el mismo comando de opencv_traincascade se puede ejecutar en paralelo para crear un archivo de cascada parcial de las etapas que ya están completas. Por ejemplo, el siguiente comando genera una cascada de las primeras 10 etapas de clasificadores en el directorio de salida:
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>
Básicamente es el mismo comando, pero con - numStages fijado a 10.