我正在开展与人员检测相关的项目。我成功实现了基于HOG SVM的分类器(带有libSVM)和级联分类器(带有opencv)。 svm分类器工作得很好,我测试了很多视频,它正确地检测到了一些误报和一些假阴性的人;这里的问题是计算时间:在整个图像上接近1.2-1.3秒,在前景补丁上0.2-0.4秒;因为我正在开发一个必须能够在近乎实时的环境中工作的项目,所以我切换到了级联分类器(以减少计算时间)。 所以我用opencv(opencv_traincascade)训练了许多不同的级联分类器。输出在计算时间方面是很好的(在整个图像上0.2-0.3秒,只在前景上发射时少得多),所以我实现了目标,比方说。这里的问题是检测的质量:我得到了很多误报和很多假阴性。由于两个方法之间的唯一区别是opencv中使用的基本分类器(决策树或决策树桩,据我所知,无论如何都没有SVM),所以我开始认为我的问题可以是基础分类器(在某种程度上,猪的功能最好用超平面分隔我猜)。
当然,libsvm和Opencv中使用的数据集完全相同,无论是用于训练还是用于测试......为了完整起见,我使用了近9,000个正样本和近3万个负样本。
这是我的两个问题:
一如既往地谢谢你!
马哥。
答案 0 :(得分:1)
原则上弱分类器可以是任何东西,但Adaboost相关方法的优势在于它们能够从简单的分类器中获得良好的结果(由于某种原因,它们被称为“弱”)。
使用SVN和Adaboost级联是一个矛盾,因为前者不需要在这样的框架中使用:它能够自己完成它的工作,后者很快就因为它利用了弱分类器。
此外,我不知道有任何关于它的研究,OpenCv不支持它:你必须自己编写代码。这是一项艰巨的任务,可能你不会得到任何有趣的结果
无论如何,如果您认为HOG功能更适合您的任务,OpenCv的traincascade可以选择它,除了Haar和Lbp。
至于你的第二个问题,我不确定,但相信答案是否定的
我的建议是:尝试从traincascade获得最大的收益,例如尝试增加你可以使用的样本数量并比较结果。
答案 1 :(得分:0)
这paper非常好。它只是说如果你使用较少的样本来训练SVM,可以将SVM视为弱分类器(假设不到训练集的一半)。权重越高,“弱SVM”训练的机会就越大。
遗憾的是,源代码并未广泛使用。如果你想要一个快速原型,使用python scikit学习,看看你是否可以在修改opencv之前得到理想的结果。