【学习笔记】Selective Search算法--Selective Search for Object Recognition

1. 介绍

如果想在一张图像上找到我们想要的目标(比如猫), 处理的流程一般分成两步:  第一步: 先找出可能的候选regions(有很多方法);  第二步: 从这些regions里面找出来一个region, 这个region把目标包含在内(提取特征, 然后分类). 本文所提出的selective search(下面简称SS)方法就是在第一步上(找到最可能的候选regions)上下功夫。常用的Region Propose有Selective Search和Edge Boxes。

由于在图像中目标的位置和尺度的变化性, 一般的做法就是使用穷举搜索(Exhaustive Search), 选择一个κ×ε大小的矩阵框在整张图像上进行扫描(保证不会遗漏当前尺度下的目标); 然后改变矩形框的大小(保证不同尺度的目标都可以检测到), 继续在整张图像上进行扫描. 这种方法最大的缺点就是太耗时, 于是现在研究者提出了很多其他的方法, 本文的SS就是这其中的一种。



论文作者用上图说明了目标识别的复杂性和难度:如果要在(a)中识别出桌子,桌子上面同时放了很多的餐具,不通的物品之间具有一定的层次关系。我们可以利用纹理信息来识别出图(b)中的两个猫, 可以通过两只猫的颜色的不同将它们区分开来. (c)中变色龙的颜色和周围环境的颜色很相近, 通过颜色找到它并不容易, 我们需要借助纹理信息. 图(d)中的车轮和车身组成了一个不可分割的整体, 但是两者的纹理和颜色差距比较大. 因此, 如果想找到目标, 我们需要考虑图像中目标的多样性, 我们需要利用很多各式各样的策略(It's necessary to find a varity of diverse strategies.)(光靠纹理和颜色也是不行的)来解决这个问题.

2. Selective Search

2.1 Selective Search by Hierarchical Grouping


首先用一些方法在一张图像上产生很多初始的小区域(regions)-> 使用贪婪算法对这些region进行迭代分组(类似于层次聚类方法)
层次聚类:比如现在有 n 个regions: R={R1, R2, ..., Rn}, 计算每个region与它相邻region(注意是相邻的区域)的相似度, 找出相似度最大的两个区域, 合二为一. 现在只剩下n-1 个区域, 重新计算相邻区域的相似度(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算), 重复上面的过程, 直到只剩下1个区域
算法流程图:


解释: 最开始的时候有n个regions, 每一次迭代区域的数据少1, 迭代n-1次之后所有的区域合成了同一个区域, 我们是不是可以设定最终区域的数目(比如L, L<n), 让算法迭代n-L次, 这样最终能够得到L个区域, 以每个区域的外接矩形框作为最终的候选区域!

3.2 Diversification Strategies, DS(多样化策略)

为什么要有DS? 前面我们已经讲过, 图像千差万别, 目标形态各异, 要综合很多种不同的特征, 不同的信息才能够取得相对好的效果. 现在想想本文的SS模型有哪些地方是可以多样化的? 这里主要列举了3个方面(从头到尾):

可以使用不同的区域初始化方法(因为SS算法要对初始区域进行层次合并, 因此初始区域的好坏显得比较重要);

  1. 对输入图像可以采用它不同的颜色空间,提取不同的不变属性(RGB表达的图像未必是最好的,还可以利用它其他色彩空间信息(不同的颜色空间对外界的敏感度不同)).
  2. 衡量两个区域之间相似度的方法(很难说哪种相似度衡量方法是最好的).论文作者定义了4中互补的可以快速计算的相似度测量方法,量度范围都在[0,1]

1. 颜色相似度(color similarity): scolor(ri,rj)

方法: 对于每个区域, 对其每个通道(共3通道)分别计算25bins的直方图(被归一化了), 这样, 每个区域就有25x3=75维的向量Ci={ci1,...,cin}; 两个区域ri换rj之间的颜色相似度可以通过下面的公式计算(找到75维向量对应元素的最小值,然后加这些最小值加在一起)。

区域合并的时候, 比如ri和rj合并称为了rt, 新区域rt的颜色直方图可以用下式很方便地计算

2. 纹理相似度(texture similarity): stexture(ri,rj)

方法: 使用σ=1的高斯函数计算每个通道(共3通道)每个方向(共8个方向)上的高斯微分, 这样共可以得到24个微分图, 每个图上计算10bins的直方图(也归一化了), 这样每个区域可以得到一个维度为240的纹理直方图特征向量Ti={ti1,...,tin}. 两个区域ri换rj之间的纹理相似度的计算和颜色相似度相同:

3. 尺寸相似度(size similarity): ssize(ri,rj)

 方法: 这个相似度的出发点是想让小的区域尽早地进行合并,这样可以使得没有合并的区域具有相似的大小. 两个区域ri换rj之间的尺寸相似度的计算如下所示:

这里, size(ri)的表示区域ri内像素的总数目, size(im)表示整个图像的像素总数目, 下同.

4. 填充相似度(fill similarity): fill(ri,rj)

方法: 这个主要是为了衡量两个区域的吻合程度, 两个区域合并后的外包Bounding Box越小, 就说明他们的吻合度越高. 如果ri包含在了rj里面, 逻辑上应该先将它们进行合并(为了避免漏洞), 另一方面, 如果ri和rj很难接触到, 如果将两者合并, 形成的区域可能会很奇怪. 为了计算的快速性, 这里仅用到了区域尺寸(包含像素数目)和包含这个区域的bounding box来计算. 将BBij定义为区域ri和rj合并后的Bounding Box. 公式如下:

本文最后的相似度定义为以上4种相似度的加权和:

加权值a的范围在[0-1]之间.


构造训练集: 

初始的正样本是标记好的目标区域(图中绿色高亮覆盖区域), 我们使用Selective Search生成很多的目标locations, 然后从中选取与与真实标记样本重合20-50%的区域作为负样本. 为了避免近似重复的负样本, 如果两个负样本之间的重合度大于70%, 则只取其中一个. 为了保证每一类的初始负样本数目小于20000, 我们对每一类(如car, cat, dog,person)去除掉一般的样本.

测试过程:

测试的时候,由selective search产生的所有locations都要送到模型里面去预测, 分类器对每个window给出一个分数, 如果一个window和一个比它分数高的window有大于30%的重合, 那么把这个window去除.


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值