SS选择性搜索算法

笔记记录自:http://blog.csdn.net/surgewong/article/details/39316931

物体识别(ObjectRecognition),在图像中找到确定一个物体,并找出其为具体位置,之前的做法主要是基于穷举搜索(ExhaustiveSearch),选择一个窗口(window)扫描整张图像(image),改变窗口的大小,继续扫描整张图像。



图像(Image)包含的信息非常的丰富,其中的物体(Object)有不同的形状(shape)、尺寸(scale)、颜色(color)、纹理(texture),要想从图像中识别出一个物体非常的难,还要找到物体在图像中的位置,就更难了。

在做物体识别(ObjectRecognition)过程中,不能通过单一的策略来区分不同的物体,需要充分考虑图像物体的多样性(diversity)。另外,在图像中物体的布局有一定的层次(hierarchical)关系,考虑这种关系才能够更好地对物体的类别(category)进行区分。


在Selective Search也要考虑的几个问题:

1. 适应不同尺度(Capture All Scales):穷举搜索(ExhaustiveSelective)通过改变窗口大小来适应物体的不同尺度,选择搜索(SelectiveSearch)同样无法避免这个问题。算法采用了图像分割(ImageSegmentation)以及使用一种层次算法(Hierarchical Algorithm)有效地解决了这个问题。

2.多样化(Diversification):单一的策略无法应对多种类别的图像。

3. 速度快(Fast to Compute)。

二、区域合并算法

这里是基于区域的合并,区域包含的信息比像素丰富,更能够有效地代表物体的特征。关于区域用于物体识别的的方法。区域的合并方式是有层次的(hierarchical),类似于哈夫曼树的构造过程。

输入:彩色图片(三通道)

输出:物体位置的可能结果L

1. 使用 Efficient Graph-Based ImageSegmentation【1】的方法获取原始分割区域R={r1,r2,…,rn}

2. 初始化相似度集合S=∅

3. 计算两两相邻区域之间的相似度(见第三部分),将其添加到相似度集合S中

4. 从相似度集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域rt,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域rt 添加到 区域集合R中。

5. 获取每个区域的Bounding Boxes,这个结果就是物体位置的可能结果L

三、多样化策略

论文作者给出了两个方面的多样化策略:颜色空间多样化,相似多样化。

颜色空间多样化

作者采用了8中不同的颜色方式,主要是为了考虑场景以及光照条件等。这个策略主要应用于【1】中图像分割算法中原始区域的生成。主要使用的颜色空间有:(1)RGB,(2)灰度I,(3)Lab,(4)rgI(归一化的rg通道加上灰度),(5)HSV,(6)rgb(归一化的RGB),(7)C(具体请看论文【2】以及【5】),(8)H(HSV的H通道)

对颜色空间了解不深,在此不便深入说明,等着以后慢慢深入计算机视觉领域。

相似度计算多样化

在区域合并的时候有说道计算区域之间的相似度,论文章介绍了四种相似度的计算方法。

1. 颜色(color)相似度

使用L1-norm归一化获取图像每个颜色通道的25bins的直方图,这样每个区域都可以得到一个75维的向量,区域之间颜色相似度通过下面的公式计算:

在区域合并过程中使用需要对新的区域进行计算其直方图,计算方法:

2. 纹理(texture)相似度

这里的纹理采用SIFT-Like特征。具体做法是对每个颜色通道的8个不同方向计算方差σ=1的高斯微分(GaussianDerivative),每个通道每个颜色获取10bins的直方图(L1-norm归一化),这样就可以获取到一个240维的向量,区域之间纹理相似度计算方式和颜色相似度计算方式类似,合并之后新区域的纹理特征计算方式和颜色特征计算相同:

3. 大小(size)相似度

这里的大小是指区域中包含像素点的个数。使用大小的相似度计算,主要是为了尽量让小的区域先合并:

4. 吻合(fit)相似度

这里主要是为了衡量两个区域是否更加“吻合”,其指标是合并后的区域的BoundingBox(能够框住区域的最小矩形(没有旋转))越小,其吻合度越高。其计算方式:

最后将上述相似度计算方式组合到一起,可以写成如下,其中:

四、使用选择搜索(Selective Search)进行物体识别

通过前面的区域合并,可以得到一些列物体的位置假设L。接下来的任务就是如何从中找出物体的真正位置并确定物体的类别。常用的物体识别特征有HOG(Histograms of oriented gradients)和 bag-of-words两种特征。在穷举搜索(ExhaustiveSearch)方法中,寻找合适的位置假设需要花费大量的时间,能选择用于物体识别的特征不能太复杂,只能使用一些耗时少的特征。由于选择搜索(SelectiveSearch)在得到物体的位置假设这一步效率较高,其可以采用诸如SIFT等运算量大,表示能力强的特征。在分类过程中,系统采用的是SVM。

特征生成

系统在实现过程中,使用color-SIFT特征【6】以及spatial pyramiddivsion方法【7】。在一个尺度下σ=1.2下抽样提取特征。使用SIFT、ExtendedOpponentSIFT【8】、RGB-SIFT【6】特征,在四层金字塔模型1×1、2×2、3×3、4×4,提取特征,可以得到一个维的特征向量。(注:对SIFT特征以及金字塔模型还不是很了解,讲得不是很清楚)

训练过程

训练方法采用SVM。首先选择包含真实结果(ground truth)的物体窗口作为正样本(positiveexamples),选择与正样本窗口重叠20%~50%的窗口作为负样本(negativeexamples)。在选择样本的过程中剔除彼此重叠70%的负样本,这样可以提供一个较好的初始化结果。在重复迭代过程中加入hardnegativeexamples(得分很高的负样本)【9】,由于训练模型初始化结果较好,模型只需要迭代两次就可以了。(样本的筛选很重要!!)

五、性能评价

很自然地,通过算法计算得到的包含物体的Bounding Boxes与真实情况(groundtruth)的窗口重叠越多,那么算法性能就越好。这是使用的指标是平均最高重叠率ABO(Average BestOverlap)。对于每个固定的类别 c,每个真实情况(ground truth)表示为 ,令计算得到的位置假设L中的每个值l,那么ABO的公式表达为:

重叠率的计算方式:

上面结果给出的是一个类别的ABO,对于所有类别下的性能评价,很自然就是使用所有类别的ABO的平均值MABO(MeanAverage Best Overlap)来评价。

上面基本上讲了一下,这篇论文的框架,在【2】中可以下载得到该论文相对应的matlab代码(也可以在【10】中下载)。通过该代码,获取得到图像中物体的位置假设L。之后我们可以利用这个结果进行更加深入的研究。由于原matlab代码中部分代码经过了加密,正在使用C++对其进行重写,得到结果完善之后,会将其公开。由于入门不深,上面的理解不免有些错误,望各位指正,希望与大家多多交流~~

补充于: 2015-02-05

受各种杂事的影响,很久没有更新博客。现在在学机器学习相关的知识,图像分割相关的代码没有来得及整理,只好把之前的工程直接打包。其中不免有些错误或者不足,忘广大博友们指正。C++代码只是对相关的matlab代码部分工程的重写,没有仔细比对两者之间的性能,不过对雨了解其原理还是有很大帮助的,希望对初学者有所帮助。代码下载链接【11】。


物体识别在图像中找到确定一个物体,并找出其为具体位置,之前的做法主要是基于穷举搜索(Exhaustive Search),选择一个窗口(window)扫描整张图像(image),改变窗口的大小,继续扫描整张图像。直观上就给人一种非常耗时,结果太杂的印象。

----------------------------------------------------------------------------------------------------------------------------------------------------------

图像(Image)包含的信息非常的丰富,其中的物体(Object)有不同的形状(shape)、尺寸(scale)、颜色(color)、纹理(texture),要从图像中识别出一个物体非常难,要找到物体在图像中的位置就更难了。物体识别(ObjectRecognition)的复杂性以及难度都非常大,所以在做物体识别(ObjectRecognition)过程中,不能通过单一的策略来区分不同的物体,需要充分考虑图像物体的多样性(diversity)。另外,在图像中物体的布局有一定的层次(hierarchical)关系,考虑这种关系才能够更好地对物体的类别(category)进行区分。

在深入介绍Selective Search之前,先说说其需要考虑的几个问题:

1. 适应不同尺度(Capture All Scales):穷举搜索(ExhaustiveSelective)通过改变窗口大小来适应物体的不同尺度,选择搜索(SelectiveSearch)同样无法避免这个问题。算法采用了图像分割(ImageSegmentation)以及使用一种层次算法(Hierarchical Algorithm)有效地解决了这个问题。

2.多样化(Diversification):单一的策略无法应对多种类别的图像。使用颜色(color)、纹理(texture)、大小(size)等多种策略对(【1】中分割好的)区域(region)进行合并。

3. 速度快(Fast to Compute):算法,就像功夫一样,唯快不破!

二、区域合并算法

这里是基于区域的合并,区域包含的信息比像素丰富,更能够有效地代表物体的特征。关于区域用于物体识别的的方法,请参考论文【4】,这里不再多说,以后有空话,在博客中写点东西。首先原始区域的获取方法,可以查看博客【1】以及其相关的论文。区域的合并方式是有层次的(hierarchical),类似于哈夫曼树的构造过程。

输入:彩色图片(三通道)

输出:物体位置的可能结果L

1. 使用 Efficient Graph-Based ImageSegmentation【1】的方法获取原始分割区域R={r1,r2,…,rn}

2. 初始化相似度集合S=∅

3. 计算两两相邻区域之间的相似度(见第三部分),将其添加到相似度集合S中

4. 从相似度集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域rt,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域rt 添加到 区域集合R中。

5. 获取每个区域的Bounding Boxes,这个结果就是物体位置的可能结果L

三、多样化策略

论文作者给出了两个方面的多样化策略:颜色空间多样化,相似多样化。

颜色空间多样化

作者采用了8中不同的颜色方式,主要是为了考虑场景以及光照条件等。这个策略主要应用于【1】中图像分割算法中原始区域的生成。主要使用的颜色空间有:(1)RGB,(2)灰度I,(3)Lab,(4)rgI(归一化的rg通道加上灰度),(5)HSV,(6)rgb(归一化的RGB),(7)C(具体请看论文【2】以及【5】),(8)H(HSV的H通道)

对颜色空间了解不深,在此不便深入说明,等着以后慢慢深入计算机视觉领域。

相似度计算多样化

在区域合并的时候有说道计算区域之间的相似度,论文章介绍了四种相似度的计算方法。

1. 颜色(color)相似度

使用L1-norm归一化获取图像每个颜色通道的25bins的直方图,这样每个区域都可以得到一个75维的向量,区域之间颜色相似度通过下面的公式计算:

在区域合并过程中使用需要对新的区域进行计算其直方图,计算方法:

2. 纹理(texture)相似度

这里的纹理采用SIFT-Like特征。具体做法是对每个颜色通道的8个不同方向计算方差σ=1的高斯微分(GaussianDerivative),每个通道每个颜色获取10bins的直方图(L1-norm归一化),这样就可以获取到一个240维的向量,区域之间纹理相似度计算方式和颜色相似度计算方式类似,合并之后新区域的纹理特征计算方式和颜色特征计算相同:

3. 大小(size)相似度

这里的大小是指区域中包含像素点的个数。使用大小的相似度计算,主要是为了尽量让小的区域先合并:

4. 吻合(fit)相似度

这里主要是为了衡量两个区域是否更加“吻合”,其指标是合并后的区域的BoundingBox(能够框住区域的最小矩形(没有旋转))越小,其吻合度越高。其计算方式:

最后将上述相似度计算方式组合到一起,可以写成如下,其中:

四、使用选择搜索(Selective Search)进行物体识别

通过前面的区域合并,可以得到一些列物体的位置假设L。接下来的任务就是如何从中找出物体的真正位置并确定物体的类别。常用的物体识别特征有HOG(Histograms of oriented gradients)和 bag-of-words两种特征。在穷举搜索(ExhaustiveSearch)方法中,寻找合适的位置假设需要花费大量的时间,能选择用于物体识别的特征不能太复杂,只能使用一些耗时少的特征。由于选择搜索(SelectiveSearch)在得到物体的位置假设这一步效率较高,其可以采用诸如SIFT等运算量大,表示能力强的特征。在分类过程中,系统采用的是SVM。

特征生成

系统在实现过程中,使用color-SIFT特征【6】以及spatial pyramiddivsion方法【7】。在一个尺度下σ=1.2下抽样提取特征。使用SIFT、ExtendedOpponentSIFT【8】、RGB-SIFT【6】特征,在四层金字塔模型1×1、2×2、3×3、4×4,提取特征,可以得到一个维的特征向量。(注:对SIFT特征以及金字塔模型还不是很了解,讲得不是很清楚)

训练过程

训练方法采用SVM。首先选择包含真实结果(ground truth)的物体窗口作为正样本(positiveexamples),选择与正样本窗口重叠20%~50%的窗口作为负样本(negativeexamples)。在选择样本的过程中剔除彼此重叠70%的负样本,这样可以提供一个较好的初始化结果。在重复迭代过程中加入hardnegativeexamples(得分很高的负样本)【9】,由于训练模型初始化结果较好,模型只需要迭代两次就可以了。(样本的筛选很重要!!)

五、性能评价

很自然地,通过算法计算得到的包含物体的Bounding Boxes与真实情况(groundtruth)的窗口重叠越多,那么算法性能就越好。这是使用的指标是平均最高重叠率ABO(Average BestOverlap)。对于每个固定的类别 c,每个真实情况(ground truth)表示为 ,令计算得到的位置假设L中的每个值l,那么ABO的公式表达为:

重叠率的计算方式:

上面结果给出的是一个类别的ABO,对于所有类别下的性能评价,很自然就是使用所有类别的ABO的平均值MABO(MeanAverage Best Overlap)来评价。

上面基本上讲了一下,这篇论文的框架,在【2】中可以下载得到该论文相对应的matlab代码(也可以在【10】中下载)。通过该代码,获取得到图像中物体的位置假设L。之后我们可以利用这个结果进行更加深入的研究。由于原matlab代码中部分代码经过了加密,正在使用C++对其进行重写,得到结果完善之后,会将其公开。由于入门不深,上面的理解不免有些错误,望各位指正,希望与大家多多交流~~

补充于: 2015-02-05

受各种杂事的影响,很久没有更新博客。现在在学机器学习相关的知识,图像分割相关的代码没有来得及整理,只好把之前的工程直接打包。其中不免有些错误或者不足,忘广大博友们指正。C++代码只是对相关的matlab代码部分工程的重写,没有仔细比对两者之间的性能,不过对雨了解其原理还是有很大帮助的,希望对初学者有所帮助。代码下载链接【11】。

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页