R-CNN系列算法详细解读文章:
- R-CNN算法解读
- SPPNet算法解读
- Fast R-CNN算法解读
- Faster R-CNN算法解读
- Mask R-CNN算法解读
目录
- 1、概述
- 1.1 获取目标候选框
- 1.2 候选框提取特征
- 1.3 候选框分类及边框回归
- 2、R-CNN系列算法概述
- 2.1 R-CNN算法
- 2.2 SPPNet算法
- 2.3 Fast R-CNN算法
- 2.4 Faster R-CNN算法
- 2.5 Mask R-CNN算法
- 3、R-CNN系列算法对比
1、概述
R-CNN系列检测算法是两阶段检测算法,可大体分为三步:第一步从待检测图片中获得若干目标候选框(Region Proposal);第二步对每个候选框提取特征;最后对利用该特征对候选框做分类和边框回归。
1.1 获取目标候选框
获取目标候选框方法有如下四种,可分为:滑动窗口、规则块、选择性搜索及自动学习。
- 第一种滑动窗口,多见于传统检测算法,利用手工设计设计加adaboost分类器;滑动窗口本质上就是穷举法,利用不同尺度及不同宽高比的窗口尽量包含多的图像块试图包含图像中所有目标,力求把图像中目标“穷举”出来,最后应用分类器分类。常见做法有图像多尺度加固定窗口大小或多尺度窗口采样得到子图像块,很显然,这种做法很容易形成候选框冗余,减慢了整体检测时间。
- 第二种规则块,在第一种滑动窗口的情况下,结合目标的特性比如大小及长宽比就行筛选,一定程度上减小了候选框冗余,但整体还是复杂度很高。
- 第三种选择性搜索方式,前面两种方式形成的候选框都存在大量冗余情况,所以如何将冗余框去除并有效合并是一个重要问题,选择性搜索正是利用这一点,自底向上进行相邻框重叠区域合并,从而减少冗余。论文”Selective Search for Object Recognition”中提到选择性搜索算法首先对图像利用felzenszwalb分割算法进行区域分割,然后利用区域与区域之间的相似度进行合并(相似度量包含有颜色、纹理、大小及吻合度)。R-CNN、SPPNet、Fast R-CNN均采用这种方式。
- 第四种自动学习方式,也是Faster R-CNN提出的利用RPN网络进行自动学习,RPN网络基于设置的anchor进行学习,最后通过RPN网络预测得到感兴趣区域,这种方式有点类似YOLO系列一阶段检测算法,只是RPN网络不会预测目标的具体类别,只会预测是否是“目标”(objectness)。
1.2 候选框提取特征
传统检测算法提取图像特征都是手工设计特征,比如:Haar、HOG,灰度共生矩阵、LBP、SIFT等等,这些特征在检测特定目标下可能有用,但扩大化到检测其他目标或许会失去效果,而且手工设计特征需要一定的专业性,要设计一个新的特征,需要的专业知识没有多年的经验是无法办到的。随着2012年AlexNet的出现,卷积神经网络的提取特征能力得到体现。R-CNN系列检测算法正是利用这一优势才得以在检测领域打败传统检测算法。
1.3 候选框分类及边框回归
图像检测算法怎么和图像分类算法联系起来,一个简单的思想就是将图像“穷举分块”,然后对每一个子图像块进行是否是目标的分类,是目标,则可算检测到目标。这无疑会造成目标会有很多重叠的检测框,所以后面用nms算法去重。为了让最后的检测框更准,所以R-CNN又提出边框回归,后续基于R-CNN算法的改进都加入了边框回归。分类算法,从R-CNN及SPPNet的单独SVM,到Fast/Faster/Mask R-CNN的softmax;不同是的前者是独立模块,后者将分类和回归融合在一个网络中作为两个分支用多任务损失一起参与训练。
2、R-CNN系列算法概述
2.1 R-CNN算法
R-CNN算法用Selective Search的候选区域选择方式替换了经典的滑窗方式,使得候选框“少而精”(推理阶段取了2000个候选框),然后用AlexNet对2000个候选框依次做提取特征操作,将特征保持在磁盘空间里,最后用SVMs分类器输入候选框特征进行分类,bounding-box回归也是利用这些特征。R-CNN算法是特点是这些操作都是独立的,特征提取操作相对于后面的算法非常冗余。
2.2 SPPNet算法
SPPNet作者发现卷积层可以接受任意大小的输入并输出任意尺寸的特征图,但分类器(SVM/softmax)或者全连接层只能接受固定尺寸的输入。为了让卷积神经网络能接受任意大小的输入图像,提出SPP Layer(空间金字塔池化层),它能将任意输入大小图像在全连接层之前保证是一个固定长度的向量。所以SPP Layer是能在分类网络、检测网络中通用的,主要处理流程如下:
SPPNet相对于R-CNN的改进就是通过加入SPP Layer后将2000次提取特征的操作合并为1次操作,大大减少了推理时间,另外通过多尺度训练也增加了模型的鲁棒性。但候选框生成、提取特征、分类、bounding-box回归还是独立模块,训练和推理效率依然很低。
2.3 Fast R-CNN算法
从算法框图可见,Fast R-CNN算法将特征提取、分类及bounding-box回归融合在一起了,采用多任务损失将分类和回归联合训练,训练和推理可以一步到位,不用存储特征占用额外的磁盘空间。另外Fast R-CNN也设计了RoI Pooling层(可视为单个级别的SPP层)应对不同大小的区域候选框用于生成固定大小的特征向量。针对候选框生成方面,依然采用SS算法(大部分的时间耗时在这里)。
2.4 Faster R-CNN算法
基于Fast R-CNN的劣势提出改进,提出了RPN网络用于替换SS算法让其自动生成目标区域候选框。RPN网络在特征图上利用在3x3大小的滑窗内设定9个anchor,在anchor的基础上预测出目标区域候选框(RoI),通过RPN与Fast R-CNN共享特征提取部分的参数,达到统一训练/推理的目的,相对于SS加上Fast R-CNN大大减少了检测时间。
2.5 Mask R-CNN算法
从算法框图可以看出,Mask R-CNN是 Faster R-CNN的基础上新增一个mask分支实现的,并且为了让RoI区域特征保持空间一致性,提出了RoIAlign替换了Faster R-CNN中的RoI Pooling,纠正了RoI Pooling在特征图上的取值偏移,使得检测分支和mask分支在特征图上的RoI区域和原图的RoI区域在空间位置上对齐,这也是Mask R-CNN在检测领域比Faster R-CNN更高的原因之一。
3、R-CNN系列算法对比
算法 | 候选框生成 | 特征提取 | 分类 | 回归 | 特点 |
---|---|---|---|---|---|
R-CNN | SS | AlexNet | SVMs | L2回归偏移量 | 四个模块独立,需要额外的特征存储,特征提取重复操作 |
SPPNet | SS | ZF-5 | SVMs | L2回归偏移量 | 提出SPP层,使得特征提取合并为一次操作,但四个模块依然独立,需要额外的特征存储 |
Fast R-CNN | SS | VGG-16 | Softmax | smoothL1回归偏移量 | 将特征提取、分类、回归融合在一起,用多任务训练,提出RoI池化层,SS模型依然耗时严重 |
Faster R-CNN | RPN | ZF-5/VGG-16 | Softmax | smoothL1回归偏移量 | 提出RPN网络自动生成区域候选框,将RPN与Fast RCNN网络融合,形成端到端推理 |
Mask R-CNN | RPN | ResNet50/101 | Softmax | smoothL1回归偏移量 | 提出RoI Align层,减少RoI区域特征在空间位置上偏移,新增Mask分支,对目标定位有一定积极作用 |