前言
在2012年,Alex Krizhevsky通过展示在ILSVRC使用卷积神经网络达到了较高的图片分类准确度,而重新激起了人们对CNNs的兴趣。在2012年ILSVRC的研讨会上,最核心的问题是:CNNs在ImageNet图片分类上的表现,如果推广到PASCAL YOC数据集上的目标检测任务上,其表现可以达到何种程度。Ross Girshick等人在2013年11月发表的这篇论文:
Rich feature hierarchies for accurate object detection and semantic segmentation
,第一次展示了和传统的方法相比,如HOG-like feature,CNN可以在PASCAL YOC目标检测任务上有更佳的表现。这篇论文提出了两个重要的insight:
- 使用高性能的卷积神经网络,对自下而上的候选区域定位和物体分割。
- 在标注数据不足的情况下,通过在其他的数据集上使用有监督预训练,接~3K个候 选区域着再在特定领域微调,来提升模型性能。
和图片分类相比,目标检测需要提取出图片中每一块含有待检测物体的区域,并将其正确的分类。所以,目标检测需要做的更多是,提取出可能含有目标的区域,排除不含目标的区域,正确的分类,对边框位置做校正。
基本流程
R-CNN(Regions with CNN featur)名字由来是因为这个模型将Region proposals 和 CNN联合在一起。
R-CNN算法分成四个步骤:
- 对一张图片生成1K~2K个候选区域
- 对每个候选区域,使用CNNs(参数共享)提取出一个固定长度的特征向量
- 把特征向量送入每一类SVM分类器,判断是否属于该类
- 使用回归器精细矫正候选框位置
候选区域生成(Region proposals)
候选区域算法有很多,比如objectness,selective search,category-independent object proposals,constrained grouping min-cuts和multi-scale combinatorial grouping。
R-CNN使用的是selective search方法对每张图片生成2K~3K个候选区域,思路如下:
- 使用一种过分割手段,获取原始分割区域R={r1,r2,r3,r4…rn}
- 初始化相似度集合S = ∅,计算两两相邻区域之间的相似度,将其添加到相似集合 S中
- 从相似度集合S中找出,相似度最大的两个区域ri和rj,将其合并成一个区域rt, 从相似度集合S中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相似 区域的相似度,结果添加到S中。同时将新区域rt添加到区域集合R中
- 输出所有R中的区域,所谓候选区域
注:相似度是颜色相似度、纹理相似度、大小相似度、吻合相似度的组合
特征提取(Feature extraction)
预处理
在利用CNNs提取特征前,需要将每一个region proposal归一化成同一尺寸227×227。不管候选区域的大小或横纵比如何,我们将整个区域不保持横纵比缩放到所需的大小。
Regardless of the size or aspect ration of the condidate region,we warp all pixels in a tight bounding box around it to the required size
有监督预训练(Supervised pre-training)
利用迁移学习的思想,可以解决因为标注数据不足而导致模型性能不佳的问题
网络结构
基本借鉴Hinton 2012年在Image Net上的分类网络
此网络提取固定长度4096的特征向量,然后送入一个4096->1000的全连接层进行分类
训练数据
ILSVRC2012 classification的全部数据,包含1000类图片
特定领域的微调(Domain-specific fine-tuning)
为了使上一步得到的CNNs适用于目标检测任务,我们把最后一层全连接网络替换成1000->21(在voc上有20类目标,再加上一个背景类),我们只使用warped region proposals,采用随机梯度下降继续训练CNNs的参数。学习率为0.001,每一个batch包含32个正样本(属于20类)和96个背景。
训练数据
使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。
考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。
类别判断
如何判断和目标物体有重叠(即包含部分物体的情况)的候选框的类别,论文中通过取IOU阈值在{0,0.1,…0.5}的值在验证集上实验,发现阈值为0.3效果最佳。
对每一类目标,分类器采用线性二分类SVM,输入为4096的特征向量,输出是否属于该类。由于负样本很对,采用非极大值抑制方法(hard negative mining)
正样本
本类的真实标定框
Positive examples are defined simply to be the ground-truth bounding boxes for each class.
负样本
考察每一个候选框,如果和本类所有标定框的重叠都小于0.3,认定其为负样本
边界框回归(Bounding-box regression)
在特定类别的SVM对每一个候选区域打出分数后,我们再用特定类别的边线性脊回归器对每一候选区域再预测一个新的边界框,采用均方差损失函数,正则项为1000*L2范数。输入为Pool5的4096维特征向量,输出为xy方向的缩放和平移。
训练数据
同类别判断,这里只使用IOU大于0.6的候选区域,这一超参数取得步骤同类别判断一样。
变换
n个{ ( $P_i,G_i$ ) },$P_i$是候选区域中心点的x,y坐标和其长宽($P_x,P_y,P_w,P_h$),Gi则是真值的($G_x,G_y,G_w,G_h$)。
优化目标如下
回归目标如下
检测阶段
基本流程
- 在检测图片上利用Selective search 提取大约2000个候选区域
- 变换每一个候选区域到指定尺寸然后送进CNNs计算特征向量
- 对每一类,使用训练好的SVM去判定类别得分
- 对已经打分过的候选区域,采用贪婪非极大值抑制,对某一类,如果某个候选区 域与最高得分的候选区域重叠部分超过学得的阈值,就抛弃它。
运行时间
作者提到花费在region propasals和提取特征的时间是13s/张-GPU和53s/张-CPU
结果
本文将深度学习引入检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%。本文的前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用。这两步在GPU上约需13秒。同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。这两步对于100K类别只需10秒。