Faster R-CNN 学习
Posted chenying66
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Faster R-CNN 学习相关的知识,希望对你有一定的参考价值。
学习经典的目标检测网络!膜拜大佬!!
Faster R-CNN的目的是使用区域候选网络来实现实时的目标检测任务
- 当前的目标检测网络依赖于区域候选算法来假设对象的位置。SPPNet和Fast R-CNN等减小了运行时间,但是此时也使得区域候选的计算成为整个执行时间的瓶颈。在这个工作中,我们引入一个区域候选网络将全图片的卷积特征与检测网络进行共享,因此得到一个几乎不需要花费的区域候选。
- RPN是一个全卷积网络,它可以同时预测对象的边界和在每一个位置上的objectness评分。RPN端到端的进行训练从而产生一个高质量的区域候选,它被用在Fast R-CNN中用于检测。我们进一步合并RPN和fast R-CNN入一个单一的网络,通过共享他们的卷积特征,即采用attention机制。RPN部分告诉这个统一的网络应该看哪里。
- Fast R-CNN使用非常深的网络,实现几乎实时的速率,当然,其中忽略了花费在区域候选上的时间。
- 在本文中,我们展示了一个算法上的改变,通过一个深的卷积神经网络来计算候选,此时,当给定检测网络的计算时,候选的计算是几乎不需要花费的。通过在测试时间共享卷积,在计算候选时的额外的花费是小的。
- 在Fast R-CNN的卷积层的基础之上,我们增加一些额外的卷积层从而在一个规则网格的每一个位置上同时进行区域边界和目标性的回归。
RPN被设计用来有效的预测具有大范围尺度和纵横比的区域候选
上述图中,(a)图中表示图像和特征图的金字塔模型,此时分类器在所有尺度上运行, (b)此时,金字塔仅在特征图上运行, ©以回归的方式使用参考boxes的金字塔。
(a)叫做图像/特征金字塔,即使用不同的尺度对图像进行缩放,且为每一个尺度计算特征图。该种方法有效但是耗时
(b)此时固定特征图尺寸,但是在特征图上使用多尺度的滑动窗口。通常,这种方法与(a)联合使用
(c)本文使用的方法是对锚点进行金字塔·,更加的节省cost-efficient。此时针对具有不同的尺度和aspect比率的锚点box对bbox进行分类和回归。此时,图像、特征图、滑动窗口的尺寸都是唯一的。 - 我们介绍了新颖的“锚”盒,它们可以作为多种比例和纵横比的参考。 我们的方案可以看作是回归参考的金字塔(图1,c),它避免了枚举具有多个比例或纵横比的图像或过滤器。 当使用单比例尺图像进行训练和测试时,该模型表现良好,从而提高了运行速度。
为了统一R-CNN和Fast R-CNN目标检测网络,我们提出一个训练模式。他在区域候选任务的精调和在固定候选时对目标检测进行精调这两个方面交替进行。这些模式收敛的很快,同时,在两个任务间可以进行卷积特征的共享。
- Faster R-CNN由两个模块组成,第一个模块是一个深度全卷积网络,用来提取区域,第二个模块是Fast R-CNN检测器,它会使用提出来的那些区域。
- 区域候选网络的作用:以任意尺寸的图像作为输入,输出一系列矩形的对象候选,每一个候选都有一个objectness分数。其中,objectness“对象”衡量一组对象类的成员与背景关系 “objectness” measures membership to a set of object classes vs. background.
为了产生区域候选,我们在由最后一个共享的卷积层生成的卷积特征图输出上滑动一个小的网络。这个小网络将输入卷积特征图的n×n空间窗口作为输入。 每个滑动窗口都映射到一个较低维的特征(ZF为256-d,VGG为512-d,后面是ReLU [33])。
这个特征被输入到两个姐妹全连接层:一个盒回归层reg和一个盒分类层cls。因为这个小的网络在滑动窗口上进行操作,所以在所有的空间位置上会共享全连接层。 - 锚点:在每一个位置会有最多k个候选被提出来,于是reg层就有4k的输出,cls就有2k的分数(文章中使用了二分类)。这k个候选是针对k个参考框1进行参数化得到的,叫做“锚点”。在这里,每一个锚点以滑动窗口的中心为中心,且有对应的scale和aspect。
- anchors的平移不变性,从anchors的形式,和anchor相关的对候选的计算功能。当在图片中将一个对象进行候选,那么这个候选应该也平移,且同一个函数应该可以在这两个位置上都实现对候选的预测。平移不变性也减小模型的尺寸。
- 多尺度的anchors作为回归参考框架
- 在训练RPNs时的正负样本:我们给每一个anchor赋一个二分类的类标签。给下面两种anchor赋予正标签:和金标准盒有着最高的IOU重叠;一个anchor和金标准有着高于0.7的IOU重叠率。当非正的anchor与所有金标准盒的IOU率都低于0.3时,给它赋予负样本标签。介于正负样本之间的anchor不参与训练
- 多任务损失函数:
仔细阅读这个损失函数:i表示anchor在mini-batch中的索引号,pi表示anchor i属于是一个对象的预测概率。这个损失函数分为两项,前者为类别loss,后者为回归loss。ti是指bbox的四个顶点构成的向量。且由于定义时,正样本的pi为1,负样本的pi为0,就代表后一项仅对正样本有效。
且从上述公式中可以知道,本工作用于回归的特征是具有相同的空间尺寸。为了考虑到变化的尺寸,学习了一系列的k个bounding-box回归器。每一个回归器负责一个尺寸和一个纵横比,这k个回归器不共享权值。 - 在训练过程中,来源于一个单一图像的每一个mini-batch都包含很多正负样本anchors。但是,由于负样本较多,如果使用所有的anchors来对网络进行训练,将会使得结果偏向于负样本。于是,本文采取的方法是从一幅图像中随机采样256个anchors来计算该mini-batch的损失函数。
15.有三种方式来训练有特征共享的网络:
1. 迭代式训练。首先训练RPN,然后使用候选来训练Fast R-CNN,由fast R-CNN调节过的网络然后被用来初始化RPN,这个过程被迭代。该方法在本篇论文中的所有实验中被使用;
2. 近似联合训练,此时这两个网络在训练过程中合并入一个网络。前向过程产生区域候选,这些候选将被视为固定大小、已经预计算的候选,来训练一个fast R-CNN检测器。在反向传播过程中,共享层的反向传播信号同时来源于RPN损失和Fast R-CNN损失。这个方法很容易实现,但是这种解决方案忽略了候选框坐标的梯度,但是这些梯度也是网络的响应。
3. 非近似联合训练,此时的RoI池化层对于box坐标是可微的,可以将bbox坐标作为输入,从而可以在反向传播过程中计算关于box坐标的梯度。 - 本文提出的训练方案(主要针对如何在Fast R-CNN和RPN间共享卷积层)。首先训练RPN网络;然后,使用由RPN网络生成的候选框来训练一个单独的Fast R-CNN检测网络,到目前为止,两个网络之间并没有共享的卷积层;然后,使用检测网络来初始化RPN的训练,但是此时固定住共享的卷积层,只对专注于RPN的层进行优调;最后,保持共享层固定,只对专注于Fast R-CNN层的卷积层进行优化
- 实验结果:
其中SS是selective search, EB是EdgeBoxes
使用带RPN的Fast R-CNN网络,加快了训练速度,同时由于使用的候选框数目降低,使得最后region-wise的全连接层的花费也降低了。
以上是关于Faster R-CNN 学习的主要内容,如果未能解决你的问题,请参考以下文章
MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《9》