Selective Search是R-CNN中的第一步,目的是为目标识别的任务选出可能的候选区域。其主要思想是将图像分割成很多小块,然后分别计算每两个相邻小块的相似度,每次合并最相似的两块,最终合并出原始的完整图片。过程中保留每次合并的结果,以此解决目标的多尺度问题。
本文从以下几个方面介绍我的理解:
博客第三十三节,目标检测之选择性搜索-Selective Search中有一个这个算法的翻译版本,这篇博客写的很好,给了我很大的启发。
输入: 一张图片
输出:候选的目标位置集合L
算法:
1: 利用切分方法得到候选的区域集合R = {r1,r2,…,rn}
2: 初始化相似集合S = ∅
3: foreach 遍历邻居区域对(ri,rj) do
4: 计算相似度s(ri,rj)
5: S = S ∪ s(ri,rj)
6: while S not= ∅ do
7: 从S中得到最大的相似度s(ri,rj)=max(S)
8: 合并对应的区域rt = ri ∪ rj
9: 移除ri对应的所有相似度:S = S\s(ri,r*)
10: 移除rj对应的所有相似度:S = S\s(r*,rj)
11: 计算rt对应的相似度集合St
12: S = S ∪ St
13: R = R ∪ rt
14: L = R中所有区域对应的边框
首先先了解一下原图中的[13]是什么意思,这是2004年的一篇论文《Efficient Graph-Based Image Segmentation》,如果想具体了解的话可以参考
Efficient Graph-Based Image Segmentation
R-CNN之前的准备:Efficient Graph-Based Image Segmentation
这两篇文章,解释的很详细,大意就是将图片看成无向图(Graph),将图片中的每个像素点都看成图的顶点,顶点与顶点之间边的权值为两个像素点的差异性,文中给出了计算差异性的例子,灰度图片像素间的差异为像素强度(intensity of the pixel)差的绝对值;彩色图片则对RGB三个通道分别进行上述计算。
算法是首先将边根据权值升序排序,即从差异最小的边开始;
如果该边的两个顶点属于两个不同区域,且该边的权值小于两个顶点所属区域的最小分割内部差(具体的定义就不详述了,分割内部差是区域内最大权值加上一个控制分割精细程度的参数,最小是说取两个区域该值的最小值,目的是控制分割的精细程度),就将两个区域合并;
对每条边重复上述步骤,得到最终分割。
结果图如下:
到这里解释了Selective Search算法中初始区域(即集合R)是如何划分的,从上图可以看到初始区域中比较明显的是对于一个物体的不同部分切分较为明显,而Selective Search就是要将这些区域再次结合,从而给出完整的物体区域作为候选。
初始区域划分后,为相似度设置集合S,初始为空;
然后计算所有相邻区域的相似度,并入S中;
从S中的最大相似度开始,逐渐合并相邻区域,将S中合并区域的旧相似度去除,然后计算新相似度并入S,并将合并区域并入初始区域R,直到合并出一张完整的图片。
由于每次的结果都会并入R中,所以R中的元素是初始的每片区域加每一步合并的结果,因此可以得到不同尺度的候选区域,也可以解决物体不同部分。
介绍完算法后,文章又提出多样化策略来保证其划分的准确性,从以下三个方面进行:
作者介绍了RGB、灰度Intensity等八种不同的色彩空间。
有四种:
这一点与之前介绍的[13]有所联系,上文提到的最小分割内部差中有一个参数控制划分的精细程度,这里就是通过改变这个参数改变初始区域。
有了上述划分的算法以及多样化的划分策略,还需要一个量化的公式来评价划分区域的效果。
作者采用 the Average Best Overlap (ABO)和 Mean Average Best Overlap (MABO),其中
A B O = 1 ∣ G c ∣ ∑ g i c ∈ G c max l j ∈ L O v e r l a p ( g i c , l j ) ABO = {1\over|G^c|}\sum \limits_{{g_i^c}\in G^c}\max \limits_{l_j\in L} Overlap(g_i^c,l_j) ABO=∣Gc∣1gic∈Gc∑lj∈LmaxOverlap(gic,lj)
公式的意思是针对某一特定的类别c,计算每个真实情况(ground truth) g i c ∈ G c g_i^c\in G^c gic∈Gc,与每个位置假设 l j ∈ L l_j\in L lj∈L 的Overlap值的最大值,然后求平均值,Overlap定义如下
O v e r l a p ( g i c , l j ) = a r e a ( g i c ) ∩ a r e a ( l j ) a r e a ( g i c ) ∪ a r e a ( l j ) Overlap(g_i^c,l_j) = {area(g_i^c)\cap area(l_j)\over area(g_i^c)\cup area(l_j)} Overlap(gic,lj)=area(gic)∪area(lj)area(gic)∩area(lj)
ABO针对某一特定类别,MABO则是将所有类别的ABO求平均,用以评价划分区域效果。
作者对不同的色域、相似度计算方法和初始区域进行了组合,可以看到采用的策略越复杂,产生的位置假设越多,MABO也就越高。
上表则是在Pascal 2007测试集上的效果对比。