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!
- 50 positive and 140 negative samples --> 20 stages reached
- 100 positive and 280 negative samples --> 21 stages reached
- 250 positive and 700 negative samples --> 17 stages reached
- 500 positive and 1400 negative samples --> 35 stages reached
- 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?