zoukankan      html  css  js  c++  java
  • Selective Search for Object Recognition(理解)

    0 - 背景

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

    1 - 算法流程

            

    • 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)}$$

            

    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

  • 相关阅读:
    Linux系统中pssh系列工具的使用
    Linux软件包管理和磁盘管理实践
    Linux系统自动化安装之pxe实现
    Linux系统SSH服务基于key认证实践
    Linux系统文本处理之awk数组实践
    Linux访问控制列表
    Linux系统中SSH端口转发
    (转)python的range()函数用法
    Python 学习之list和Tuple类型
    List<String> 和 ArrayList<String>的区别
  • 原文地址:https://www.cnblogs.com/CZiFan/p/9901729.html
Copyright © 2011-2022 走看看