在博文/fengbingchun/article/details/87091740 中对Fast R-CNN进行了简单介绍,这里在Fast R-CNN的基础上简单介绍下Faster R-CNN。
目标检测领域从R-CNN开始,通过引入卷积神经网络取得了很多突破性的进展,但是始终未能摆脱传统候选区域算法(如Selective Search)的限制。使用Selective Search算法进行候选区域的确定使得Fast R-CNN算法的运算时间大大增加,使得Fast R-CNN网络结构模型在实时性方面达不到要求。为了解决候选区域提取这个瓶颈,进一步共享卷积运算,任少卿等人在提出了Faster R-CNN,论文名字为”Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”,可以从/pdf/1506.01497.pdf 直接下载。
Faster R-CNN主要包括两个模块:一个是深度全卷积网络RPN,该网络用来产生候选区域;另一个是Fast R-CNN检测器,使用RPN网络产生的候选区域进行分类与边框回归计算。整个系统共享卷积特征图,即此特征图既作为RPN网络的输入也作为Fast R-CNN的输入,是一个统一的用来进行物体检测的网络,如下图所示。可以简单理解Faster R-CNN为RPN和Fast R-CNN的结合,通过RPN代替Selective Search提取候选区域,加快了运行速度。
Faster R-CNN主要解决了两个问题:一个是提出了候选区域生成网络RPN,能够快速的生成候选区域;另一个是使RPN与Fast R-CNN共享特征提取网络,极大的降低了模型的参数空间规模,实现参数共享。
Faster R-CNN网络的核心点就是RPN候选区域生成网络的设计。RPN网络结构的设计基于卷积神经网络,其输入是一张图像,然后给出一系列的候选物体矩形框,每个矩形框附带一个分数来表示其属于真实物体的信念值。RPN由一个全卷积网络构建,为了与Fast R-CNN共享参数,RPN与Fast R-CNN共享卷积层。
RPN(Region Proposal Network):候选区域网络,是一种全卷积网络(Fully-Convolutional Network, FCN),主要用于生成候选区域,也就是估计目标物体的位置和大小,它与Fast R-CNN共享卷积层。通过在最后一个共享的卷积层输出的特征图矩阵上用d个n*n的窗口进行滑窗处理,映射为d维特征向量(对于ZF是256-d)。该向量经过两个全连接层:边框回归层(reg)和目标分类层(cls)。回归层和分类层是两个独立平行的全连接层,回归层主要是对原始目标的位置进行估计操作,分类层主要是对目标进行分类,得到目标属于某个类别的概率。在每一个滑动窗口的位置,同时预测k个候选区域,所以边框回归层有4k个输出(x,y,w,h分别为候选框的中心坐标和宽高),用来确定目标的位置;分类层有2k个得分输出,估计每个候选框属于前景(不区分具体类别)还是背景的概率。k个参考box,称之为anchor,对k候选框进行参数化。每个anchor对应一种尺度(scale)和一种长宽比(ratio),并以当前滑动窗口中心为基准点。对于大小为W*H的卷积映射,总共有W*H*k个anchor。RPN的网络结构如下图所示:
候选区域网络以原始图像所提取出的卷积特征图矩阵作为输入,输出一系列的矩形候选区域框以及该矩形候选区域是否为目标的分数。
anchor:RPN提出了锚框(anchor boxes)的概念,锚框就是人为假定的在原始图像中的候选区域。一个anchor是指以当前滑动窗口中心为中心并且具有不同的尺度和纵横比的box。对训练集中的每张图像(每张图像含有手动标注的GT box)的anchor进行考察,对于每个GT box,如果anchor与其的重叠比例最大,则标为正样本,或者GT box与anchor的重叠比例大于0.7也记为正样本;如果anchor与GT box的重叠比例小于0.3则记为负样本,剩余的anchor和跨越图像边界的anchor不用于最终训练。通过不同的尺度和长宽比生成不同的anchor。
在Faster R-CNN中作者借鉴了两种不同深度的网络模型,分别为ZF-net模型以及VGG-net模型,并在它们的网络结构基础上加入了RPN,前者有5个可共享的卷积层,后者是更深的13个可共享卷积层。输入图像在经过RPN处理之后输出一组包围目标的矩形框集合,并且给出每一个矩形框是否是目标的概率值。
以ZF-net为例,该网络对任意尺寸的图像切割为224*224大小作为输入图像,前5层为卷积层、池化层交替进行的网络对输入图像进行原始特征提取,包括颜色、纹理等浅层特征,在第5个输出的卷积层之后加入RPN,采用一个大小为3*3的小网络对第5个卷积层之后得到的特征图上进行卷积运算,每一个滑动窗被映射成更低维度(ZF-net是256维),并用ReLU函数进行激活,得到一组特征向量,然后将得到的特征向量输入两个全连接层,分别是窗口分类层(cls layer)与窗口回归层(reg layer)。在目标检测中,待测目标形态大小各异,如果统一以相同大小的窗口进行检测,必然会影响检测效果,降低检测精度,因此Faster R-CNN算法为每个滑动窗口位置配置了9个基准矩形框来适配各种目标。对于每张输入的特征图像的每一个位置,使用9种尺度的候选窗口:三种面积{128*128, 256*256, 512*512}*三种比例{1:1, 1:2, 2:1},目的是尽可能的将尺度大小不一的特定目标区域特征检测出来,并判断候选窗口是否包含感兴趣的目标。这些候选窗口称为锚点(anchor)。锚点还具有平移不变性,锚点计算函数同样具有平移不变性,如果图像中的物体发生了平移,判断函数就要计算感兴趣区域(Region of Interest, RoI)相应的平移,并对所有可能位置进行计算。平移不变性可以减少参数量,增强模型泛化能力。
候选区域,就是图像中可能包含待测目标的区域,可以利用图像中的边缘、纹理和颜色等信息来获得。生成候选区域相当于目标的粗检测过程,目的在于减轻后面分类网络的压力,以保证在选取较少检测窗口的情况下,保持较高的检测精度。
在Faster R-CNN算法中,候选区域生成网络(RPN)是一个卷积神经网络,该网络以特征提取网络输出的特征图作为输入,输出多种尺度和宽高比的矩形候选区域。如上图所示,该网络首先使用一个滑动窗口在特征图上进行滑动,该网络首先使用一个滑动窗口在特征图上进行滑动,将滑动窗口经过的每个位置上的特征映射成一个256维(选用ZF-net作为特征提取网络时为256维,,选用其它网络作为特征提取网络时,该值会有变化)的特征向量,然后将每个特征向量输入到两个全连接层当中,一个全连接层输出2*9=18个分数,另一个全连接层输出4*9=36个修正参数。Faster R-CNN算法为每个滑动窗口位置定义了9个基准矩形框(锚点),得到每个滑动窗口位置的修正参数之后,利用修正参数对基准矩形框进行修正,每个基准矩形框分别对应4个修正参数,最后每个滑动窗口位置得到9个候选区域。18个分数为候选区域的评分,每个候选区域对应2个分数,分别代表该候选区域内包含和不包含待测目标的可能性。候选区域生成网络对于每个基准矩形框会输出4个修正参数,利用这4个修正参数对基准矩形框进行修正即可得出候选区域。
候选区域生成网络的损失函数是一个多任务损失函数,通过该多任务损失函数将候选区域的类别置信度和修正参数的训练任务统一起来。
分类回归网络:即Fast R-CNN,获得候选区域之后,便要对候选区域进行分类回归操作。在Faster R-CNN算法中,分类回归网络以特征提取网络输出的特征图和候选区域生成网络输出的候选区域为输入,输出候选区域对应各类别的置信度和修正参数。修正参数用于对候选区域进行修正。
分类回归网络结构如下,由于候选区域大小、形状各不相同,分类回归网络首先使用一个RoI pooling层将候选区域所包含的特征池化成大小、形状相同的特征图,接着使用两个全连接层fc6、fc7对特征图进行特征映射,然后使用全连接层fc/cls、fc/bbox_reg分别输出候选区域对应各个类别的分数和修正参数,最后使用Softmax层将分数进行归一化,从而得到候选区域对应各个类别的置信度。
RoI pooling层:将不同候选区域所包含的特征图转换成固定维度的特征向量,从而匹配后续的权连接层。
Dropout方法:深度学习神经网络的性能很依赖训练数据,当训练数据较少时,很容易出现过拟合现象。因此Faster R-CNN算法在分类回归网络中使用Dropout来防止过拟合。Dropout是指在神经网络每次迭代训练过程中,随机选择神经网络部分隐层节点在该次训练中停止工作,这些停止工作的节点不会影响网络输出,也不会在该次训练中进行更新,参数值保持不变。Dropout是一种非常有效的防止过拟合方法,通过平均多个网络的预测概率,并且抑制非关键性特征,最终提高神经网络泛化能力。
非极大值抑制(Non-Maximum Suppression, NMS):在Faster R-CNN算法中,神经网络针对每种目标会输出大量带置信度的检测框,这些检测框之间存在包含或者相互重叠的情况,并且包含的物体可能相同,也可能不相同。虽然置信度越大,检测框包含物体的概率越高,但有可能这些置信度较大的检测框实际上针对的是同一个物体,只是该物体特征较为明显才导致置信度较高。因此,若只是简单的对检测框按置信度排序,然后筛选出高置信度的检测框,可能会出现漏检的情况。
为了解决上述问题,Faster R-CNN算法使用非极大值抑制算法来对检测框进行筛选,该算法是一种局部最大搜索方法,所谓局部就是一个邻域,邻域包含两个可变的参数,邻域的维数和邻域的大小。非极大值抑制算法的主要思想就是按照一定的比较规则筛选出局部极大值,抑制局部极小值。如下所示为非极大值抑制算法的主要步骤,其中集合S是带置信度的检测框集合,集合S’是经过筛选之后的检测框集合:
(1). 将集合S的检测框按照置信度进行排序;
(2). 只要集合S不为空,进行以下步骤:
a. 从集合S中取出置信度最高的检测框w;
b. 将w插入到集合S’中;
c. 对于集合S中剩下的每一个检测框,如果该检测框与w之间的重叠率大于阈值(比如0.6),将该检测框从集合S中删除。
分类回归网络的损失函数是一个多任务损失函数。
Faster R-CNN网络模型的训练步骤如下:
(1). RPN网络训练阶段:用经过ImageNet数据集训练过的神经网络模型初始化RPN网络,随后使用候选框以及真实组合成的训练对对RPN网络进行参数微调;
(2). Fast R-CNN网络训练阶段:用经过ImageNet数据集训练过的神经网络模型初始化Fast R-CNN网络,随后用训练图片经过第一阶段训练出的RPN网络产生的候选框训练Fast R-CNN网络。在此阶段RPN网络产生的候选框需要经过以下步骤的筛选:
a. 计算所有候选框与所有真实框的最大重叠区域比率;
b. 将最大重叠区域比率大于设定的阈值的候选框标记为目标区域,也就是正样本;
c. 若正样本的数目大于设定的阈值XX则从正样本中随机选取XX个作为正样本参与训练;
d. 将最大重叠区域比率小于设定的高阈值大于设定的低阈值的候选框区域作为负样本;
e. 若负样本的数目大于设定的阈值YY,则从负样本中随机选取YY个作为负样本参与训练;
(3). 用第二阶段训练的Fast R-CNN网络模型初始化RPN网络模型,但是在训练RPN网络的时候,只训练RPN网络特有的全连接层的连接权重矩阵,卷积特征提取层的参数不变,RPN网络与Fast R-CNN网络在这一阶段共享卷积特征提取层;
(4). 与第三阶段相同,固定卷积特征提取层的参数,只训练Fast R-CNN网络特有的全连接层的连接权重矩阵。
Faster R-CNN网络模型有效地将候选框提取的任务交由神经网络模型来完成,并提供了一种端到端(end-to-end)的模型训练方案,使得基于卷积神经网络的目标检测方案满足实时性的要求。
Faster R-CNN整体检测大致为:
(1). 把任意大小的图像输入CNN通过卷积层进行特征提取;
(2). 利用RPN网络产生高质量的候选框;
(3). 将候选框映射到CNN的最后一层卷积特征图上;
(4). 用RoI pooling层固定每个候选框的大小;
(5). 利用分类层和边框回归层对候选区域进行具体的类别判断和精确的边框回归。
在结构上,Faster R-CNN可以将特征抽取(feature extraction)、proposal提取、bounding box regression、classification都整合在一个网络中。
以上内容均来自网络,主要参考文献如下:
1.《基于Lexical R-CNN的视频描述》,吉林大学,硕论,
2.《基于深度学习的复杂背景下目标检测与分割方法》,中北大学,硕论,
3.《基于Faster R-CNN的工业CT图像缺陷检测研究》,南州交通大学,硕论,
4.《基于Faster R-CNN的目标检测算法的研究》,华南理工大学,硕论,
5./@smallfishbigsea/faster-r-cnn-explained-864d4fb7e3f8
6./qq_17448289/article/details/52871461
7./p/31426458
8.http://pancakeawesome.ink/%E5%BC%84%E6%87%82%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B(Faster-R-CNN)
GitHub:/fengbingchun/NN_Test
如果觉得《目标检测算法Faster R-CNN简介》对你有帮助,请点赞、收藏,并留下你的观点哦!