Сначала я попробовал детектор людей по умолчанию в библиотеке OpenCV.
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
hog.detectMultiScale(img, found, 0, Size(8,8), Size(0,0), 1.05, 2);
Хотя он дает положительные совпадения в помещении с веб-камерой, они очень редки. Поэтому я обучил дескриптор негативными и позитивными изображениями набора данных INRIA, но на этот раз ложных срабатываний слишком много. Я не пытаюсь опустить ложные совпадения до нуля, этого было бы достаточно, чтобы снизить их до разумного уровня. Что я должен делать?
Другая проблема заключается в том, что я думаю, что люди в моих образцах видео слишком далеко, чтобы их можно было легко различить как человеческие изображения. Я пытался уменьшить размер ячейки, но не уверен, что это правильный подход. Что можно сделать по этому поводу?
Изображения будут полезны для вас, но из-за репутации я не могу их публиковать.
Спасибо
Проверьте opencv [doc]: http://docs.opencv.org/modules/gpu/doc/object_detection.html#gpu-hogdescriptor-detectmultiscale Кажется, вы неправильно используете интерфейс.
Вы делали оценку вашего обученного SVM и также наблюдали там плохой уровень обнаружения? Если да, вам нужно немного поиграть с параметрами тренировки или входными данными. Насколько я помню, набор INRIA включал в себя изображения людей и не людей, но только положительные участки были точно определены. Когда я тренировал классификатор свиней, выбор отрицательных образцов оказал большое влияние. Ох, а ты использовал бустинг? Повышение IIRC обеспечило значительный прирост производительности в оригинальной статье.
Других решений пока нет …