A basic flow of our face detection algorithm with a sliding window is as follows:
Training
Detecting
Here is the final detection result of our face detector:
As we use non-linear SVM with RBF kernel, we have two parameters, sigma and lumbda, need to be decided. We trained our non-linear SVM with different lumbdas and sigmas with the same training set and testing set to see their performances. The results are shown in figure 1. We can see choosing lumbda = 0.001, sigma = 200 produces the best performance.
![]() |
Figure 1: Results with different lumbdas and sigmas |
The strategy of mining hard negatives we used is as follows:
We set total stage as 2(because it's hard to find 1000 hard negatives after 2 stages) and ran the program. The result is shown in figure 2. We can see that the detector performs slightly better after mining hard negatives.
![]() |
Figure 2: Testing result for each stage |
When only random negatives are chosen as negative data, we test linear SVM and non-linear SVM, both of which are trained with the same training data(1000 positives and 1000 negatives). The performances are similar (both around 0.4).
This result is not surprising because non-linear SVM only works better than linear SVM does when positive data and negative data cannot be easily(linearly) seperated.