Exemplar-SVMs for Object Detection and Beyond--Detail (二)
Features
选用快速简单的HOG特征,采用了DMP中HOG策略,31维,sbin=8。
不同的地方在于,作者不是先把bounding box 截取,wrap (统一宽高比)之后再计算HOG,而是直接计算原始图像的HOG,再提取标记区域的HOG,当然这样就不能保证提取的区域和BB完全重合。
Examplar 模板的表示上,而且作者还尽量使得Cell数目在100个左右,并且还要约束高和宽不能超过12个cell,即。
要实现这个目标,当然就得在HOG金字塔空间搜索了,作者使用了启发式搜索。
至于为什么要控制exemplar 的高宽不能超过12,这是为后面的加速做准备。
Trian
(1)Exemplar –SVM的优化函数
其中,损失函数,
解释下为什么,首先你最好看看pluskid对于超调的讲解
一般的SVM优化的函数为
可见所有样本的重要性等同,即正负样本犯错的惩罚力度是一样的。但是本文却不行。因为,只有一个正样本,正样本和负样本数目极端的不平衡,如果线性/非线性可分,那倒没关系,如果根本找不出一个分界面的情况下,那我们必须引入松弛变量,使得样本的function distance 可以即允许样本犯错。优化的结果是使得错误总量最小,那肯定是会牺牲掉少部分人的利益,于是数量占绝对劣势的正样本只能被划入负样本的阵营。本文,正样本只要唯一一个,你还把它给划分错误,这个分类器肯定就不够准确。解决方法就是缩写样本的不平衡性,比如,正样本一个顶一百个。
图 3
例如,图 3中如果没有左边两个黑圈的红点那么实线会是个很好的分界面,如果我们令Exemplar –SVM的优化函数的,那么分界面可能会取虚线,而令则可能取实线为分界线。总之, 强调了正样本绝不容许犯错,负但是负样本犯错要宽容。
(2)样本集
训练集中的每一个正样本都需要单独拿出来和负样本训练。对于负样本的选取作者很谨慎,它完全是取不包含任何正样本的类作为负样本,比如训练人的时候拿猪做负样本。因为作者认为,我们不知道训练集中哪些样本和当前训练的样本是视觉上不相似的,但可以肯定的是其它类别的样本肯定是不相似的。
(3)优化
本文和DPM算法一样使用随机梯度下降+hard negative exemplar ming,每一代最多使用2500个负样本。
Calibration/概率SVM
同一个SVM的分类得分直接可以比较大小,但是不同的SVM分类器的得分直接不能直接比较,这就好比每个人对美女的评价一样,校正的目的就是使得不同的SVM分类器直接可以直接比较,方法是使用拟合的sigmoid函数将分类器得分统一到[0,1]之间,即对应概率,概率是可以比较的。参考文献[3],概率SVM,经典的贝叶斯理论。
Sigmoid映射函数如下(来源下面细说):
参数估计
使用经典的最大似然估计,注意不是SVM的偏移。
其中:正样本标记,,负样本标记,
校正效果
缩放分类器Score,又是一个偏移,相当于平移分界面。
近似的情况下可以直接使用输出距离作为概率,即图中的绿色。
粉红色表示,验证集中距离分布普遍大于,蓝色表示。
高斯分布
上图是正负样本的原始概率分布,看起来像高斯分布,于是《classification by pairwise coupling》就使用高斯分布来拟合对正负样本分布,然后用经典的贝叶斯计算下后验概率
注意到最后一点,算出的后验概率不是单调的,因为求导后有零点,这不符合常理,于是文献[3]采用了指数分布拟合。
指数分布
只考虑的部分,看起来像指数分布,所以人家就用指数分布了。其实,可以说是高斯的简化,即直接去掉二次项,即满足单调性了。
Detection
Object Location
目标定位。即在图像中找到目标的位置,本文采用憨厚的滑动窗口目标搜索策略,不过我喜欢基于分割区域的搜索策略,有兴趣的可以看看 Segmentation as selective search for object recognition ICCV 2011。滑动窗口很耗时,但是作者做了很多Speed Up工作,值得一看。
(1)Convolution
卷积很简单就是用examplar HOG模板在图像上平移,然后用平移后的目标区域HOG特征和examplar HOG模板作内积。DMP的步长真心不记得了,应该是1个像素,那一堆程序全忘了……,这里的步长是一个Cell的大小在原图上就是8个pixel。
作者的PHD论文里面说如果图像的大小是,模板是 那这张图就得卷积次,我觉得应该是次啊,我哪里错了???
好了,总之,直接卷积太耗时间了,一张的图片如果采用 的模板卷积次数高达,这只是一个examplar SVM,作者有上千个examplar SVM,这个数量级就有点恐怖了。
(2)Single matrix multiplication
上面说到内积次数太恐怖了,所以作者就将多次内积,化为一次矩阵相乘。但是各个examplar SVM模板高宽都不一样啊,怎么能统一运算呢?还记得前面提到的将模板的高宽限制在12以内吗?这样的话,我们就能将所有的模板全部统一到,对于多出了的区域补0,反正又不影响内积的结果。如此一来我们就只要提取出HOG金字塔中所有的的模板就可以了。
首先将所有的候选区域全部提取出来组成一个矩阵其维度为,,为候选目标的个数。
上面统一了候选区域到,现在统一examplar SVM模板到,的维度为,为examplar SVM模板的总数。
最后只需要做一次矩阵运算。
显然一次矩相乘算比多次卷积运算的时间是少,但这不一定,论文说只有当examplar SVM模板的数目超过50的时候速度才能超过卷积。因为,一次相乘虽然速度快,而且当examplar SVM模板数目增加时,矩阵相乘运算的时间基本上增加不了多少,但是为每个模板补零需要时间,模板扩展到之后维数增高,内积时间也会久一点,而且存储超大型矩阵的内存需求急速膨胀,这么大的内存空间分配管理也需要时间。
(3)Applying Distance Functions via Two Convolutions
这部分是岔开来的话题,是基于相似性,即距离函数的分类。
样本与examplar SVM 的距离:
其中为各维度的距离权重,是一个对角矩阵,有意思的是这完全可以化为两次内积运算,从而可以用卷积计算。
其中, 与无关,可以预先算好。
,也可以只算一次。
即将的元素平方。
这样一来,就可以化为两次内积运算然后求一次和。虽然复杂程度并没有降低多少,但是,这两次内积运算可以分开求即可以对原HOG图和平方后的HOG图卷积。
NMS(non-maxima-suppression)
滑动窗口搜索是一种过搜索策略,会导致冗余检测区域,一般的对策是NMS。
NMS是一种贪心算法,它先将所有的候选目标区域依据其Score从大到小排序,然后,依次选择得分最高的区域保留下来,同时将与其重合面积的候选目标区域删掉
Exemplar Co-occurrence Matrices
本文这样做也是可以直接NMS,但是这样浪费了重要的互信息。
Examplar Co-occurrence Matrices 即上下文信息。举个例子,小风小莎是一对好基友,所以它们经常在一块(吃饭,睡觉……),有一天小明在街上看到一个小屁孩特像小风,但是不能肯定,只有50%的把握,再看旁边,那厮特像小莎,于是小明觉得那小屁孩80%是小风。本文互信息肯定很有价值,因为不同的example SVM属于同一类目标,肯定有相似的地方。
本文同样也是NMS但是不同点在于,没有直接使用Exapler分类器的Score,而是先综合各个example SVM的Score以及互信息之后得到新的Score,再NMS。
比如说,对于 ,其与同时出现的概率为,那对于检测到的区域其新的Score不是,而是:
不过呢,是需要找的,找了一个最特殊的
对于检测到的目标区域 ,其 与 的上下文特征 : 检测到的目标区域中与 面积 IoU大于 0.5 的目标区域中 Score最高的一个。
是直接统计训练集得到的,作者只是说同时检测正确的概率。我觉得应该是这样的,比如先得到NMS之后的检测区域,然后对检测到的bounding box,统计其与检测到的目标区域对应同一个标记bounding box的比例即概率。
Futher
这篇论文本质上可以说是基于相似性的模式识别和基于统计的模式识别的结合。这篇会议论文体现不出作者的理论高度,建议看作者的PHD论文,从哲学,认知科学开始切入,看看啥才叫博士论文。
最后再给大家推荐一本书《similarity-based pattern analysis and recogntion》Spring 2013,扩展下思路,属于 advances in computer and pattern recognition 系列,该系列其它的书也不错。