提高准确性:OpenCV HOG 人体检测器

14

我正在参与一个项目,其中一部分是将OpenCV的HOG人体检测器与相机流集成。

目前相机和基本的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);

为什么不能正常工作?需要改进精度的是什么?是否需要某些特定的图像尺寸?

附注:您是否了解一些快速且使用cpp开发的精准人员检测算法?


图像中的人物至少应具有HOG描述符的大小(稍小即可),只有更大的人物才能被detectMultiScale找到(据我所知)。您不能期望对于这种一般的“对象”,HOG检测的准确率接近100%,但在流中,您应该至少检测到每个真实的人。您可以尝试跟踪这些人并验证/否认先前检测到的人员。 - Micka
谢谢你的回答,Micka! 你说:“至少是HOG描述符的大小”...但是这个大小是多少呢? 你知道其他可能性吗?还是只有“getDefaultPeopleDetector”? 非常感谢你!! - Ricardo
这个网站可能会对您有所帮助:http://www.geocities.ws/talh_davidc/ - SomethingSomething
1个回答

36
默认的人体检测器大小为64x128,这意味着您想要检测的人体至少需要达到64x128。对于您的相机分辨率来说,这意味着一个人必须占据相当大的空间才能被正确检测到。
根据您特定的情况,您可以尝试训练自己的HOG描述符,使用更小的大小。如果您想要训练自己的HOG描述符,可以参考此答案引用库
对于参数:
win_stride: 假设您的输入图像大小为640 x 480,并且默认的peopleDetector具有64x128的窗口大小,您可以在输入图像中多次适应HOG检测窗口(64x128窗口)。 winstride告诉HOG每次移动检测窗口的一定量。 工作原理: Hog将检测窗口放置在输入图像的左上角。 然后每次移动检测窗口win_stride的距离。

像这样(小的win_stride): enter image description here

或者像这样(大的win_stride) enter image description here

较小的winstride应该提高准确性,但会降低性能,反之亦然。

填充 填充在输入图像的每个边缘添加一定数量的额外像素。这样检测窗口就会放置在输入图像的外部一点。正是由于这种填充,HOG可以检测到非常靠近输入图像边缘的人。

group_threshold group_treshold确定一个值,用于将检测到的部分放置在一组中。 低值不提供结果分组,较高的值在检测窗口内发现阈值的数量时提供结果分组。(根据我的经验,我从未需要更改默认值)

希望这对您有些意义。 我过去几周一直在使用HOG,并阅读了很多论文,但我丢失了一些参考资料,因此无法链接到这些信息来源的页面,非常抱歉。


1
您可以调整(增大)图像以找到更小的人。 - Micka
非常感谢您的回答,Timmynator0! 您是如何知道这个的?您是否了解一些关于该算法及其参数的文档? 现在我对训练自己的HOG描述符不感兴趣。 非常感谢您! :) - Ricardo
@Micka,难道图像尺寸增加不会导致性能变差吗?有没有捕捉更小的人而不失去性能并避免训练模型的解决方案?我们可以调整哪些参数或类似的东西吗? - BC1554
@Micka 是的,我可以将图片的大小增加2倍,并且我可以捕捉到之前高度为56像素的人,但我的性能会变慢,而我不想这样。我让Hog算法在视频上运行,并且我想保持质量。这就是问题所在! - BC1554
预训练的HOG人体SVM分类器已经学会了一个人在128x64窗口中的样子。如果你想要其他的东西,你需要训练其他的东西。在OpenCV中通过迭代地缩小图像来解决检测更大的人的问题。手动放大图像可以解决检测较小人的问题(这是微小的未记录技巧,从理解HOG窗口机制可见)。就是这样。 - Micka
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接