0

I have been trying to train image databases to detect faces using Haar cascades. I have made 2 attempts:

1) I have used the following database for positive images: http://robotics.csie.ncku.edu.tw/Databases/FaceDetect_PoseEstimate.htm#Our_Database_ (6660 images) For negative images I have used this database: https://github.com/sonots/tutorial-haartraining/tree/master/data/negatives (3300 images)

I have used this command to train the samples: opencv_createsamples -info info.dat -vec samples2.vec -w 32 -h 24 -num 6660

I have used this command to train the data: opencv_traincascade -data ./classifier3 -vec samples2.vec -bg bg.txt -numPos 6000 -numNeg 12000 -numStages 30 -precalcValBufSize 5120 -precalcIdxBufSize 5120 -numThreads 12 -acceptanceRatioBreakValue 10e-5 -w 32 -h 24 -minHitRate 0.99 -maxFalseAlarmRate 0.5 -mode ALL

The training goes on up to stage 9. Then the acceptanceRatio break value is crossed.(The required acceptanceRatio for the model has been reached to avoid over-fitting of training data. Branch training terminated.)

I don't understand the issue here. I have only used the recommended values for the parameters. I had tried changing the minHitRate to 0.95, yet the result is the same. I can think of some potential reasons:

i) I had used the positive images directly without cropping. But I don't think that should be an issue, as the background is completely plain.

ii) The image database contains faces in different poses. That could lead to complications while training. Is it a good idea to train faces under different poses using the same cascade classifier? Or should I use different classifiers for each pose?

iii) My negative images might be too different compared to the positive images. Is that the case? If yes, what kind of negative images should I be looking for?

I tried testing the cascade.xml file on a few sample images, but nothing is detected at all.

2) Keeping in mind the potential reason i), I used this database already cropped, for positive images: http://conradsanderson.id.au/lfwcrop/ (around 13000 images)

But still the problem persists. This time it trains upto stage 11. In this case I used -numPos as 8000 -numNeg as 20000( increased the ratio to give the training more negative samples), -w as 24 and -h as 24.

Can anyone please guide me here?

  • get harder negative samples or be happy with the current result. Or reduce maxFalse value or acceptanceRatio threshold – Micka Oct 17 '18 at 13:59
  • you should add varying background to your positive images, because with plain background you'll have artificial features which will separate pos and neg very well without any relevance to real objects in real scenes – Micka Oct 17 '18 at 14:04
  • What is the point of having varying background in positive images, when I am eventually going to crop it? – Lakshmi Teja Oct 18 '18 at 14:33
  • Also I can't be happy with my current result, it detects absolutely nothing – Lakshmi Teja Oct 18 '18 at 14:34
  • either you'll have to crop inside of the object, so that there is no background left, or you'll have to present so many different backgrounds that it is as good as impossible that features specialized to your background will be found that separate positive and negative samples well. – Micka Oct 18 '18 at 16:08

0 Answers0