Faster-RCNN

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (neurips.cc)

论文概述

image-20220206101136285

目前,先进的目标检测算法都是依赖于区域建议算法去假设物体位置的,区域建议的计算成为目标检测算法的瓶颈。而Faster-RCNN引入了区域建议网络RPN,该网络与检测网络共享全图像卷积特征,从而实现几乎无成本的区域建议。引入RPN网络也使得Faster-RCNN成为了一个完全的end-to-end的CNN目标检测模型。

区域生成网络RPN

RPN网络代替了Fast-RCNN模型中的selective search(SS)。它先通过对应关系把特征图的点映射回原图,在每个对应的原图设计不同的固定尺度窗口bbox,根据该窗口的ground truth的IoU给它标记正负标签,让它学习里面是否有目标。通过一个简单的交替优化,RPN和Fast-RCNN可以共享卷积特征。为了使RPN与Fast-RCNN相统一,作者提出了一个训练方案,该方案在区域建议任务和目标检测任务间交替进行微调,同时保证proposal的稳定。这种方案收敛很快,并且使两个网络可以共享数据。而SS是使用CPU计算,因而计算时间较慢,也没法共享计算。

在RPN中只需要找出物体的大致地方,因此作者对bbox做了三个固定:固定尺度变化(三种尺度)、固定scale ratio变化(三种ratio),固定采样方式(只在特征图的每个点在原图中的对应RoI上采样)

作者在Fast-RCNN的基础上增加了两个卷积层来构建RPN:一个将每个conv map编码到一个短的特征向量上,另一个卷积层在每个conv map上输出客观性的评分以及关于k个涉及到不同的尺度和纵横比的区域建议的回归边界(通常取k为9)

RPN工作原理

image-20220206101136285

RPN以一副图像(任意大小)作为输入并输出一组矩形对象建议并给出得分。为了生成区域建议,一个小network滑过最后一个共享的卷积层输出的特征图。该网络最后全连接到输入的卷积特征图的一个n×n的空间窗口中。每个滑动窗口都映射到一个低维向量上。这个向量被提供给两个同级的全连接层(边界框回归层reg、分类层cls)。

该体系结构由一个n×n的卷积层、和两个兄弟级的1×1层(reg、cls)并将ReLUs应用于n×n转换层的输出。

RPN最终输出的proposals会出现部分重叠。为了减少冗余,作者根据proposal的cls分数对proposal进行非极大抑制NMS(IoU阈值为0.7)。这使得每幅图像最终有大约2k个proposal。NMS之后,再对前n个proposal进行检测。实验证明,NMS在大幅减少proposal数量的情况下,不会损害最终的检测精度。

Anchor

Anchor是特征图中的每个点在原图中的对应位置,也就是初始检测框。

在每个滑动窗口位置上,作者同时预测k个区域proposal(一个点对应k个anchor),因此reg有4k个输出,来标记k个box的坐标;而cls有2k个输出来评估每个proposal是对象或不是对象的概率。这k个proposal是k个box的参数表示,即上面的Anchors。每个anchor是其滑动窗口的中心位置,并于比例和宽高比相关联。作者使用了3个尺度与3个纵横比,因此每个滑动位置放置9个anchor。一个W×H的卷积特征图就总共有W×H×k个anchor。因为anchor具有平移不变特性,对anchor的计算就是对对应该anchor的proposal的计算.和不是平移不变的 MultiBox 方法相比,该方法使参数减少了一个数量级。

作者对每个anchor使用128、256、512三个尺度以及一比一、一比二、二比一三个纵横比,发现即使物体比底层的接受域还要大,该算法仍然可以检测出物体。在实际中,人们也可以只通过观察物体的中间位置来感知物体。这也就作者的解决方案不需要使用多尺度特征或多尺度滑动窗口来预测大的物体,节省大量运行时间。

对于跨越图像边界的anchor。训练中,作者忽略所有跨越图像边界的anchor,以避免带来极大的误差,使得结果无法收敛。在测试中,对于这些anchor,作者只保留其图像中的部分

损失函数

作者将anchor打上正负标签。正标签:与ground-truth box重叠程度IoU最高的区域;或者IoU大于0.7的anchor。负标签:对于所有的ground-truth box其IoU都小于0.3的anchor。不属于正负样本的样本对于目标检测没有帮助。

根据这些定义,作者最小化Fast-RCNN中的多任务损失目标函数
$$

L(\{p_i\},\{t_i\})=\frac{1}{N_{cls} }\sum{L_{cls}(p_i,p_i^{*})}+\lambda\frac{1}{N_{reg} }\sum{p_i^{*}L_{reg}(t_i,t_i^{*})}

$$
此处的i为该batch中anchor的索引,pi是anchor为对象的概率,如果anchor为正pi*=1,如果anchor为负pi*=0;ti为预测边界框四个参数化坐标,ti*是与一个正anchor相关的ground-truth box。

Lcls(分类损失):使用log loss;Lreg(回归损失):使用smooth L1(R),而只有anchor为正时,Lreg才会被激活。
$$
L_{reg}(t_i,t_i^{})=R(t_i,t_i^{})
$$
作者使用Ncls、Nreg两项进行归一化,并使用lambda作为平衡因子。
image-20220206101136285

在回归时,要对4个坐标参数化。其中x,y,w,h为边界框box的中心位置、宽与高。x,xa,x*是预测box、anchor box、ground-truth box的参数。

不同于其他对任意大小区域进行特征池化(回归权值由所有区域大小共享)的边界回归,作者的回归特征在特征图上具有相同的大小。为了适用于不同的大小,作者设置了一组k边界回归器。每个回归器负责一个尺度和一个纵横比,并且这k个回归器不共享权重。

优化

RPN网络是以图像为中心的。每个batch中都含有正负样本,对所有参数的优化会使得结果偏向负样本。因此作者随机对256个anchor进行采样,尽量使得正负样本的比例达到一比一(如果正样本小于128再用负样本填充)。

并且作者通过标准偏差为0.01的零均值高斯分布中提取权重来初始化所有层,所有层的初始化从一个ImageNet分类模型中获得,并且调优ZF网络、VGG的jconv3_1以节省内存

将RPN应用于目标检测

作者将Fast-RCNN与RPN相结合,使得二者的卷积层计算可以共享。由于Fast-RCNN依赖于固定的对象proposal并且如果在学习 Fast R-CNN 的同时更改proposal机制,尚不清楚先验是否会收敛。因此作者没有简单的定义一个包含RPN与Fast-RCNN的网络,而是通过交替优化学习共享特征。

  1. 使用ImageNet预训练模型初始化,并对区域建议任务做端到端的微调(训练RPN网络
  2. 利用第一步生成的区域建议,训练一个独立的检测网络,该检测网络也使用ImageNet预训练模型初始化(训练FRCNN网络
  3. 使用检测网络对RPN网络进行初始化,但固定两个网络共有的层,只微调RPN网络特有的层。此时,两个网络共享卷积层(训练RPN网络
  4. 固定共享的卷积层,微调Fast-RCNN的全连接层。(由此形成一个统一的网络)(训练FRCNN网络

在这里的训练过程类似于一种“迭代”的过程,不过只迭代了两次,因为迭代次数再增加不会带来性能上的提升。

做出的贡献

  1. 设计卷积网络处理区域建议RPN,使得目标检测系统实现完全的end to end
  2. 使用多任务损失函数
谢谢你请我吃糖果
0%