OpenCV - 使用SVM和HOG进行人员检测

时间:2016-01-25 04:38:27

标签: opencv svm

我知道完成此任务所需的步骤:

  1. 收集训练集(正面和负面)。
  2. 提取每个用于训练SVM的图像的hog描述符(当前为' 1类标签为正面,' -1'类标签为负面)。
  3. 将训练好的SVM设置为HOGDescriptor并使用detect / detectMultiscale。
  4. 我已完成上述所有步骤。我只是感到困惑,HOGDescriptor.detect / detectMultiscale会检测哪个类?它只检测正类标签(1)吗?

1 个答案:

答案 0 :(得分:3)

在计算机视觉中,视觉描述符或图像描述符(即HoG)是图像中内容的视觉特征的描述。它们描述了诸如形状,颜色,纹理或运动等基本特征。所以HoG描述符只表征场景 - 在图像中显示,即在街道上行走的行人,你可以在下面看到一个示例HoG描述符(HoG只计算图像局部部分中梯度方向的出现次数):

enter image description here

SVM是一组用于分类,回归和异常值检测的监督学习方法。但最初,SVM是一种用于构建最佳二进制(2类)分类器的技术,因此SVM决定描述符的含义。那么可以说,HoG的输出是SVM的输入,后者的输出是+1或-1。

OpenCV提供了一个隐藏此操作的接口,完整的对象检测可以通过函数调用完成。这是HOGDescriptor::detectMultiScale()所做的,它使用多尺度窗口执行对象检测。一旦声明了cv::HOGDescriptor hog实例,那么SVM分类器的系数也应该通过以下方式完成:

hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());

然后detectMultiScale()执行完整的对象检测(描述符提取和二进制分类在一起)并返回每个候选者的边界框:

std::vector<cv::Rect> found;
hog.detectMultiScale(frame, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2);