本篇论文是目标检测的开山之作,之后的大部分文章都是基于本篇论文进行修改和优化得到的产物。
之前的目标检测算法是穷举搜索(ExhaustiveSearch):使用一个窗口在图片上进行滑动,改变窗口的大小,继续扫描整张图像。通过寻找响应值最高的那个位置作为预测的目标。而本文是首先从图像中提取可能是物体的区域,然后对这些区域进行判断。这样的做的优点是过滤掉了一些无用的box ,节省了时间。
主要流程:
1. 对一张图片生成1k-2k个候选区域使用方法:selective research
2. 对每个候选区,使用CNN进行特征提取,使用分类器进行分类
3. 使用回归进行微小调整,使候选框的位置更为精确
一.Selective research
在图像中,同一个物体在尺度上有相似性,如颜色、纹理、尺度相似性等。本方法利用同一物体尺度范围的相似性,不断合并达到预定threshhold的相邻像素点
输入:RGB三通道的图片
输出:物体位置的可能结果L
- 使用Efficient Graph-Based Image Segmentation的方法获得n个初始分割区域。
- 初始化相似度集合S = 0
- 计算R中两两相邻的区域(ri,rj)之间的相似度,将其添加到相似度集合S中。
- 当相似度集合S不为空时,循环执行一下步骤:
- 从S中寻找最高的相似度s(ri,rj)
- 把ri和rj合并到一起,组成rt
- 从S中删去与ri,rj有关的相似度
- 计算rt与其相邻的图片的相似度St
- 将St加入S
- 将新拼接成的rt加入结果集合R(执行一次的意义是,做一次拼接,将拼接的两个图的相似度从集合中删去,计算新拼接成的图与周边的相似度,将新相似度加入集合,将新拼接的成的图,加入结果图R)
注意:R代表的并不是拼接到最大时的结果图,而是相当于记录了每一步拼接得到的结果,他包含了最小的拼接图直到拼接成最大图的过程中的所有拼接而成的图,所以会生成1k~2k个。
Efficient Graph-Based Image Segmentation的解释:(待完成)
相似度的计算方式(多样化的相似度计算)
通过颜色,纹理,大小,吻合四个相似度的加权来得到最终的相似度:
颜色直方图:将每个通道(0~255)由小到大分为多个区域,统计每个区域内的数量。
2.纹理(texture)相似度
譬如如果分成25个区域(bins)则颜色直方图内的第一个值表示R通道内值在0~9的数量。
这里的纹理采用SIFT-Like特征。具体做法是对每个颜色通道的8个不同方向计算方差σ=1的高斯微分(Gaussian Derivative),每个通道每个颜色获取10 bins的直方图(L1-norm归一化),这样就可以获取到一个8*3*10=240维的向量。区域之间纹理相似度计算方式和颜色相似度计算方式类似,合并之后新区域的纹理特征计算方式和颜色特征计算相同:
3.大小(size)相似度
这里的大小是指区域中包含像素点的个数。使用大小的相似度计算,主要是为了尽量让小的区域先合并。
例:设有区域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。
4.吻合(fit)相似度
这里主要是为了衡量两个区域是否更加“吻合”。其指标是合并后的区域的Bounding Box(能够框住区域的最小矩形)越小,其吻合度越高。其计算方式:
通过计算加权来计算最终的相似度:
二.特征提取与分类
因为作者使用的CNN代码需要277*277的输入,所以需要对上一步使用selective search得到的候选区域进行外扩,作者是直接忽略aspect ratio之间缩放到227*227(含一个16宽度的边框,原region向周围扩大16个像素,包含一些背景信息,超过的补色,然后再wrap到227*227, 见附录A),这样的好处是稍微扩大region,将背景也包括进来来提供先验信息。
网络结构是:五个卷积网络+两个全连接层
因为如果直接进行训练,CNN的值全部随机初始化,数据量远远达不到需求,所以我们需要进行有监督预训练,又称迁移学习,简单的理解是把一个任务训练好的参数,拿到另外一个任务,作为神经网络的初始参数值,这样相比于你直接采用随机初始化的方法,精度可以有很大的提高。
第一次训练:使用ILVCR 2012的全部数据进行训练,输入一张图片,输出1000维的类别标号(该数据集已经标好了这1000个分类)。注意:Fc7输出的结果就是提取的图片特征,然后将其送入一个全连接网络,输出是1000维。
第二次训练(fine-tunning):调优训练,因为第一次训练相当于是预训练,相当于将神经网络内的值训练成了符合判断1000维特征的网络,现在我们训练自己的数据,得到更为精确的,针对我们任务的网络。
使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。
考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。在每次训练的时候,我们batch size大小选择128,其中32个事正样本、96个事负样本(正样本是我们在训练数据里标记的框住物体的样本,而负样本则是框的背景)。
然后针对每一类,训练一个SVM二类分类器进行判断,输入为深度网络输出的特征,输出为是否属于此类。
问题:上面一部训练不是已经得到相应的20个类了么,为什么还要再判断一次?
答:因为在fine-tunning的时候,为了保证分类出大量的区域到非背景类,所以判断的时候仅仅要求重叠率大于等于0.5即分类为非背景类,这相当于一个粗略的分类,为了更加精确的分类,我们需要使用SVM对每一个类中的候选区域进行判断。
三.位置精修
因为之前检测物体的衡量标准是重叠面积,因此导致很多的bounding box的位置不够准确,我们需要一些操作使得bounding box能够更加精确的框住目标物体。
- 做法:训练一个线性回归器(linearregression),输入为特征值p7输出的4096维向量。
- 训练数据:将各类候选区中重叠区域大于0.6的图片输入。
- 输出:(x,y)的值。