最近在做行人检测,而最流行,也是最老的两种方法就是haar+adaboost 与 hog+SVM。两种我都尝试了,效果并不如想象的好,所以要想有更好的效果,一是要有预处理,二是要有更大量的正负样本。
下面现总结一下自己应用的 haar+Adaboost 进行的行人检测:
我分别训练了两个分类器,训练数据库均来自NICTA(澳大利亚信息与通讯技术研究中心),用其中的2000张做证样本,5000多张做负样本(自己在网上找的)得到第一个分类器;后来因为对于侧身人体检测效果不好,我又从数据库中找到并裁剪了800张侧身正样本(真心费眼睛啊……),负样本同上,从而得到了第二个分类器。调整cvHaarDetectObjects()参数后得到的效果图如(1)(2)所示。
而对于 HOG + SVM,因为要求图片较大,所以能找到的数据库只有MIT和INRIA的能用。所以正样本1511张,负样本5748张,得到的分类器效果如(3)所示。
(1)first classifier(haar): (2)second classifier(haar):(3)third classifier(hog):
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
如上图可见:
第一个分类器对于正面身体检测效果较好,而对于侧身检测较弱,其中一个很重要的原因是我最开始训练的数据集并未经过筛选,所以导致效果一般;
第二个分类器则对于侧身检测效果较好,原因是我精选了800多张侧身正样本,但还不全面,很明显如图8就无法检测出来;
第三个分类器是用HOG特征制作的,不得不承认,hog特征的确十分适用于行人的检测,1511张正样本即可达到很高的hit rate.但随之而来的是其过高的false positive,不准确的检测框以及过长的时间。一直不明白为什么hog+svm总是有很多的false positive,是因为SVM的原因?线性分类器的分类效果一般吧。有人懂吗?
因此,为了达到更高的hit rate与更低的false positive,我将会用二者做一个级联分类器,从而投票决定搜索结果。当然在此之前,我需要更多的正样本去将每一个分类器训练的更精确,鲁棒性更强。但愿实验室给些支持呀……
最后就是效率问题还是没能解决,hog实在是太费时间了,一张小图居然都要几秒,完全达不到实时性,看了一篇paper,说是其中一半的时间都用来resize和搜索框移动。嗯,接下来好好看paper,争取优化hog分类器。