目标检测的RCNN算法,
原文地址:https://arxiv.org/pdf/1311.2524.pdf
RCNN将候选区域(region proposal)与 CNN 结合,分为四个步骤:
1.利用原图片生成1k~2k个候选区域(使用Selective Search方法)
2.对每个候选区域,使用CNN提取特征
3.将特征送入每一类的SVM分类器中,判断是否属于该类
4.修正候选框位置
原论文中的结构图:
候选区域的生成
过去使用滑动窗口的方法去寻找可能存在物体的候选框,工作量非常大,且很难实现。
RCNN中是用Selective search算法找出图像中可能存在目标的侯选区域(region proposals)
Selective search论文:Selective Search for Object Recognition
SS算法又是先引用Efficient Graph-Based Image Segmentation论文的方法得到最初的许多分割区域,然后依据各个区域的相似度逐渐合并为最后想要生成的框
图片放缩和经过CNN提取特征
经过SS生成的2k个框的大小不是一样的,使用CNN提取特征向量时,需要接受固定大小的输入,因此需要对这2k个框进行放缩到同样的大小。
论文提供了几种图片放缩的方式(B、C、D三种):
A列:不同大小的生成框
B列:用生成框在原图中的周围像素填充
C列:不用生成框在原图中的周围像素填充(用区域的像素均值填充或另外指定一个像素填充)
D列:直接将图片拉伸到固定大小(会造成图片扭曲/失真)
但是论文中提到还是使用了D方法,可能有什么不被察觉的优势吧
论文中CNN接受图片的大小为227 × 227 pixels,经过上面的放缩使所有框都变为227 × 227 pixels大小。
训练CNN:
论文中使用有监督预训练(Supervised pre-training),也就是迁移学习。 图片分类标注好的训练数据非常多,但是物体检测的标注数据却很少,如果从头训练CNN数据量不够。
预训练:Paper中使用Alexnet的网络和其参数,作为初始的参数值,然后再fine-tuning训练。
fine-tuning:在PASCAL VOC数据集上,用selective search生成候选框,将这些候选框作为训练数据,对上面预训练的CNN模型进行fine-tuning训练(需要将AlexNet最后一层的1000个类改为21,其中20个VOC的类,加一个背景)。
下图是AlexNet的结构图:
针对不同的数据集,N不一样,论文中说到:For VOC, N = 20 and for ILSVRC2013, N = 200.
定义候选区域与ground-truth(真正包含物体的精确框、人工标注的框)的IoU>0.5为正样本,否则为负样本。
batch-size为128,包含96个负样本和32个正样本,这样采样是因为正样本相比负样本少很多。
在训练CNN的时候会在网络的后面加上一个分类层,在训练完毕后,我们会移除最后的分类层,直接提取到前面的FC层,AlexNet的FC层为4096维向量,将提取到的这个特征向量传给下一步。
小结:对AlexNet模型进行迁移学习,对这个模型进行训练,使得这个网络能很好地提取出图片的特征,然后将第一步SS生成的2k个候选框输入CNN生成2000个4096维的特征向量。
基于特征向量训练SVM分类器
对每一个类别都有一个SVM分类器,来判断一个特征向量是否属于该类别,N个类别就有N个SVM分类器。
训练SVM分类器时,定义ground-truth boxes作为正样本,和ground-truth的IOU小于0.3的样本作为负样本,其他的框忽略。(至于为什么要这样定义,论文中说是依据经验,这样定义训练效果好)
训练好SVM后,一个后选区域对应的一个4096维的特征向量经N个SVM得到N个结果(表示该区域是该类物品的概率/置信度),2000个候选区域得到2000*N的概率矩阵。
这时,需要使用非极大值抑制方法(nms),去除重复框(因为SS生成的2000个框,可能多个框指向同一个物品)。
非极大值抑制的流程如下:
- 设置一个置信度的阈值conf,低于该阈值conf的候选对象排除掉,对剩余的框进行下面操作,
- 根据置信度得分进行排序(即SVM的输出概率)
- 选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除
- 计算所有边界框的面积
- 计算置信度最高的边界框与其它候选框的IoU。
- 删除IoU大于阈值area的边界框
- 重复上述过程,直至边界框列表为空。
对每个类都要单独进行非极大值抑制(即概率矩阵的每一列),对应的输出列表即为检测到该类物品的候选框。
注意:
阈值conf:对每一类进行NMS时,当一个框的置信度大于阈值conf时,才认为这个框预测的是该类对象。
阈值area:当两个框的IOU大于阈值area时认为这两个框是描述同一个物品,只保留置信度最大的框。
Bounding-Box regression
P:候选框
G^:预测框
G:真实的框
就是把P映射到G^,目标是让G^和G能更加接近。
每个框包含4个信息(x,y,w,h)分别表示框的中心点坐标位置和宽高。
Paper中用了四个变换把P变换到G^,我们需要求的就是
dx(P ), dy(P ), dw(P ), and dh(P )这四个函数。
Paper中将候选框的特征向量经四个线性变换得到预测值G^的四个坐标,训练时,t表示真实的ground-truth,
训练完成后,将第三步SVM中,每一类的输出列表的候选框经Bounding-Box regression调整得到最后的预测框。