Selective Search(选择性搜索)算法学习
Posted Facico
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selective Search(选择性搜索)算法学习相关的知识,希望对你有一定的参考价值。
Selective Search(选择性搜索)算法
-
在目标检测中,这个算法,可以启发式地搜索出可能包含物体的区域,而不用随机盲目地找很多个方框。
- 最简单的目标检测
-
我们的思路是先搞出一些小的方框(不一定是方块,但一定是连在一起的区域),然后不断的合并
一、图像分割
- 为了方便合并,我们先处理出一些小的区域
- 我们这里用
felzenszwalb
的图像分割算法- 简单的来说这个算法就是对图像做一个简单的聚类,什么样的聚类又快又简单呢?----最小生成树!
skimage.segmentation.felzenszwalb
是python
对应的API
二、计算相似度
- 计算相似度,把相似度高且邻近的块合并
- 为了保证多样性,这个算法涉及多种相似度,然后把各个相似度直接加起来(当然是带加权的)
- 多样性还考虑了多种样色空间,如RGB,HSV,灰度等
颜色相似度
-
为了让各个大小的区域都能比较,我们求出每个区域每个颜色通道的25 bins直方图,这样每个区域就能得到一个75维的向量 [ c i 1 , . . . , c i n ] [c_i^1,...,c_i^n] [ci1,...,cin]
- 直方图要归一化,就是和为1
-
相似度公式为
-
S c o l o r ( r i , r j ) = ∑ k = 1 n m i n ( c i k , c j k ) S_color(r_i,r_j)=\\sum_k=1^n min(c_i^k,c_j^k) Scolor(ri,rj)=k=1∑nmin(cik,cjk)
-
这样两个区域在很相似的情况下得到的最大值也只有3
-
-
两个区域合并时公式为
- C n e w = s i z e ( r i ) ∗ C i + s i z e ( r j ) ∗ C j s i z e ( r i ) + s i z e ( r j ) C_new=\\fracsize(r_i)*C_i+size(r_j)*C_jsize(r_i)+size(r_j) Cnew=size(ri)+size(rj)size(ri)∗Ci+size(rj)∗Cj
纹理相似度
- 计算纹理梯度,然后做成直方图,相似度和合并公式和上面相同
- 计算纹理梯度的方法:
- SIFT特征
- 论文中的方法
- LBP
- 较简单的方法
- 对于每个像素,比较一周的像素(可设定半径值),若大则为1,小则为0,最后合在一起为一个为一个二进制数,再转成十进制数即可
- SIFT特征
优先合并小区域
-
毕竟启发式合并
-
相似度公式
-
S s i z e ( r i , r J ) = 1 − s i z e ( r i ) + s i z e ( r j ) s i z e ( i m ) S_size(r_i,r_J)=1-\\fracsize(r_i)+size(r_j)size(im) Ssize(ri,rJ)=1−size(im)size(ri)+size(rj)
-
size(im)
是总图像大小
-
区域距离合适度
-
假设有1,2,3区域依次相隔,但是1和3很相似而2不相似,这样就会形成断崖
-
相似度公式
-
S f i l l ( r i , r j ) = 1 − s i z e ( B B i j ) − s i z e ( r i ) − s i z e ( r j ) s i z e ( i m ) S_fill(r_i,r_j)=1-\\fracsize(BB_ij)-size(r_i)-size(r_j)size(im) Sfill(ri,rj)=1−size(im)size(BBij)−size(ri)−size(rj)
BB_ij
是区域i和j合并之后的区域
-
总相似度
- 最后几个相似度带权合并就行
三、合并
- 统计每个区域的有交集区域,并统计相似度
- 然后每次把相似度最高的两个区域合并,直到没有区域相交
以上是关于Selective Search(选择性搜索)算法学习的主要内容,如果未能解决你的问题,请参考以下文章
Selective Search for Object Recognition