SVM VS AdaBoost 构造分类器用于物体检测

来源:互联网 发布:我是大美人 淘宝 编辑:程序博客网 时间:2024/05/17 09:09
SVM VS AdaBoost 用于物体检测 - bingloveu - bingle冰糕

 最近,在做一些关于物体检测的东西,其中要用到分类器。现在,常用的分类器有两大类:AdaBoost SVM.由于刚刚接触,概念上勉强了解,做起来有些吃力。幸好,实验室的师兄做过类似的工作,赶紧请教,终于有了新的理解和认识,做一简单总结。

首先,要清楚整个detection task 流程框架

第一步,对待检测图片进行合理的表述,这一步即特征表达的问题。需要用一向量(特征向量)表示图像,这其中就涉及特征选择的问题了,feature detector &feature descriptor 前面一阵子一直在研究,所以这一步我可以轻松应对。

第二步,构造具体的分类器。先在网上下载一些数据集,用AdaBoost SVM训练完后得到一个具体问题的分类器。

第三步,利用得到的分类器,进行物体检测。

补充一点,关于训练集的问题。一般的,训练的样本,这里一般是图片,其大小往往很小。例如,是人脸的样本,你会看到用到的样本都是2424pixel,因为只有这样才能在待检测图像中进行窗口滑动检测。而且,尽量是的object占据图片的绝大部分,当然,也不是说所占的百分比越接近1越好,有人做过分析,有时增加一定的背景反而得到的训练器性能更好。

其次,总结一下SVM AdaBoost 用于物体检测的过程最大的区别:

SVM检测窗大小是固定的,要对test图像进行尺度缩放,在不同的尺度下滑动窗口,检测目标物体,若找到,标记检测box。比如说,按照Navneet Nalal 所说的HOG用于人的检测。你在训练的时候,用的训练样本大小为64*128,那么你要用一个3780维的特征向量表示它。那你用SVM得到的训练器会得到3781个系数(包括不要忘了那个b)。检测人的时候,检测窗始终不变,保持64*128,你可以改变待检测图的大小(缩放)。

   AdaBoost:为了增加检测速度,待检测图大小是不变的(对检测图像进行缩放比较耗时),而是改变检测窗的大小(检测窗口一般都很小)。这里有一点还不是很清楚:是不是最终的级联分类器结构是这样的:每一级的分类器检测窗口大小是逐级增加的,这样改变检测窗的大小才是可行的,要不然,分类器咋工作呢?要不,就是AdaBoost可以针对不同size的样本进行训练...还需进一步研究啊...

PS:关于AdaBoost的检测窗口可以改变,又问了一下师兄,总算理解又深了一步:是这样的,这与Haar特征的计算有关,AdaBoost训练好的分类器在检测目标时,每一步用到了极少的主要Haar特征。比如检测人脸,水平方向上的Haar特征被认为是最具代表性的,首先在检测窗口内计算水平Haar特征(检测人眼有效),看所在窗口中的水平Haar特征是否有与人眼相匹配的,只是第一关,这一关过不去,直接Pass,那么这一窗口没必要再进行其他Harr特征的检测;反之,这一关过了,不要高兴的太早,还有第二关,第三关,...n关。每一关,对应于某一有代表性的Harr特征(垂直的,对角的...)。只有全关通过的检测窗口,才是目标物体所在的窗口。   之所以检测窗口大小可变,是因为 相应的Haar特征模板的大小可以相应的缩放,但是计算得到的Haar特征值始终是一个数,注意是一个数,不存在维度的改变,这跟SVM中特征向量的维度与图片块的大小有所不同,正是这点不同,就有了后面二者构造的分类器在检测目标物体过程中的差异....

最后,贴出AdaBoost原始算法:

SVM VS AdaBoost 构造分类器用于物体检测 - bingloveu - bingle冰糕
PS:每个弱分类器的得到是一个并行过程,这里有一个投票机制。比如根据图片的n个特征,训练出n个弱分类器,对每个弱分类器赋以一定的权值,得到最终的强分类器。
1 0
原创粉丝点击