通过 HOG 描述符和 SVM 分类器识别图像中的人表现不佳

数据挖掘 Python 计算机视觉 物体识别
2021-10-08 12:24:34

我正在使用 HOG 描述符和 SVM 分类器来识别图片中的人。我正在为 OpenCV 使用 Python 包装器。我使用了pymagesearch的优秀教程,它解释了算法的作用,并提供了有关如何设置detectMultiScale方法参数的提示。

具体来说,我做

# initialize the HOG descriptor
hog = cv2.HOGDescriptor()

# Set the support vector machine to be pre-trained for people detection
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

# Detect people in the image
(rects, weights) = hog.detectMultiScale(image,
                                        winStride=(4, 4),
                                        padding=(8, 8),
                                        scale=1.05)

根据教程本身的说明,根据对准确性和性能的微调来选择参数。

我的问题是,这种方法似乎是目前根据文献(原始论文的日期为 2005 年)在图片中识别人类的最佳方法,但在我的图像上似乎表现不佳。我有包含衣服的图像,无论是有模特还是没有模特,我正在尝试这种方法来识别那些有模特的人。在我手动扫描以标记它们是否包含模型的 300 张图像的子集上,该方法有 30% 的时间失败。

这些是一些图像作为示例。

在这里它检测到一个失踪的人:

在这里它没有得到完整的人类:

在这里它根本不认识它:

我知道探测器适用于直立的人。他们也应该是全图的吗?我的图像包括半身像,没有头或没有脚的人物。

在此之前,我尝试过基于 Haar 特征的级联分类器来识别图像中的人脸,并且在同一组图像上的准确率已经达到 90%,因此我正在尝试对此进行改进。另外,我有兴趣了解为什么事情在这里不起作用。

1个回答

您正在使用 opencv 为您提供的训练集,它与您使用的图像类型不对应。您使用的数据来自getDefaultPeopleDetector默认检测器使用的图像类型是许多人的照片,而不是来自时尚电子商务的女模特。

如果你想区分模特和服装,你可以尝试用 HOG 或其他特征训练你自己的分类器。

您可以采取的另一条路径是检测是否有人脸。您可以为此使用 haar 级联。