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

OpenCV-使用SVM和HOG进行人员检测,opencv,svm,Opencv,Svm,我知道完成此任务所需的步骤: 收集训练集(正数集和负数集) 提取用于训练SVM的每个图像的hog描述符(当前正面为“1”类标签,反面为“-1”类标签) 将训练好的SVM设置为HOGDescriptor,并使用detect/detectMultiscale 我已经完成了上面的所有步骤。我只是很困惑,HOGDescriptor.detect/detectMultiscale检测哪个类?它是否仅检测阳性类别标签(1)?在计算机视觉中,视觉描述符或图像描述符(即HoG)是对图像中内容的视觉特征的描述。它

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

  • 收集训练集(正数集和负数集)
  • 提取用于训练SVM的每个图像的hog描述符(当前正面为“1”类标签,反面为“-1”类标签)
  • 将训练好的SVM设置为HOGDescriptor,并使用detect/detectMultiscale

  • 我已经完成了上面的所有步骤。我只是很困惑,HOGDescriptor.detect/detectMultiscale检测哪个类?它是否仅检测阳性类别标签(1)?

    在计算机视觉中,视觉描述符或图像描述符(即HoG)是对图像中内容的视觉特征的描述。它们描述了形状、颜色、纹理或运动等基本特征。因此,HoG描述符仅描述场景-如图所示,即在街道上行走的行人,您可以看到下面的示例HoG描述符(HoG仅统计图像局部区域中出现的梯度方向):

    支持向量机是一套用于分类、回归和异常检测的有监督学习方法。但最初,支持向量机是一种构建最优二元(2类)分类器的技术,因此支持向量机决定描述符的含义。也就是说,HoG的输出是支持向量机的输入,支持向量机的输出是+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);
    
    找到了std::vector; hog.detectMultiScale(帧,找到,0,cv::Size(8,8),cv::Size(32,32),1.05,2);
    感谢您的回复。在我的例子中,我想使用一个定制的SVM来检测人(不是默认的)。我已经通过提取正面和负面图像的hog描述符来训练线性支持向量机,并且我还能够通过使用hog.setsvmdeter(SVM.getSupportVectors())来设置hog以使用经过训练的支持向量机。使我困惑的是探测器的多重刻度。它是否检测到消极类(无人)或积极类(人)?抱歉,我对opencv和计算机视觉还不熟悉。
    detectMultiScale
    只返回正值,但它们可以是真值(正确识别为人的对象)或假值(错误识别为人的车辆、树木等对象)。我有一个关于使用自定义SVM的问题,具有正面图像的数据集应仅包含人类或具有背景的人类?我读了一些其他帖子,一些帖子告诉他们需要背景,还有一些帖子说我必须在这之前裁剪图片,这可能会帮助你: