HOG training and detection improvement

asked 2015-03-10 17:31:45 -0500

Burke gravatar image

Hi all!

I'm working on a research project, it involves swimmers in a swimming-pool. The first objective is to detect the swimmers and not the waves, reflections or other stuff in the swimming pool like balls and other toys. I figured a HOG-detector could do the job but this seems to be more difficult than expected. I've captured a bunch of mostly shoulders and heads of the swimmers as positive images. For negative images i use a wide variety of images including the empty swimming-pool. The camera used is pretty high up so the swimmers are fairly small in the pictures, a head covers roughly 36-44 pixels depending on the angle between camera and head.

For the training i've tried several resolutions for the HOG, color or grayscaled images, normalized colors, gamma filter, blurr, sharpen and combinations of these. For finding a good, or best, value for C i've used the same method as the LibSVM's grid.py script does but without the gamma search because it is not used by linear kernels.

The problem i seem to be having are the false positives. When testing, the amount of false positives is roughly 30% although the prediction results on the training-data are 100% accurate and cross-validation is also close to or exactly 100% accurate. I've tried smaller and bigger amounts of positives and negatives, 660 up to 12K positives and 1:1 up to 82K negatives. When not using a 1:1 positive/negative dataset the weights are set to match the ratio.

I've created some fair to good descriptors before so i know how to cook but i can't seem to get this recipe right.

Are there ways i may have missed to get these results any better? Is there a way to make the HOG more color-sensitive?

Using LibLinear for the training and HOG components from Mitov's libraries which are OpenCV based.

Regards, Burke

edit retag flag offensive close merge delete

Comments

Hi ! I tryed to train HOG and Viola Jones for parts of human bodys, and didn't get very good results. My first try was spleat all objects to big groups like hand, head, leg. But then I understand that HOG can't generalize so differently objects. I broke each group to 2-4 grops witch have objects in same pose and got better results :) I used dlib library, in this lib you can see trained detector like a picture (g) of vectors, maybe it will help you to understand what you have after you trained your classifire.

fedor gravatar imagefedor ( 2015-03-16 04:55:56 -0500 )edit

I'll check it out, thank you!

Burke gravatar imageBurke ( 2015-03-16 20:15:19 -0500 )edit