从R-CNN到Fast R-CNN再到Faster R-CNN的理解

目录

1.区域卷积网络 R-CNN

2.快速区域卷积网络 Fast R-CNN

3.更快区域卷积网络 Faster R-CNN

4.补充:Faster R-CNN细节详解


与图像分类任务不同,目标检测需要从图像中检测并定位特定的多个目标(即物体或对象)。利用卷积网络进行目标检测的基本思路是先推荐候选区域,再利用卷积网络对候选区域分类。下面对这三个进行说明。

1.区域卷积网络 R-CNN

R-CNN是一种目标检测模型。与图像分类不同,目标检测要求在图像中确定多个可能目标的位置。R-CNN采用了滑动窗口的策略来进行定位,在"利用区域识别"的思想指导下,取得了目标检测和语义分割的成功,下图是利用R-CNN进行目标检测的过程。

R-CNN目标检测的过程:

a)输入一幅图像;

b)自底向上提取大约2000个推荐区域并变换为固定大小;

c)用CNN计算每个推荐区域的特征;

d)用类别相关线性支持向量机对推荐区域进行分类

R-CNN包括3个关键模块:区域推荐、特征提取和区域分类。这三个模块的详细说明如下。

1)第一个模块是区域推荐(region proposal),用来给输入的图像生成2000个类别无关的区域推荐构成候选检测集。R-CNN采用的区域推荐方法是选择性搜索(selective search),其他推荐方法包括目标构成度(objectness)、类别无关目标推荐(category-independent object proposal)、首先参数最小割(Constrained Parametric Min-cut, CPMC)等。

2)第二个模块是特征提取,用来从每个区域推荐中提取固定长度为4096的特征向量。R-CNN利用卷积网络(比如AlexNet)来计算每个推荐特征,要求先把推荐转变为卷积网络的输入大小(比如227x227的RGB图像),并且做减均值处理。

3)第三个模块是区域分类,用来对每个推荐区域进行打分和筛选。R-CNN先采用类别相关线性支持向量机(SVM)对所提取的特征向量打分,再根据分值高低,通过贪婪非最大抑制策略进行筛选,保留高分推荐,拒绝低分推荐,拒绝条件是与某高分推荐的交并比(IoU)大于一个通过得到的阈值。

在训练过程中, R-CNN 还会面临标注数据稀少的问题,解决办法包括 3个有效步骤:有监督预训练是在一个大数据集( 比如 ImageNet )上对卷积网络进行判别预训练,但只有图像水平的标注,没有边框标记。领域相关微调是在校正区域推荐上对卷积网络继续进行微调训练,但需要将原来的 N路分类层修改 N+1 路分类层(其中 是目标类别数,加1个背景类别,对 ImageNet 而言, N= 1000 ), 微调所用的推荐正例要求与真实边框的交并比不低于 0.5 ,其余的都是背景反例。目标类别分类就是每类训练一个线性支持向量机,其中每类的正例简单定义为真实边框包围的图像区域,反例定义为与该类所有真实边框的交并比都低于重叠阈值(比如 0.3 )的图像区域,但控制反例数量需要使用标准硬反例挖掘方法( standard hard negative mining method)。

2.快速区域卷积网络 Fast R-CNN

R-CNN 利用深层卷积网络对目标区域推荐分类,可以达到较高的检测精度,但也有以下明显不足:

1)训练过程阶段过多;

2)训练时空费用大;

3)目标检测速度慢

因此,有人提出了 快速区域卷积网络( Fast R-CNN)  ,其优点表现在:①检测质量更高,② 训练过程统一, ③网络全层更新,④无须磁盘存储。

输入图像和感兴趣区域(RoI)先经过卷积池化处理产生卷积特征图,再经过RoI池化层处理得到固定大小的特征图,之后被全连接层映射成特征向量。每个RoI都有两个输出向量:softmax概率和边框回归偏移(bounding-box regression offset)。该结构用多任务损失进行端到端训练,Fast R-CNN的结构如下图所示。

输入的是一幅完整图像和多区域推荐,经过几个卷积和最大池化层的处理,产生一个共享卷积特征图,用来为每个区域推荐的RoI通过最大池化提取一个固定长度的特征向量。这些特征向量输入到一系列全连接层后,又分化成两个兄弟输出层:一个输出K个目标类别和1个背景类别的softmax概率估计;另一个输出K个目标类别的精细边框位置,每个位置用4个实数值表示。注意,每个类别都有一个边框回归器,如果有K个目标类别,就有K个边框回归器。

Fast R-CNN的结构中,RoI是指卷积特征图中的一个矩形窗口(也称为矩阵边框),可定义为四元组(x,y,h,w),其中(x,y)是左上角坐标,(h,w)是高度和宽度。RoI池化层利用最大池化把任何有效RoI内的特征都转变成一个具有固定空间大小HxW(例如7x7)的小特征图,其中HW是层超参数,独立于任何特定RoIRoI最大池化的具体实现过程是先将hxw大小的RoI窗口划分成HxW个大小约为h/Hxw/W的子窗口,再把每个子窗口的数值最大池化到相应的输出单元格。注意,池化是对每个特征图通道独立应用的。

Fast R-CNN可以用一个预训练过的深层卷积网络来初始化。这种初始化需要经历3个变换:把最后的最大池化层替换为一个 RoI池化层,其中HW的设置应与网络的第一个全连接层相容(例如,对 VGGNet-16 H = W = 7);②把最后的全连接层和 softmax 替换 为两个兄弟层,分别用来估计每个类别的 softmax 和边框位置;把网络改为接收两种数据输入,一种是图像列表,另一种是RoI列表。

Fast R-CNN 在训练过程中还可以利用特征共享的优点来进一步提高效率。一种策略是对随机梯度下降法的迷你块分层采样,采样N幅图像,再从每幅图像采 R/N个 RoI,使得来自同幅图像的 RoI可以在前向和反向过程中共享计算和内存。例如, N=2,R=128,, 速度可加快约 64倍,另一种策略是基于多任务损失函数,采用单阶段流式微调过程联合训练 softmax 分类器和边框回归器,而不是在3个独立的阶段分别训练 somax 分类器、 支持向量机和边框回归器。

3.更快区域卷积网络 Faster R-CNN

虽然 Fast R-CNN 利用共享卷积计算的策略,可以有效减少目标检测的运行时间 ,但却依赖非常耗时的区域推荐算法提供关于目标位置的假设。为了克服区域推荐算法的瓶颈问题,需要发展 Faster R-CNN,如选图所示。

Faster R-CNN采用了区域推荐网络(Region Proposal Network,RPN),可以与检测网络共享整幅图像卷积特征,从而产生几乎无代价的区域推荐。

Faster R-CNN由两个模块组成。第一个模块是用来产生区域推荐的RPN,第二个模块是使用推荐区域的Fast R-CNN检测器。整个系统是一个独立统一的目标检测网络,其中RPN模块采用当下流行的“注意力”机制,告诉Fast R-CNN模块应该看什么地方。Faster R-CNN可以在广大的尺度和高宽比范围内检测目标。

RPN是用一个全卷积网络来实现的,其输入是一幅(任意大小)图像,输出是一组带有对象得分的矩形目标推荐,如下图所示。引入RPN的最终目的是与一个Fast R-CNN目标检测网络共享计算,它们应该共用一组卷积层。RPN生成区域推荐的办法是在最后一个共享卷积层输出的卷积特征图上滑动一个小网络,如下图a所示。这个小网络的输入的是卷积特征图上每个滑动位置的nxn空间窗口(一般可取n=3),作用是把每个滑动窗口映射到一个低维特征(对ZFNet是256维,对VGGNet-16是512维,后连接ReLU)。然后,这个低维特征被输入到两个兄弟全连接层:一个是边框回归(reg),另一个是边框分类层(cls)。由于小网络是按滑动窗口方式操作的,因此全连接层在所有空间位置都可以共享,很自然就被实现为一个nxn卷积层再接两个分别对应于reg和cls的兄弟1x1卷积层。

RPN在每个滑动窗口位置要同时预测多个区域推荐,把最大可能的推荐数记为k。因此, reg 层用 4k 个输出来编码k个边框坐标, cls层输出 2k 个分数估计每个推荐是否为对象的概率。这k个推荐是相对k个参考边框来参数化的,称为锚点(anchor)。一个锚点位于当前滑动窗口的中心,并配有尺度和高宽比。默认情况下采用3个尺度(比如 128^2、256^2256^2512^2 )和3个高宽比(比如 1:1、1:2和2:1),每个滑动位置有 k=9 个锚点。对于一个大小为 WxH的卷积特征图,总共有 WHk个锚点。锚点具有平移不变性,计算锚点关联推荐的函数也具 平移不变性。 这就是说,如果在图像中平移一个对象,推荐也会跟着平移,并且在任何位置都能用相同的函数来预测推荐。此外,锚点的设计也给出了一种解决多尺度(和高宽 比) 问题的“锚点金字塔”新策略。这种新策略的性价比非常高,能够参考多尺度和多高宽比的锚点框,进行边框分类和回归,但仅依赖单一尺度的图像和特征图,只使用单一尺度的滤波器(即特征图上的滑动窗口) 正是因为这个基于锚点的多尺度设计,才可能像 Fast R-CNN 检测器那样,简单使用在单一尺度图像上计算的卷积特征。多尺度锚点的设计是使用共享特征而不增加额外时间解决尺度问题的关键。

为了训练 RPN ,需要给每个锚点分配一个二值类别标签,以说明它是否为对象。被赋予正标签的锚点有两类情况:第一类是与真实边框的交并比最高的锚点,第二类是与任意一个真实边框交并比都高于 0.7 的锚点。注意,一个真实边框有可能把正标签分配给多个锚点。通常第二类条件已经足以决定正样本,仍然采用第一类条件是因为在极少数情况下用第二类条件找不到正样本。一个非正锚点如果与所有真实边框的交并比低于 0.3 ,会被分配一个负标签。那些既不是正标签也不是负标签的锚点对训练目标是没有贡献的。

构造好正负锚点之后,训练RPN的问题就可以转换成最小化一个多任务损失函数。为了方便起见先定义损失函数\large smooth_l_1(x) :

对于一个锚点的情况,可以把分类损失\large L_c_l_s 和回归损失 \large L_r_e_g 分别定义为:

其中,\large i 是一个迷你批中锚点索引,\large p_i 是锚点\large i 被预测为目标的概率。正锚点的真实标签\large p^*_i是1,负锚点是0。是一个向量,表示预测边框的4个参数化坐标。也是一个向量,表示一个正锚点的真实边框坐标。而且\large t_i 和 \large t^*_i 的各分量还满足下面的数学关系:

其中,\large x 、\large y\large w和 \large h代表边框的中心坐标、宽和高。变量\large x\large x_a\large x^*分别代表预测边框、锚点边框和真实边框的相应坐标值(变量\large y\large w和 \large h的情况类似)。

对于多个锚点的情况,如果分类层 cls 和回归层 reg 的输出分别由 {\large p_i}和{\large t_i}组成,那么可以把归一化分类损失NCLS 、归一化回归损失 NREG 和总体加权损失函数\large L分别定义为

其中, \large N_c_l_s\large N_r_e_g分别用来归一化分类损失和回归损失。 参数\large \lambda是用来在 NCLS和 NREG之 间加权平衡的。在具体实现时, \large N_c_l_s 可以取为迷你批的大小(比如 \large N_c_l_s =  256 ), \large N_r_e_g可以取为锚点位置的数目(比如 \large N_r_e_g 约取为 2400)。\large p_iL_r_e_g 项表示回归损失仅对正锚点 ( \large p^*_i=1 )才被 激活,否 则不起作用。 在默认情况下,设置\large \lambda 10 ,大致可使 NCLS和 NREG 之间的平衡保持在比较合理的水平。
 

Faster R-CNN 为了在 RPN 和 Fast R-CNN 之间共享特征,采用了一种实用的交替优化训练算法,包括 4个步骤。第1步是用 ImageNet 预训练一个模型去初始 RPN ,并对 RPN 进行端到端的区域推荐任务微调 。第2步是用 ImageNet 预训练一个模型去初始化 Fast R-CNN 检测网络,并利用第1步的 RPN 对这个检测网络独立训练,注意此时 RPN和Fast R-CNN 还没有共享卷积特征。第3步是采用 Fast R-CNN 检测网络初始化 RPN 训练,但是固定共享卷积层,只微调 RPN 的独有层,现在这两个网络才开始共享卷积层。第4步保持共享卷积层不变,只微调 Fast R-CNN 的独有层。

4.补充:Faster R-CNN细节详解

1. 锚点

即特征图上的最小单位点,比如原始图像的大小是256x256,特征提取网络中含有4个pool层,然后最终获得的特征图的大小为 256/16 x 256/16,即获得一个16x16的特征图,该图中的最小单位即是锚点,由于特征图和原始图像之间存在比例关系,在特征图上面密集的点对应到原始图像上面是有16个像素的间隔,如下图所示:

2. 候选的ROI

针对每一个锚点,然后根据不同的尺度(128、256、512pixel)和不同的长宽比(1:1、0.5:1、1:0.5)产生9个边框(Bounding Box,BB),如下图所示,(左侧:锚点、中间:特征图空间单一锚点在原图中的表达,右侧:所有锚点在原图中的表达)对于16x16的特征图,最终产生16x16x9个候选的ROI。

1. 三种颜色代表三种尺度或尺寸:128x128,256x256,512x512。

2. 让我们挑出红色的边框。 三个边框的高宽比分别为1:1,1:2和2:1。

 3.ROI Pooling后的检测网络

如上图所示,在获得7x7x512的特征映射之后,通过Flatten操作将其展开为一维向量,然后经过两个全连接层对其进行分类和回归。一个有 N+1 个单元的全连接层,其中 N 是类的总数,另外一个是背景类。一个有 4N 个单元的全连接层。我们希望有一个回归预测,因此对 N 个类别中的每一个可能的类别,我们都需要 Δx、Δy、Δw、Δh。

4.NMS(非极大值抑制)

由于锚点经常重叠,因此建议最终也会在同一个目标上重叠。为了解决重复建议的问题,我们使用一个简单的算法,称为非极大抑制(NMS)。NMS 获取按照分数排序的建议列表并对已排序的列表进行迭代,丢弃那些 IoU 值大于某个预定义阈值的建议,并提出一个具有更高分数的建议。总之,抑制的过程是一个迭代-遍历-消除的过程。如下图所示:

  • 将所有候选框的得分进行排序,选中最高分及其所对应的BB;

  • 遍历其余的框,如果它和当前最高得分框的重叠面积大于一定的阈值,我们将其删除。

  • 从没有处理的框中继续选择一个得分最高的,重复上述过程。

 

————————————————————————————————————————————————————

如有不足,欢迎交流。

 

 

参考:深度学习 卷积神经网络从入门到精通 李玉鑑等著

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值