R-CNN是目标检测领域的鼻祖之作,开启了深度学习的热潮,R-CNN系列属于Two-stage流派,包括R-CNN、Fast-rcnn、Faster-rcnn
前言
R-CNN全称region with CNN features,用CNN取出区域中的特征,然后进行分类和回归。
一、R-CNN网络结构
正向传播步骤
1、首先确定RP(Region Proposal区域建议),这里用到的是Selective Search算法,从输入图像中搜索出2000个RP区域,计算每个相邻区域之前的相似性(颜色,纹理,尺度),并将相似度高的两区域合并成一个区域,重复以上合并步骤,直到整张图片变成一个区域。
2、模型选择:论文选用的数据集是(ImageNet ILSVC 2012),这是一个1000个分类的数据集,模型选用的是AlexNet,以此来进行CNN(由于AlexNet里有全连接层,所以输入图片的尺寸需固定(要求为227*227),在预处理时对图片进行放缩(resize操作))。
3、对经过模型训练后的特征送入每一类的SVM分类器,判断是否属于该类。
4、使用回归器精细修正候选框位置。
具体操作:
a、利用SS算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。
b、将2000个候选区域缩放到227*227的尺寸,接着将候选区域输入AlexNet网络获取4096维的特征得到2000*4096维矩阵。
c、将2000*4096维特征与20个SVM(二分类的分类器,这里的20指的是20类(VOC数据集有20类))组成的权值矩阵4096*20相乘,获得2000*20维矩阵表示每个建议框(RP)是某个目标类别的得分。分别对上述2000*20维矩阵中每一列即每一类进行非极大值抑制,剔除重叠建议框,得到该列即该类中得分最高得到一些建议框。
d、对NMS(非极大值抑制)处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
二、Fast R-CNN
Fast RCNN 由 Ross Girshick 在RCNN的基础上改进,提升了测试和训练速度。使用VGG-16作为网络的backbone,与R-CNN相比训练时间快九倍,测试时间快213倍。准确率从62%提升至66%(在VOC数据集的基础上)。其中,SS操作在CPU上要两秒才能完成,而特征提取+分类+位置精修只需要零点几秒即可完成。
步骤流程:
1、候选区域生成方法不变,即ss算法随机采样获得候选框。
2、将尺寸不一的整幅图输入cnn(R-CNN是将2000个RP区域都进行CNN,这样会使用大量的储存空间,Fast R-CNN进行了优化),获得特征图;将候选区域映射到特征图feature map中得到特征矩阵。
3、将每个特征矩阵通过ROI pooling(Region of Interest感兴趣区域)层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果(R-CNN是用SVM做的分类器以及回归器,这里用了全连接层做预测)
与R-CNN区别:
R-CNN依次将候选框区域输入卷积神经网络得到特征(每张图片做2000次卷积);Fast R-CNN将整张图片送入网络,接着从特征图像上提取相应的候选区域,这些候选区域的特征不需要再重复计算。
三、Faster R-CNN
跟Fast R-CNN相比,Faster R-CNN将(RP+特征提取+分类+位置精修)放在一个整体中,并且使用RPN区域生成网络候选框提取模块(第一张图片蓝色圈圈部分),以此代替SS算法(耗时太长),其余和Fast R-CNN一样,但是效果显著(一秒检测五张图片,5fps)
因为仍需要先生成候选区域,再进行分类,所以它仍被划分在两阶段(two-stage)的目标检测网络。
实现端对端的过程,将训练及预测一体。
步骤:
1.将图像输入网络得到相应的特征图。
2.使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵。
3.将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。