Search code examples
opencvhaar-classifiercascade-classifier

OpenCV Cascade Training Fast, Fails: Required leaf false alarm rate achieved. Branch training terminated


I'm generating samples from a single positive image, positive.jpg. There's about 4000 negative filepaths in the bg.txt file. The negative image files are 100x100. The positive.jpg image is 50x50.

opencv_createsamples -img positive.jpg -bg bg.txt -info info/info.lst -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5 -num 1950
opencv_createsamples -info info/info.lst -num 1950 -w 20 -h 20 -vec positives.vec
opencv_traincascade -data data -vec positives.vec -bg bg.txt -numPos 1800 -numNeg 900 -numStages 10 -w 20 -h 20

Here's the output from training:

===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   1800 : 1800
NEG count : acceptanceRatio    900 : 1
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        1|
+----+---------+---------+
|   3| 0.996667| 0.393333|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 0 minutes 14 seconds.

===== TRAINING 1-stage =====
<BEGIN
POS count : consumed   1800 : 1806
NEG count : acceptanceRatio    900 : 0.318923
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        1|
+----+---------+---------+
|   3| 0.997222| 0.216667|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 0 minutes 29 seconds.

===== TRAINING 2-stage =====
<BEGIN
POS count : consumed   1800 : 1811
NEG count : acceptanceRatio    900 : 0.111857
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        1|
+----+---------+---------+
|   3| 0.996667| 0.381111|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 0 minutes 44 seconds.

===== TRAINING 3-stage =====
<BEGIN
POS count : consumed   1800 : 1817
NEG count : acceptanceRatio    900 : 0.0552418
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        1|
+----+---------+---------+
|   3| 0.997778| 0.165556|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 0 minutes 59 seconds.

===== TRAINING 4-stage =====
<BEGIN
POS count : consumed   1800 : 1821
NEG count : acceptanceRatio    900 : 0.00951797
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        1|
+----+---------+---------+
|   3| 0.997222| 0.482222|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 1 minutes 15 seconds.

===== TRAINING 5-stage =====
<BEGIN
POS count : consumed   1800 : 1826
NEG count : acceptanceRatio    900 : 0.00523308
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1| 0.996667| 0.435556|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 1 minutes 23 seconds.

===== TRAINING 6-stage =====
<BEGIN
POS count : consumed   1800 : 1832
NEG count : acceptanceRatio    900 : 0.00389186
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2| 0.997778| 0.493333|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 1 minutes 35 seconds.

===== TRAINING 7-stage =====
<BEGIN
POS count : consumed   1800 : 1836
NEG count : acceptanceRatio    900 : 0.00280947
Precalculation time: 4
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1| 0.998333| 0.433333|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 1 minutes 44 seconds.

===== TRAINING 8-stage =====
<BEGIN
POS count : consumed   1800 : 1839
NEG count : acceptanceRatio    4 : 0.00078125
Required leaf false alarm rate achieved. Branch training terminated.

Solution

  • that means your classifier already has a false alarm rate of less than 0.5^10 after 8 stages which was your chosen aim => training was finished successfully (0.00078125 < 0.0009765625)

    But probably there just aren't enough negative samples present. Try to get more/different samples. Only 4 negatives could be collected in the 9th stage.