R-CNN
R-CNN: Rich feature hierarchies for accurate object detection and semantic segmentation — 用于精确物体定位和语义分割的丰富特征层次结构
论文摘要:Object detection performance, as measured on the canonical PASCAL VOC dataset, has plateaued in the last few years. The best-performing methods are complex ensemble systems that typically combine multiple low-level image features with high-level context . In this paper, we propose a simple and scalable detection algorithm that improves mean average precision (mAP) by more than 30% relative to the previous best result on VOC 2012—achieving a mAP of 53.3%.
Our approach combines two key insights:
(1) one can apply high-capacity convolutional neural networks (CNNs) to bottom-up region proposals in order to localize and segment objects and
(2) when labeled training data is scarce, supervised pretraining for an auxiliary task,followed by domain-specific fine-tuning, yields a significant performance boost. Since we combine region proposals with CNNs, we call our method R-CNN: Regions with CNN features. We also compare R-CNN to OverFeat, a recently proposed sliding-window detector based on a similar CNN architecture. We find that R-CNN outperforms OverFeat by a large margin on the 200-class ILSVRC2013 detection dataset. Source code for the complete system is available at
http://www.cs.berkeley.edu/ ˜ rbg/rcnn.
介绍
R-CNN系列论文(R-CNN,fast-RCNN,faster-RCNN,mask RCNN),而R-CNN则可以说是利用深度学习进行目标检测的开山之作. 虽然,在R-CNN之前,OverFeat已经是用深度学习的方法做目标检测,但R-CNN是第一个可以真正可以工业级应用的解决方案。可以说改变了目标检测领域的主要研究思路,紧随其后的系列文章:Fast-RCNN ,Faster-RCNN,Mask RCNN都沿袭R-CNN的思路。
下面我们首先介绍几个计算机视觉方面的基础知识:
具体详细细节,请点击下方链接:
计算机视觉四大基本任务(分类、定位、检测、分割)
数据集
经典的目标检测算法在区域中提取人工设定的特征(Haar,HOG)。本文则需要训练深度网络进行特征提取。可供使用的有两个数据库:
- 一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。
- 一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。
本文使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测
名词解释
物体检测算法常用到的概念:
下面我们讲解一下在物体检测算法中常用到的几个概念:bbox,IoU,Anchor Boxes,非极大值抑制,Region Proposal。
Bounding Box regression (边框回归详解)
Region Proposal 方法比传统的滑动窗口方法获取的质量要更高。比较常用的Region Proposal方法有:SelectiveSearch(SS,选择性搜索)、EdgeBoxes(EB)。
基于Region Proposal目标检测算法的步骤如下:
Selective Search: PyThon代码实现
selective search算法首先使用基于图的图像分割算法,根据颜色对图像进行分割。如下图所示,左边是原图,而右图是分割之后的图。
论文主要结构
R-CNN的主要结构就是:
- 输入图片
- 用select search方法在每张图像上选取约2000个region proposal,其中region proposal就是object有可能出现的位置。然后根据这些region proposal构造训练和测试样本,注意这些region proposal的大小不一,另外样本的类别是21个(包括了背景)
- 然后是预训练,即在ImageNet数据集下,用AlexNet进行训练。然后再在我们的数据集上fine-tuning,网络结构不变(除了最后一层输出由1000改为21),输入是前面的region proposal进行尺寸变换到一个统一尺寸227 * 227,保留f7的输出特征2000 * 4096维。
- 针对每个类别(一共20类)训练一个SVM分类器,以f7层的输出作为输入,训练SVM的权重4096 * 20维,所以测试时候会得到2000 * 20的得分输出,且测试的时候会对这个得分输出做NMS(non-maximun suppression),简单讲就是去掉重复框的过程。同时针对每个类别(一共20类)训练一个回归器,输入是pool5的特征和每个样本对的坐标即长宽。
论文中图示如下:
核心要点: R-CNN论文中使用的CNN网络是AlexNet,数据集为ImageNet
- 获取输入图像
- 准备Region Proposal.利用Selective Search方法来获取2000个候选区域(region proposal)
- 将候选区域分别输入CNN网络(这里需要进行缩放)进行特征提取
- 将CNN的输出输入到每一类的SVM中进行类别的判定
- 使用回归器精细修正候选框位置
训练过程
-
准备region proposal。 对于训练集中的所有图像,采用selective search方式来获取,最后每个图像得到2000个region proposal。
-
准备正负样本。如果某个region proposal和当前图像上的所有ground truth中重叠面积最大的那个的IOU大于等于0.5,则该region proposal作为这个ground truth类别的正样本,否则作为负样本。另外正样本还包括了Ground Truth。因为VOC一共包含20个类别,所以这里region proposal的类别为20+1=21类,1表示背景。简单说下IOU的概念,IOU是计算矩形框A、B的重合度的公式:IOU=(A∩B)/(A∪B),重合度越大,说明二者越相近。
-
预训练。这一步主要是因为检测问题中带标签的样本数据量比较少,难以进行大规模训练。采用的是Krizhevsky在2012年的著名网络AlexNet来学习特征,包含5个卷积层和2个全连接层,在Caffe框架下利用ILSVRC 2012的数据集进行预训练,其实就是利用大数据集训练一个分类器,这个ILSVRC 2012数据集就是著名的ImageNet比赛的数据集,也是彩色图像分类。
-
fine-tuning。将2中得到的样本进行尺寸变换,使得大小一致,这是由于2中得到的region proposal大小不一,所以需要将region proposal变形成227 * 227。本文中对所有不管什么样大小和横纵比的region proposal都直接拉伸到固定尺寸。然后作为3中预训练好的网络的输入,继续训练网络,继续训练其实就是迁移学习。另外由于ILSVRC 2012是一个1000类的数据集,而本文的数据集是21类(包括20个VOC类别和一个背景类别),迁移的时候要做修改,将最后一个全连接层的输出由1000改成21,其他结构不变。训练结束后保存f7的特征。
-
针对每个类别训练一个SVM的二分类器。输入是f7的特征,f7的输出维度是2000* 4096,输出的是是否属于该类别,训练结果是得到SVM的权重矩阵W,W的维度是4096* 20。这里负样本的选定和前面的有所不同,将IOU的阈值从0.5改成0.3,即IOU<0.3的是负样本,正样本是Ground Truth。IOU的阈值选择和前面fine-tuning不一样,这里链接3的解释是:前面fine-tuning需要大量的样本,所以设置成0.5会比较宽松。而在SVM阶段是由于SVM适用于小样本,所以设置0.3会更严格一点。
-
回归。用pool5的特征6* 6* 256维和bounding box的ground truth来训练回归,每种类型的回归器单独训练。输入是pool5的特征,以及每个样本对的坐标和长宽值。另外只对那些跟ground truth的IOU超过某个阈值且IOU最大的proposal回归。详细说一下:对于某个region proposal:R,以及其对应的Ground truth:G,我们希望预测结果是:P,那么我们肯定希望P尽可能接近G。这里通过对pool5层的特征X做线性变换WX得到变换函数F(X),这些变换函数作用于R的坐标达到回归的作用(包括对x,y的平移以及对w,h的缩放)。因此损失函数可以表达为:R和G的差距减去P和G的差距要尽可能小。
下面是R-CNN 整个系统的流程图
测试过程
1、输入一张图像,利用selective search得到2000个region proposal。
2、对所有region proposal变换到固定尺寸并作为已训练好的CNN网络的输入,得到f7层的4096维特征,所以f7层的输出是2000 * 4096。
3、对每个类别,采用已训练好的这个类别的svm分类器对提取到的特征打分,所以SVM的weight matrix是4096* N,N是类别数,这里一共有20个SVM,N=20注意不是21。得分矩阵是2000 * 20,表示每个region proposal属于某一类的得分。
4、采用non-maximun suppression(NMS)对得分矩阵中的每一列中的region proposal进行剔除,就是去掉重复率比较高的几个region proposal,得到该列中得分最高的几个region proposal。NMS的意思是:举个例子,对于2000 * 20中的某一列得分,找到分数最高的一个region proposal,然后只要该列中其他region proposal和分数最高的IOU超过某一个阈值,则剔除该region proposal。这一轮剔除完后,再从剩下的region proposal找到分数最高的,然后计算别的region proposal和该分数最高的IOU是否超过阈值,超过的继续剔除,直到没有剩下region proposal。对每一列都这样操作,这样最终每一列(即每个类别)都可以得到一些region proposal。
5、用N=20个回归器对第4步得到的20个类别的region proposal进行回归,要用到pool5层的特征。pool5特征的权重W是在训练阶段的结果,测试的时候直接用。最后得到每个类别的修正后的bounding box。
结论
最近几年,物体检测陷入停滞,表现最好的检测系统是复杂的将多低层级的图像特征与高层级的物体检测器环境与场景识别相结合。本文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升。
我们取得这个性能主要通过两个方面:
第一是应用了自底向上的候选框训练的高容量的卷积神经网络进行定位和分割物体。另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。我们展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后采用稀少数据(检测)去调优定位任务的网络。我们猜测“有监督的预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。
最后,我们注意到能得到这些结果,将计算机视觉中经典的工具和深度学习(自底向上的区域候选框和卷积神经网络)组合是非常重要的。而不是违背科学探索的主线,这两个部分是自然而且必然的结合。
缺点:
-
R-CNN 训练需要很多步骤,从卷积网络到SVM再到Bounding box回归,整个Pipeline过于复杂
-
训练需要大量时间和空间 我们需要为每个类别都训练一个二分类的SVM,而且由于SVM的特征来自于卷积网络的全连接层,这是两个模型不好集成,因此需要把卷积网络的特征写到磁盘上,这要占用大量磁盘空间和IO时间
-
预测的速度慢,对于每个候选区域,我们都要用卷积网络提取特征(基本相对于一次forward计算),即使有一个GPU,预测一个图片平均都需要47s的时间
参考资料:
https://blog.csdn.net/u014380165/article/details/72851035
http://blog.csdn.net/shenxiaolu1984/article/details/51066975
http://blog.csdn.net/WoPawn/article/details/52133338
https://blog.csdn.net/v1_vivian/article/details/78599229
https://blog.csdn.net/liuxiaoheng1992/article/details/81743161