一、前言
在目标检测学习系列的文章中,很多检测算法都会涉及到Selective Search的使用,比如R-CNN。这篇文章主要学习一下Selective Search的核心内容和简单使用。论文参考《Selective Search for Object Recognition》
二、背景介绍
目标检测比图像分类复杂的很重要的一个因素是:一张图像中可能存在多个物体需要分别定位和分类。显然,在训练分类器之前,需要使用一些方法将图像划分需要小的区域,划分方法统称为Region Proposal Algorithms。一张图像中包含的信息非常丰富,图像中的物体有不同的形状、尺寸、颜色、纹理,而且物体间还有层次(hierarchical)关系。下图给出了四个例子,来说明目标检测的难度。
(a)中的场景表明图像中不同物体之间是有一定的层次关系。(b)中给出了两只猫,通过纹理来可以找出这两只猫,但是需要通过颜色来区分它们。(c)中变色龙和周边颜色接近,通过纹理来区分。(d)中的车辆很容易把车身和车轮看做一个整体,但它们两者之间在纹理和颜色方面差别都非常地大。
上图说明了在做Region Proposal时,不能通过单一的策略来区分不同的物体,需要充分考虑图像物体的多样性(diversity),除此之外,在图像中物体间的布局还有一定的层次关系。这个时候,论文的作者就中肯的评价了几种区域提议方法。
- Exhaustive Search
刚开始人们做目标检测是,想到的是穷举法,遍历图像的每一个像素,导致搜索的范围很大,需要的计算量也很大,最后产生的提议区域也很多,后面作者提到了,即是改进的穷举法任然产生100000多个提议区域,这对后面的区域特征提取和分类器训练带来不小的压力,所以不合适使用复杂的特征提取算法和分类器,一般使用HOG+SVM。
- Segmentation
作者通过引用文献阐述了一些使用分割算法做Region Proposal的内容。比如:通过生成多个前景/背景,通过一定标准预测前景分割区域是一个完整对象区域的可能性大小(预测一个可能性大小),根据这个可能性大小对分割进行排序,可以精确地描绘出图像中的物体。然后作者又说了使用分割方法太单一,没有多样性。
- Other Sampling Strategies
作者又给出了一些其他的区域提议方法,这里不一一说了。
三、Selective Search
在总结一些区域提议方法的基础上,作者给出了自己的方法——Selective Search,这个方法主要有三个优势: 捕捉不同尺度(Capture All Scales)、多样化(Diversification)、快速计算(Fast to Compute)总结为:选择性搜索是用于目标检测的区域提议算法,它计算速度快,具有很高的召回率,基于颜色,纹理,大小和形状兼容计算相似区域的分层分组。Selective Search算法主要包含两个内容:Hierarchical Grouping Algorithm、Diversification Strategies。
- Hierarchical Grouping Algorithm
图像中区域特征比像素更具代表性,作者使用Felzenszwalb and Huttenlocher[1]的方法产生图像初始区域,使用贪心算法对区域进行迭代分组:
- 计算所有邻近区域之间的相似性;
- 两个最相似的区域被组合在一起;
- 计算合并区域和相邻区域的相似度;
- 重复2、3过程,直到整个图像变为一个地区。
在每次迭代中,形成更大的区域并将其添加到区域提议列表中。以自下而上的方式创建从较小的细分segments到较大细分segments的区域提案,如下图。
Hierarchical Grouping Algorithm的具体操作如下图:
简单的对算法的过程叙述一下:
输入:彩色图片(三通道)
输出:物体位置的可能结果L
- 使用 Felzenszwalb and Huttenlocher提出的方法得到初始分割区域R={r1,r2,…,rn};
- 初始化相似度集合S=∅;
- 计算两两相邻区域之间的相似度,将其添加到相似度集合S中;
- 从集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域 rt,从集合中删去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(与ri或rj相邻的区域)的相似度,将其结果加入到相似度集合S中。同时将新区域 rt 添加到区域集合R中;
- 获取每个区域的Bounding Boxes L,输出物体位置的可能结果L。
2.Diversification Strategies
这个部分讲述作者提到的多样性的一些策略,使得抽样多样化,主要有下面三个不同方面:
(1)利用各种不同不变性的色彩空间;
(2)采用不同的相似性度量;
(3)通过改变起始区域。此部分比较简单,不详细介绍,作者对比了一些初始化区域的方法,发现方法[1]效果最好。
- Colour Spaces.
考虑到场景、光照条件的不同,作者提出使用八种不变性属性的各种颜色空间应用在Hierarchical Grouping Algorithm。如下表:
+/-表示部分不变性;1/3表示三个颜色通道中有一个是不变性。
- Similarity Measures
- 颜色相似度衡量
表示每一个区域用三通道的颜色直方图表示,每个颜色通道的25 bins的直方图,这样每个区域都可以得到一个75维的向量。使用L1-norm标准化后,用下式计算区域间的相似度。
合并区域的颜色直方图计算如下:
- 纹理相似度衡量
论文采用SIFT-Like特征,具体操作:采用方差为1的高斯分布对每个颜色通道的8个不同方向做梯度统计,然后将统计结果(尺寸与区域大小一致)以bins=10计算直方图。直方图区间数为8*3*10=240。
表示每一个区域的纹理直方图,有240维。
- 尺度相似度衡量
为了保证区域合并操作的尺度较为均匀,使用如下公式。
size(im)是指区域中的尺寸(以像素为单位),使用尺寸相似度,主要是尽量让小的区域先合并。
- 形状重合度衡量
为了衡量两个区域是否更加重合,合并后区域的Bounding Box越小,其重合度越高,公式如下。
- 最终的相似度衡量:
最后,作者给出了自己的目标检测算法pipeline和在一些数据集上的结果对比。
其他资源:
一些使用Selective Search做目标检测的demo
Selective Search在opencv中的使用参考:https://www.learnopencv.com/selective-search-for-object-detection-cpp-python/
参考资料
[1] Felzenszwalb P F, Huttenlocher D P. Efficient Graph-Based Image Segmentation[J]. International Journal of Computer Vision, 2004, 59(2):167-181.
[2] Uijlings, J. R R, Sande V D, et al. Selective Search for Object Recognition[J]. International Journal of Computer Vision, 2013, 104(2):154-171.