对于初期的目标检测模型,常常将目标检测转化对分类问题.也就是依次在输入图像中选取不同尺度和比例的区域进行分类判断,最终获取输入图像包含的目标类别和位置.大致流程如下:
但是将原图所有图片按照不同尺度和比例进行测试则需要十分巨大的分类操作。比如将500*500的原图进行3种不同尺度和3种不同长宽比进行测试,则需要500*500*3*3=2250000次分类操作。
为了避免对输入图像的其他背景信息进行无意义的分类操作,有人就提出来了能不能先做一部分工作,提前选取一下可能性比较大的一些区域,然后再把他们送去判断,这样就能减少很多不必要的操作。
基于此场景下提出的Selective Search 算法(下文称为SS算法)
1. SS算法流程
该流程大致是,将输入图像划分为n个区域,计算区域与其相邻区域的相似度(该区域与自身或者该区域与不相邻区域的相似度置为Nan),于是乎我们就能得到一个N*N大小的相似度矩阵。
寻找相似度最大的两个区域,将二者合并为一个区域(感觉和区域生长很像)。此时只剩下了n-1个区域,重新计算n-1区域之间的相似度,实际上只要将原相似度矩阵,与其他区域的相似度删除,重新计算和与其相邻区域的相似值就可以了。
重复以上操作,直至剩下1个区域终止,算法伪代码如下:
2.相似度计算
颜色相似度
将色彩空间转为HSV,每个通道下以bins=25计算直方图,这样每个区域的颜色直方图有25*3=75个区间。做归一化后使用下式计算相似度:
其中表示j区域直方图统计值的第k个值。
纹理相似度
在RGB颜色空间,采用方差为1的高斯分布在8个方向做梯度统计,将结果归一化后,以bins=10计算直方图。直方图区间数为8*3*10=240。计算公式如下
其中表示j区域直方图统计值的第k个值。
尺寸相似度
引入尺寸相似度是为了避免“大区域”吃掉“小区域”
其中size(im)为整个图片像素尺寸,为区域Ri的像素个数
交叠相似度
其中size(BB_{ij})为能同时框住,的最小矩形框的像素尺寸
最终的相似度
SS算法为后续的图像处理提供了很多灵感,图割,RCNN等都用到了该算法