Ask Your Question

Revision history [back]

traincascade detections with output score for precision recall curves

Hello everyone,

Like the title says I am performing cascade classifier classifications. On a given dataset I trained a set of models. My goal is to determine the influence of the amount of training data on the classifier output.

I have 5 models trained. All models were trained either until 35 stages were reached OR if the returned acceptanceRatio on the negative samples is lower than 10e-5 (because I want to avoid overfitting on the training data). So far so good!

  1. 50 positive and 140 negative samples --> 20 stages reached
  2. 100 positive and 280 negative samples --> 21 stages reached
  3. 250 positive and 700 negative samples --> 17 stages reached
  4. 500 positive and 1400 negative samples --> 35 stages reached
  5. 670 positive and 2000 negative samples ---> 35 stages reached

Then I use those trained models to perform detections on a validation/test set with the following command

vector<Rect> objects;
vector<int> rejectLevels;
vector<double> scores;
cascade.detectMultiScale( frame_gray, objects, rejectLevels, scores, 1.01, 1, 0, Size(96, 128), Size(118, 157), true);

Which actually also works since it starts detecting perfectly fine. Now in the past I have always used the returned double values to threshold my detection and to create different positions in the precision recall curves. This is a somewhat good measure to get the certainty of a detection as output score (which has been used by many OpenCV users). But here comes the problem now.

For model 1 and 2 the output values of the scores are ONLY 1 or -1, while the values of model 3 4 and 5 simply return a double value indicating the certainty.

Anyone has an idea what is going wrong here?