Selective Search for Object Recognition(理解)

0 - 背景

  在目标检测任务中,我们希望输入一副图像,输出目标所在的位置以及目标的类别。最常用的算法是滑动窗口方法,但滑动窗口其实相当于穷举图像中的所有子图像,其效率低且精度也受限。该论文提出一种新的生成目标检测框的方法selective search。

1 - 算法流程

        Selective Search for Object Recognition(理解)

  • step 0:生成区域集R
  • step 1:计算区域集R中每个相邻区域的相似度S
  • step 2:找出最相似的两个区域,将其合并成新区域添加到R中
  • step 3:从S中移除所有与step 2中相关的区域
  • step 4:计算新集与所有子集的相似度
  • step 5:跳转到step 2,直到S集为空

1.1 - 相似度计算

1.1.1 - 颜色相似度(colour similarity)

  将颜色空间转换成HSV,每个通道下以bins=25计算直方图,这样每个区域的颜色直方图有$25 \times 3=75$个区间。对直方图除以区域尺度做归一化后采用下式计算相似度:

$$s_{colour}(r_i,r_j)=\sum_{k=1}^{n}min(c_i^k,c_j^k)$$

  (注:我的理解是,对于波峰波谷出现在相同区间,也即是直方图有相似趋势的两个区域相似度高,否则低)

1.1.2 - 纹理相似度(texture similarity)

  采用方差为1的高斯分布在8个方向做梯度统计,然后将统计结果(尺寸与区域大小一致)以bins=10计算直方图,直方图区间数为$8 \times 3 \times 10=240$(使用RGB颜色区间):

$$s_{texture}(r_i,r_j)=\sum_{k=1}^{n}min(t_i^k,t_j^k)$$

1.1.3 - 尺度相似度(size similarity)

  保证合并操作较为均匀,避免一个大区域连续吞并其他小区域。举个例子,假设有区域a/b/c/d/e/f/g/h,理想的合并方式为ab/cd/ef/gh→abcd/efgh→abcdefgh,而不希望出现的合并方式为ab/c/d/e/f/g/h→abcd/e/f/g/h→abcdef/gh→abcdefgh。尺度相似度计算公式如下:

$$s_{size}(r_i,r_j)=1-\frac{size(r_i)+size(r_j)}{size(im)}$$

1.1.4 - 交叠相似度(shape compatibility measure)

$$s_{fill}(r_i,r_j)=1-\frac{size(BB_{ij})-size(r_i)-size(r_j)}{size(im)}$$

        Selective Search for Object Recognition(理解)

1.1.5 - 最终相似度

$$s(r_i,r_j)=a_1s_{colour}(r_i,r_j)+a_2s_{texture}(r_i,r_j)+a_3s_{size}(r_i,r_j)+a_4s_{fill}(r_i,r_j)$$

2 - 实现

  参照大神的代码自己复现一遍,代码在此

3 - 参考资料

https://blog.csdn.net/guoyunfei20/article/details/78723646

https://github.com/AlpacaDB/selectivesearch

https://github.com/CZiFan/SelectiveSearch

上一篇:oracle如何获取当年第一月,如今年是2015年,则需获取 201501


下一篇:如何量化考核技术人的KPI?