Opencv Hog描述符是否在peopledetect.cpp中构建?

Opencv Hog描述符是否在peopledetect.cpp中构建?,opencv,svm,object-detection,Opencv,Svm,Object Detection,我对hog还不熟悉,我正在使用opencv2.4.4和visual studio 2010,我正在运行包中的示例peopledetect.cpp及其编译和运行,但我想详细了解源代码。在peopledetect.cpp中,是否为peopledetection构建/已经训练了hog描述符3780个向量输入svm分类器?当我尝试调试peopledetect.cpp时,我只能找到HOGDescriptor创建了hog描述符和检测器,我基本上不理解这个API的功能,因为我看到它没有经过hog处理的步骤,它

我对hog还不熟悉,我正在使用opencv2.4.4和visual studio 2010,我正在运行包中的示例peopledetect.cpp及其编译和运行,但我想详细了解源代码。在peopledetect.cpp中,是否为peopledetection构建/已经训练了hog描述符3780个向量输入svm分类器?当我尝试调试peopledetect.cpp时,我只能找到HOGDescriptor创建了hog描述符和检测器,我基本上不理解这个API的功能,因为我看到它没有经过hog处理的步骤,它将已经训练好的向量加载到svm分类器来检测人/没有人,我错了吗?。因为没有关于这方面的文件


任何人都可以简要介绍一下这一点。

opencv中的人员检测算法的实现是基于HOG描述符作为特征,SVM作为分类器

一,。训练数据库将正样本作为人,将负样本作为非人,用于学习SVM参数,并计算和存储支持向量。交叉验证也被用来优化软边界参数C和核参数,它可以是线性核

二,。为了在测试视频数据上检测人,peopledetect.cpp加载预先学习的SVM,计算不同位置和尺度上的HOG描述符,然后合并具有二进制SVM Classifier高检测分数输出的窗口


这是一个很好的inria开始。

opencv中的人员检测算法的实现基于HOG描述符作为特征,SVM作为分类器

一,。训练数据库将正样本作为人,将负样本作为非人,用于学习SVM参数,并计算和存储支持向量。交叉验证也被用来优化软边界参数C和核参数,它可以是线性核

二,。为了在测试视频数据上检测人,peopledetect.cpp加载预先学习的SVM,计算不同位置和尺度上的HOG描述符,然后合并具有二进制SVM Classifier高检测分数输出的窗口


这里有一个很好的inria开始。

我从不同的论文中了解到,使用hog的特征提取是使用几个正片和负片图像进行的,这些提取的特征被输入线性SVM进行训练,因此peopledetect.cpp使用这个训练过的线性SVM样本,所以这个特征提取过程不是由peopledetect.cpp完成的,即HOGDescriptor::getDefaultPeopleDetector由为人员检测而训练的分类器的系数组成。从hog detection/Window64x128提取的特征给出了总长度为37804个单元x 9个存储箱x 7 x 15个块=3780个特征。然后利用这些特征训练线性SVM分类器。如果对1000+个阴性和阳性样本进行相同的特征提取,则必须有数百万个特征?我们如何获得这些共同效率


但是由于使用的检测窗口大小不同,已知HOG描述符包含冗余信息。因此,当SVM分类器将一个区域分类为“行人”时,许多不同尺度的行人窗口往往与该区域相关联。peopledetect.cpp主要做的是hog.detectMultiScaleimg,found,0,Size8,8,Size32,32,1.05,2;检测窗口在所有位置和比例上扫描整个图像,并在输出金字塔上运行常规非最大抑制以检测对象实例

我从不同的论文中了解到,使用hog的特征提取是使用几个正片和负片图像进行的,这些提取出来的特征被输入到线性支持向量机进行训练,因此peopledetect.cpp使用这个训练过的线性支持向量机样本,所以这个特征提取过程不是由peopledetect.cpp完成的,即HOGDescriptor::getDefaultPeopleDetector由为人员检测而训练的分类器的系数组成。从hog detection/Window64x128提取的特征给出了总长度为37804个单元x 9个存储箱x 7 x 15个块=3780个特征。然后利用这些特征训练线性SVM分类器。如果对1000+个阴性和阳性样本进行相同的特征提取,则必须有数百万个特征?我们如何获得这些共同效率

但是由于使用的检测窗口大小不同,已知HOG描述符包含冗余信息。因此,当SVM分类器将一个区域分类为“行人”时,许多不同尺度的行人窗口往往与该区域相关联。peopledetect.cpp主要做的是hog.detectMultiScaleimg,found,0,Size8,8,Size32,32,1.05,2;检测窗口在所有位置和比例上扫描整个图像,并在输出金字塔上运行常规非最大抑制以检测对象实例

将SVM组训练到f ind正样本和负样本之间最大裕度的参数

如果对1000+个阴性和阳性样本进行相同的特征提取,则必须有数百万个特征

对。这些系数是从训练数据库中提取的。你没有。SVM只存储足以描述余量的支持向量。参见线性支持向量机的例子

许多不同规模的行人窗通常与该区域相关


对。正在应用合并函数。不同的方法,如分组矩形。。是否可用?请参阅和接受参数,参数用于检测多尺度…

训练SVM组以查找正样本和负样本之间的最大裕度参数

如果对1000+个阴性和阳性样本进行相同的特征提取,则必须有数百万个特征

对。这些系数是从训练数据库中提取的。你没有。SVM只存储足以描述余量的支持向量。参见线性支持向量机的例子

许多不同规模的行人窗通常与该区域相关


对。正在应用合并函数。不同的方法,如分组矩形。。如果有可用的参数,请查看并接受提供给detectMultiScale的参数…

为了获得更清晰的答案,peopledetect.cpp将完成所有步骤。 挖得越深,我就越清楚。基本上,如果调试peopledetect.cpp,则需要完成以下步骤

最初将图像分为几个尺度,尺度01.05是检测窗口增大的系数。对于图像的每个尺度,从窗口中提取特征并运行分类器窗口,如上所述,它遵循尺度空间金字塔方法。所以它的计算过程相当大,非常昂贵,所以opencv团队尝试对每个尺度进行并行化。 之前我很困惑,为什么我不能调试/完成这些步骤,这个并行线程的范围是0,intlevelScale.size,HOGInvoker创建了几个线程,每个线程在每个规模上工作,这取决于有多少线程或创建了类似的东西。 由于这个原因,我无法调试,我所做的是冻结所有线程,只调试主线程。对于不同比例的图像处理步骤如下所示


这里的peopledetect.cpp hog和分类器窗口是一种组合。在一个窗口64x128中,特征提取和运行分类器都会发生。之后,对图像的每个比例执行此操作。有许多不同比例的行人窗通常与该区域相关,这是使用grouprectangle函数进行分组的

为了得到更清楚的答案,peopledetect.cpp将完成所有步骤。 挖得越深,我就越清楚。基本上,如果调试peopledetect.cpp,则需要完成以下步骤

最初将图像分为几个尺度,尺度01.05是检测窗口增大的系数。对于图像的每个尺度,从窗口中提取特征并运行分类器窗口,如上所述,它遵循尺度空间金字塔方法。所以它的计算过程相当大,非常昂贵,所以opencv团队尝试对每个尺度进行并行化。 之前我很困惑,为什么我不能调试/完成这些步骤,这个并行线程的范围是0,intlevelScale.size,HOGInvoker创建了几个线程,每个线程在每个规模上工作,这取决于有多少线程或创建了类似的东西。 由于这个原因,我无法调试,我所做的是冻结所有线程,只调试主线程。对于不同比例的图像处理步骤如下所示


这里的peopledetect.cpp hog和分类器窗口是一种组合。在一个窗口64x128中,特征提取和运行分类器都会发生。之后,对图像的每个比例执行此操作。有许多不同比例的行人窗通常与该区域相关,这是使用grouprectangle功能分组的

+1很好的答案。我想补充的是,有一些代码可以构建一个HOG分类器@home,比如@Eric我读了你的答案好几次,但都不明白,但在阅读了几篇论文之后,我想我已经更清楚地理解了peopledetect.cpp,如果我在下面的解释中出错,请纠正我。问题是sample peopledetect.cpp它是否会按照这里的图示一步一步地进行处理。请参阅下面的解释。+1个很好的答案。我想补充的是,有一些代码可以构建一个HOG分类器@home,比如@Eric我读了你的答案好几次,但都不明白,但在阅读了几篇论文之后,我想我已经更清楚地理解了peopledetect.cpp,如果我在下面的解释中出错,请纠正我。问题是sample peopledetect.cpp它是否会按照这里的图示一步一步地进行处理。请参阅下面的解释。非常感谢您的洞察力。我仍然对这个问题感到困惑
整个算法。1peopledetect.cpp它是否经过一步一步的处理?因为我在调试时找不到步骤。2Is hog.detectMultiScale是一个探测器窗口,它扫描图像,是否在窗口上提取特征,并在所有位置运行窗口分类器?3是否遵循比例空间金字塔法?peopledetect.cpp几乎没有文档记录,这使得理解源代码变得非常复杂。它使用积分图像或缓冲来计算每个窗口的功能,以避免计算相同像素的几倍。有关定向渐变的直方图,请参见wiki。然后应用支持向量机进行预测。我不知道是否使用了比例空间金字塔。您应该更深入地了解openCV源代码。感谢Eric的输入。非常感谢您的洞察力。我仍然对整个算法感到困惑。1peopledetect.cpp它是否经过一步一步的处理?因为我在调试时找不到步骤。2Is hog.detectMultiScale是一个探测器窗口,它扫描图像,是否在窗口上提取特征,并在所有位置运行窗口分类器?3是否遵循比例空间金字塔法?peopledetect.cpp几乎没有文档记录,这使得理解源代码变得非常复杂。它使用积分图像或缓冲来计算每个窗口的功能,以避免计算相同像素的几倍。有关定向渐变的直方图,请参见wiki。然后应用支持向量机进行预测。我不知道是否使用了比例空间金字塔。您应该更深入地了解openCV源代码。谢谢您的输入。