Подтвердить что ты не робот

Повышение точности обнаружения людей с открытым кодом

Я работаю над проектом. Часть проекта состоит в том, чтобы интегрировать детектор HOG людей OpenCV с потоковой передачей камеры.

В настоящее время он работает с камерой и основным детектором HOG (CPP detectMultiScale → http://docs.opencv.org/modules/gpu/doc/object_detection.html). Но не работают очень хорошо... Обнаружения очень шумные, и алгоритм не очень точно...

Почему?

Мое изображение камеры составляет 640 x 480 пикселей.

Код фрагмента, который я использую, это:

std::vector<cv::Rect> found, found_filtered;
cv::HOGDescriptor hog;
hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
hog.detectMultiScale(image, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2);

Почему не работает должным образом? Какая потребность в повышении точности? Нужен ли определенный размер изображения?

PS: Вы знаете какой-то точный алгоритм обнаружения людей, быстрее и развитый в cpp??

4b9b3361

Ответ 1

Размер детектора людей по умолчанию - 64x128, что означает, что люди, которых вы хотите обнаружить, должны быть как минимум 64x128. Для разрешения вашей камеры это означало бы, что человеку нужно было бы заняться некоторым пространством, прежде чем его правильно обнаружить.

В зависимости от вашей конкретной ситуации вы можете попробовать свои силы при обучении собственного дескриптора HOG с меньшим размером. Вы можете посмотреть этот ответ и ссылка на библиотеку если вы хотите обучить собственный дескриптор HOG.

Для параметров:

win_stride: Учитывая, что ваше входное изображение имеет размер 640 x 480, а defaultpeopleDetector имеет размер окна 64x128, вы можете поместить окно обнаружения HOG (окно 64x128) несколько раз во входное изображение. Winstride сообщает HOG, чтобы каждый раз переводить окно обнаружения. Как это работает: Hog помещает окно обнаружения в верхнем левом углу вашего входного изображения. и каждый раз перемещает окно обнаружения с помощью win_stride.

Как это (маленький win_stride): enter image description here

или вроде этого (большой win_stride) enter image description here

Маленькая побелка должна повысить точность, но уменьшает преформацию, а наоборот -

обивка Заполнение добавляет определенное количество дополнительных пикселей с каждой стороны входного изображения. Таким образом, окно обнаружения помещается немного за входное изображение. Это из-за этого дополнения, который HOG может обнаружить людей, которые очень близки к краю входного изображения.

group_threshold Порог group_treshold определяет значение, когда обнаруженные части должны быть помещены в группу. Низкое значение не дает группировки результатов, более высокое значение обеспечивает группировку результатов, если количество обнаруженных ошибок обнаружено внутри окон обнаружения. (по моему опыту, мне никогда не нужно было менять значение по умолчанию)

Надеюсь, это немного для вас. Я работал с HOG в течение последних нескольких недель и читал много статей, но я потерял некоторые ссылки, поэтому я не могу связать вам страницы, на которых эта информация поступает, извините.