一、引言
- 两阶段目标检测的开山奠基之作;
- 第一阶段:使用选择性搜索算法(Selective Search)提取2K的候选框。
- 第二阶段:将候选框缩放到227x227大小,送入CNN提取一个4096维度的特征向量,使用SVM对这些向量进行分类。使用回归器对位置进行进修。
二、算法流程
- 候选区域生成:使用选择性搜索算法对一张图像生成1K-2K个候选区域。
- 特征提取:对每个候选区域,使用CNN进行特征提取。
- 类别判断:每个特征送入每一类的SVM分类器,进行二分类,即判断是否属于该类。
- 位置精修:使用回归器修正候选框位置。
三、选择性搜索算法
选择性搜索是用于目标检测区域提议算法,它计算快,具有很高的召回率。
基于颜色、纹理、大小和形状兼容计算相似区域的分组。
该方法具有三个优势:捕捉不同尺度、多样化、快速计算。
核心思想:
1.使用一种过分割手段(如Felzenszwalb图像分割),将图像分割成小区域(1K-2K)。
2.查看现有小区域,按照合并规则合并可能性最高的相邻两个小区域。重复直到整张图像合并成一个区域位置。
3.输出所有的合并区域,即为候选区域。
合并规则:
合并时,要保证合并后的区域小,避免合并后出现大区域,从而直接吞并其他小区域。
- 不变属性的各种颜色空间
- 颜色相似度衡量(颜色直方图)
- 纹理相似度衡量(纹理直方图)
- 形状相似度衡量
四、特征提取
第一次将CNN作为特征提取器,本文使用提供两种网络:Alexnet、VGG16。
- 输入:由选择性算法提供的2K个候选区域,统一resize到227 x 227大小,作为网络输入。
- 输出:一个4096维的特征向量,用于后续SVM分类以及定位回归。
五、类别判断
训练特定于类别的线性SVM分类器。
假设做20分类,则单独训练20个SVM分类器。
- 输入:CNN提取的4096维向量。
- 输出:二分类,是否属于这一类的概率。
- 正负样本选择:在训练的时候,使用IOU为2000个候选区域打上正负样本标签。如果候选区域和GT的IOU大于0.5就认为是正样本,类别为GT类别。IOU小于0.3认为是负样本。训练的时候保持正负样本比为1:3。如果负样本过多,则通过类别损失选择前k个作为负样本。
作者为什么不直接在CNN后面使用一个fc层,再接个交叉熵损失直接做分类好了?而是用CNN提特征,用SVM作分类呢?
因为SVM和CNN训练过程中的正负样本定义方式不同。实验中,前者得到的精度低于后者。CNN训练需要大量样本,且数据标注过于宽松(IOU>0.5就认为是正样本,很有可能这个框只包含物体的一部分,即不完整)会出现过拟合现象。SVM使用于小样本训练,且对于样本数据的IOU要求严格。在训练SVM的时候,IOU小于0.3的候选框则为负样本。构建4096 x N的矩阵,来训练N个SVM。(N为类别数量)
六、位置精修
通过选择性搜索得到的候选框的位置并不是那么准确,因此,对于每一类目标,使用回归器进行位置修正。
- 输入:CNN提取的4096维特征。
- 输出:目标中心点x,y方向的缩放和平移。
- 正负样本:判定为本类的候选框中和GT的IOU大于0.6的候选框为正样本,反之为负样本。
七、测试阶段
- 使用选择性搜索提取2K的候选区域。
- 将候选区域resize到227 x 227大小,送入CNN提取特征。
- 使用SVM进行类别打分。
- 得到候选框的类别得分后,使用NMS去除多余的候选框
- 对剩下的框进行canny边缘检测,得到最后的框
八、优点
- 相较于传统方法(使用划窗判断候选区域),本文使用选择性搜索算法提取候选区域,速度快。
- 首次使用CNN作为特征提取器
九、缺点
- 训练分多步。RCNN训练先要微调一个预训练网络,然后针对每一个类训练一个SVM分类器,最后使用回归器对bbox进行修正。此外,候选区域也要单独用选择性算法获得。步骤繁琐。
- 时间消耗和内存消耗大。需要对每个候选区域进行卷积操作(由于候选区域有2K个,相互之间重复率高,会出现重复计算)。每个候选区域通过CNN进行的特征都将保存在磁盘上再进行读取。
|