Faster R-CNN论文阅读记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shiheyingzhe/article/details/83658797

Faster R-CNN:Faster Region-based Convolutional Network method
该论文的标题是:Towards Real-Time Object Detection with Region Proposal Networks,可以看出Region Proposal Networks(RPNs)是实现实时检测的关键。
RPNs:区域建议网络,可以理解为网络输出可能包含类的矩形框(坐标)
论文的链接:https://arxiv.org/abs/1506.01497

简介:
SPPnet和Fast R-CNN网络暴露出计算区域建议框region proposals是实现实时的瓶颈,本文提出Region proposal  Network(RPN)网络和检测网络共享全图片卷积特征。RPN网络同时预测每个位置的可能存在的目标边界和得分。RPN可以进行端到端的训练,产生高质量的区域建议框。然后这些区域建议框被送到Fast R-CNN检测网络中用来检测目标。另外文章将RPN网络和Fast R-CNN网络融合成一个网络,RPN和Fast R-CNN网络共享全图的卷积特征。RPN网络使用“注意力”机制即RPN网络告诉Fast R-CNN检测网络应该关注哪些地方。

介绍:
Fast R-CNN基本接近实时检测,但提取区域建议框的时间是瓶颈。selective search方法提取区域建议框,是基于低层次的特征以贪婪的方式合并像素块。但和高效的检测网络相比较,SS很慢,在CPU使用SS提取一张图片的所有区域建议框花费2S。EdgeBoxes方法在速度和准确率之间取得平衡,提取一张图片的所有区域建议框仅仅只需0.2S,但是提取区域建议框的时间还是和检测时间相同。

可能的解决办法:Fast R-CNN网络在GPU运行,然而提取区域建议框的方法在CPU实现运行,使得比较运行时间是不合理的。加速区域建议的计算显而易见的方法是重新实现得以在GPU运行。这个可能是高效的解决办法,但是无法共享整张图的卷积特征。

本文提出采用深度卷积网络提取区域建议框,就是说将以前用来提取区域建议框region proposals的方法像selective search,用深度卷积网络替代,使用RPNs以后,和检测网络共享卷积特征。这样计算区域建议框的时间就很短的(每张图片约10ms)。
卷积特征网络被检测网络使用,也被RPN使用。在卷积特征网络提取卷积特征之后,构建RPN网络(增加几个额外的卷积层),RPN网络是全卷积网络所以能进行端到端的训练。

Anchor:RPN被设计为能高效预测多种尺度和长宽比的区域建议框
很多方法使用图像金字塔和过滤器金字塔
引入锚anchor的概念解决多尺度和多长宽比的问题,该方案可以认为是参考金字塔,避免了产生大量的图像和多尺度多长宽比的滤波器filters。该模型在单尺度图上训练和测试,表现很好有助于提高运行速度。
为了统一RPN网络和Fast R-CNN网络,训练网络的时候采用交替训练的方式,微调RPNs网络和微调目标检测网络。这种方式收敛很快并且产生在两个任务(提取区域建议框和目标检测)之间共享卷积特征的统一网络。在PASCAL VOC数据集的检测结果,RPNs+Fast R-CNN比SS+Fast R-CNN好,而且几乎没有SS的计算时间负担。RPN在计算区域建议框的时候有效运行时间仅为10ms。检测的帧速率是5fps(GPU),因此,RPNs+Fast R-CNN在速度和准确率上都是实用的检测系统。RPNs完全学到如何从图片中提取区域建议框,因此能从更深的、更有表现力的网络提取的特征中获益。

相关的工作:
目标区域建议框,有许多提取图片中目标区域建议框的办法,比较典型的方法有合并像素块的Selective Search,CPMC,有基于滑动窗口的EdgeBoxes
目标检测的深度网络,主要是OverFeat方法和MultiBox方法,OverFeat方法使用全连接层预测包围盒坐标,卷积层检测物体类别。MultiBox方法有生成区域建议框的网络,网络的全连接层同时预测多个不可知类(二分类)的区域边界,这些区域被用作区域建议框输入到R-CNN网络中。但是其检测网络和生成目标框的网络不共享卷积特征。
共享卷积层的计算越来越受到人们的重视,OverFeat文中为了定位、分类和检测从图片金字塔中计算卷积特征。为了高效的目标检测,产生了共享卷积特征图的自适应池化(Adaptively)。Faster R-CNN在共享卷积层上进行端到端的训练,并且展现了令人信服的准确率和速度。

Fast R-CNN:

由两个模块组成,一个模块是深度全卷积网络,用来提取图片的区域建议框;另一个模块是检测器(使用区域建议框),组成统一的网络。RPN模块使用注意力机制,告诉Fast R-CNN模块要关注那些区域。
RPNs的设计与性能:输入任意尺寸的图片,输出矩形区域建议框的集合每个框都有可能是类的打分。RPN建模为全卷积网络的目的是和Fast R-CNN检测网络共享卷积特征。实验中提取特征的网络是ZF或VGG16。
为了生成区域建议框,在共享卷积层最后一层输出卷积特征图。RPN在卷积特征图使用滑动的小网络,小网络将卷积特征图中的n*n(n=3)空间区域作为输入。3*3的滑动窗口对应到原图,ZF网络是171*171,VGG网络是228*228。每个滑动窗映射到低维特征(对VGG16是512维,对ZF是256维),这些低维特征喂给后面并列的全连接层(包围盒回归层和分类层)。小网络以滑动窗口的方式工作。

锚Anchors:(171 and 228 pixels for ZF and VGG, respectively)。
在每个3*3滑动窗口的位置,同时预测多个区域建议框,这些建议框被称作。要注意的是锚是原图的区域不是特征图上的区域,特征图上只有3*3的区域,但是有很多个通道,图中有256个通道(ZF网络)。每个位置可能的区域提议框的最大数量记做k。对于一个区域建议框,RPN的回归层有4k个输出编码。这4k个输出都是k个包围盒的坐标(x,y,w,h)。分类层输出2k个分数用来预测是类的概率和不是类的概率,分类是二分类问题。
图中256维的向量,是卷积特征图上3*3的滑动窗口对应的一个锚(共k个)经过小网络后生成的。生成的方法是先卷积再1*1卷积即全连接。所有锚的中心和3*3滑动窗口对应原图的中心重合(图中虚线)。默认使用3种尺度、3种长宽比,每个滑动窗口都会生成9个锚。对于W x H的卷积特征图,总共有W*H*k个锚(stride =1,padding=2)。最后会输出2k(2*9)个分类分数,4k(4*9)个回归值。

“regions”区域是个通用的术语,一般是指矩形框。“objectness”衡量一个待检测类的集合与背景的关系。

锚的平移不变性
本方法的重要属性是平移不变性,无论是锚还是和锚相关的用来计算区域建议框的方法,如果将图片中待检测的类移动,区域建议框也会移动,并且相同的方法能在任何位置将区域建议框预测出来。相反,MultiBox方法不能保证一个物体移动以后生成相同的区域建议框。例:像拍照的时候,脸部有定位框,框会随着人脸的移动而移动
平移不变性同样减小模型的大小,MultiBox方法有(4+1)*800维全连接层的输出,但是本方法只有(4+2)*9维的全连接层(1*1卷积)输出。(4+2)是指一个锚预测的坐标和分类的分数,9是指每个滑动窗口有9个锚。结果是,本方法的输出层有
2.8 x 10^4个参数(512 x (4 +2 ) x 9 for VGG-16),512是锚经过小网络的卷积、1*1卷积(全连接)输出的向量长度。比MultiBox的6.1 x 10^6低两个数量级。如果多向前考虑几层,从特征映射层开始算起,就是从3*3的滑动窗口这里开始,参数量为
3*3*512*512+512*6*9=2.4*10^6),还是比MultiBox低一个数量级。
多尺度锚作为回归的参考:
本文的锚就解决多尺度和长宽比提出了一个新的解决方案,对多尺度预测有两个流行的方法:图像/特征金字塔;在DPM或CNN方法中,图片resize到多尺度并且对每个尺度计算特征图。有效但耗时太长;在特征图上使用多尺度的过滤器,例DPM,不同尺度的模型使用不同尺寸的过滤器,被称作过滤器金字塔。作为对比,本方法建立在锚金字塔,分类和回归包围盒参考不同尺度、长宽比的锚盒。方法仅仅依赖于图片和单尺度的卷积特征图,并且在特征图上使用3*3的滑窗。
由于多尺度锚的设计,能简单地使用在单张图片上计算出来的卷积特征。这点和Fast R-CNN相同,多尺度锚的设计是共享特征而无需为解决多尺度问题额外花费的关键。
Loss损失函数:
为了训练RPNs,为每个锚分配一个二分类的标签(属于目标类或不是),为两种锚分配正样本标签:(1)和一个ground truth的IoU值最大的那些锚;(2)和任意一个ground truth的IoU大于或等于0.7的锚。注意到单个ground truth可能分配正样本标签给多个锚。第(2)个条件足以确定正样本,仍然使用第(1)个条件的原因是存在在第(2)个条件下没有正样本的情况。不是正样本的锚中,那些和所有ground truth的IoU值小于0.3的被分配为负样本,其余那些既不是正样本也不是负样本的锚,不作为训练样本,被忽略掉的。这样对于一个滑窗,原图产生的9个锚,锚可能被分配到正样本、负样本、被忽略样本的标签,对于被忽略样本,不计算它的损失值,单单只计算正样本和负样本的损失值。

Loss的目标函数,其中i是mini-batch中锚的标号,p_i是锚属于目标类的概率,p_i^*是ground truth,正样本为1,负样本为0。
t_i代表预测包围盒的4个参数化量,t_i^*是正样本锚关联的ground truth box的参数化量。L_{cls}是二分类交叉熵损失函数。其中p_i^*L_{reg}的意思是正样本锚才计算回归损失,负样本不计算回归损失。\lambda是调节权重的,\lambda~[10,100],在这个范围内,最终的结果对其不敏感。被忽略的样本两种损失都不计算。N_{cls}的意思是mini-batch的数目(例256),做归一化,N_{reg}是预测的框的总数量(例2400)。
L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum L_{cls}(p_i,p_i^*) +\lambda \frac{1}{N_{reg}}\sum _i p_i^*L_{reg}(t_i,t_i^*)
 L_{reg}(t_i,t_i)=\sum_{x,y,w,h} smooth_{L_1}(t_j-t_j^*)      smooth_{L_1}(x)=\left\{\begin{matrix} 0.5x^2 & if\left | x \right |< 1\\ \left | x \right |-0.5& otherwise \end{matrix}\right.
对于回归损失,其中t的定义,x,y是盒子中心点坐标,x,x_ax^*分别代表预测的包围盒,锚盒,ground truth box(y,w,h同理)。
t_x=(x-x_a)/w_a,\quad t_y=(y-y_a)/h_a, \par t_w=log(w/w_a),\quad t_h=log(h/h_a), \par t_x^*=(x^*-x_a)/w_a,\quad t_y^*=(y^*-y_a)/h_a, \par t_w^*=log(w^*/w_a),\quad t_h^*=log(h^*/h_a)
\left | t_x-t_x^* \right |=(x-x^*)/w_a\left | t_y-t_y^* \right |=(y-y^*)/h_a\left | t_w-t_w^* \right |=log(w/w^*)\left | t_h-t_h^* \right |=log(h/h^*)
可以看出回归loss函数只和anchor的宽w_a、高h_a有关,也就是和尺度和长宽比有关,和中心点(x_a,y_a)无关。不同回归器的宽w_a、高h_a不同。
然而,本方法采用不同于之前基于RoI的方法,之前的方法,包围盒回归是对任意大小的特征池化以后再执行的,回归参数由所有大小的区域共享。在本文的式子中,用来回归的特征在特征图上有相同的大小(3*3),考虑到不同尺寸,学习了9个包围盒回归器集合,每个回归器负责一种尺度和长宽比。k个回归器不共享权重。因此,由于锚的设计,尽管特征固定尺寸大小的,仍然有可能预测不同大小的盒子。

使用的网络是VGG16:
注意:RPN输出的回归层是9个单独的回归器 Reg_i\ i \in\{1,2,...,9\}的集合,就是说这9个包围盒回归器不共享权重,每个回归器负责一种尺度和长宽比(和相应的anchor比例基本相同)。假设有anchor(大小为,长宽比为1:1,1:2,2:1),则可能包围盒回归器负责预测一个回归器对应一种anchor,其余每个回归器各负责一种尺度和长宽比。

对卷积特征图使用3*3的滑窗,然后经过卷积输出512维的向量,接着输出二分类的分数和9个回归器的值(每个回归器4个值)

会思考3*3的滑窗怎么能有这么多的输出?既有分类的分数还有4*9个回归值
解释是:3*3对应原图的区域有228个pixels,输出有512个通道,3*3*512这些值足够还原并表现出原图该区域中的所有特征,由于RPN中小网络的卷积核是3*3*512,就是全连接,全连接的权重有3*3*512*512个,只要其中某些权重值设置得当,那么就可以输出原图该区域的所有特征,包括各种检测类的位置,分类分数等。

在原图生成anchor的目的是什么?
要知道,训练RPN网络是有监督训练,需要有数据、还要有相应的类标签,输入小网络的是512个通道的3*3滑窗,类标签没有给定,没有类标签就无法计算Loss损失函数,无法训练网络。以3*3滑窗中心对应原图的位置作为中心点,在原图生成9个不同尺度长宽比的anchor,然后每个anchor都会被分配到相应的类标签,有正样本(1)、负样本(0),也有不参与训练的框(not used),对正样本计算,就是回归的类标签,负样本不计算回归loss。0,1是二分类的标签。所以在原图生成anchor的目的之一是得到类标签。这里只得到了分类的标签(0,1),还有正样本的回归标签需要确定,该正样本的回归标签是其对应的ground truth计算出来的t_x^*,t_y^*,t_w^*,t_h^*。负样本不计算回归损失没有回归标签。
p^*=\left\{\begin{matrix} 1 & IoU>0.7\ or\ max\ IoU for\ gd \\ 0& IoU<0.3\\ not\ used & 0.3\leqslant IoU\leqslant 0.7 \end{matrix}\right.         t_x^*=(x^*-x_a)/w_a,\ t_y^*=(y^*-y_a)/h_a,\par t_w^*=log(w^*/w_a),\ \ t_h^*=log(h^*/h_a)

另外的目的就是为了解决多尺度和长宽比的问题

anchor是怎么解决多尺度和长宽比的问题?
一个回归器对应一种anchor,每个正样本anchor对应的ground truth,打上回归的标签,交给该anchor对应的回归器预测。anchor生成好以后,回归器对应的正样本标签就确定好的。
anchor的大小为,长宽比为1:1,1:2,2:1,对一个3*3的滑动窗口,其中心在原图的位置生成9个anchor,每个anchor都根据IoU划分正、负、不参与训练的标签,anchor G(,1:1)被划分为正样本的时候有对应的ground truth G,那么这个anchor G(,1:1)和ground truth G就联系在一起。9个回归器中负责预测,1:1的回归器就负责预测ground truth G。也就是说用于负责预测 ​,1:1的回归器计算回归Loss。如果一个mini-batch中所有的ground truth对应的正样本anchor是,2:1、,1:1、,1:2,没有其余的尺寸。那么9个回归器中只有3个起作用,其余6个回归器的损失值为0。计算回归loss的时候只计算起作用的3个。就是说不是所有的anchor都有作用(看检测的物体)。

正样本anchor对应的ground truth,由和anchor相同大小长宽比的回归器预测该ground truth。
anchor\Leftrightarrow ground\ truth\Leftrightarrow special\ regressor

在原图怎么生成anchor?
3*3滑窗的中心点对应原图的位置就是anchor的中心点,两者的中心点重合,然后就可以推导出原图中9个不同尺度和长宽比锚的坐标。

anchor起作用的地方:
3*3的滑窗生成对应原图的9个anchor,然后对9个anchor计算IoU,分配标签,正样本的anchor还要和对应的ground truth联系起来,对每个正样本anchor对应的ground truth,打上标签,交给该anchor对应的回归器预测。正样本anchor的大小长宽比被用来确定预测相应ground truth用哪个回归器。9个回归器并不是都起作用的(看检测的物体)。由于回归器和锚一一对应,就是说不是所有的anchor都有作用。

如何确保不同回归器生成不同尺寸长宽比的预测包围盒?损失函数ground truth
输入都是相同的3*3*512,不同的是标签,损失函数中的x^*,y^*,w^*,h^*就是确保预测生成接近宽w_a、高h_a的包围盒。只要将对应尺度长宽比的正样本anchor和回归器对应起来,然后将正样本anchor对应的ground truth给回归器就可以的。
anchor\Leftrightarrow ground\ truth\Leftrightarrow special\ regressor
来看回归损失函数,x,y是盒子中心点坐标,x,x_ax^*分别代表预测的包围盒,anchor盒,ground truth box(y,w,h同理)。
L_{reg}(t_i,t_i)=\sum_{x,y,w,h} smooth_{L_1}(t_j-t_j^*)
t_x=(x-x_a)/w_a,\quad t_y=(y-y_a)/h_a, \par t_w=log(w/w_a),\quad t_h=log(h/h_a), \par t_x^*=(x^*-x_a)/w_a,\quad t_y^*=(y^*-y_a)/h_a, \par t_w^*=log(w^*/w_a),\quad t_h^*=log(h^*/h_a)          smooth_{L_1}(x)=\left\{\begin{matrix} 0.5x^2 & if\left | x \right |< 1\\ \left | x \right |-0.5& otherwise \end{matrix}\right.

\left | t_x-t_x^* \right |=\left | (x-x^*)/w_a \right |\left | t_y-t_y^* \right |=\left | (y-y^*)/h_a \right |\left | t_w-t_w^* \right |=\left | log(w/w^*) \right |\left| t_h-t_h^*\right|=\left | log(h/h^*) \right |
可以看出回归loss函数只和anchor的宽w_a、高h_a有关,也就是和尺度和长宽比有关,和中心点(x_a,y_a)无关。不同回归器的宽w_a、高h_a不同。1/6和1/100的大小是不同的,除以宽w_a、高h_a也是相同的道理。所以anchor的宽w_a、高h_a对损失函数也是有很大影响的。128^2,256^2,512^2不同尺度的anchor对距离的敏感程度不同。

分类损失如何计算?
L_{cls}是二分类交叉熵损失函数,只有正样本的anchor作为对应回归器的标签,同时也有分类器的标签(二分类),负样本的anchor不计算回归损失,只有分类器的标签,对于那些被忽略的anchor,既不计算回归损失,也不计算分类损失。其loss=0。

不论3*3滑窗对应的9个锚中有几个正样本,几个负样本,还有几个被忽略的样本,RPN的3*3滑窗输出一定是(4+2)* 9维。
如果检测的目标只有一类,而且在图片中的大小基本相同,那么9个回归器可能只有其中1个被训练好。
由于锚和回归器一一对应,只要数据够多,检测的目标尺寸和长宽比足够丰富,每个回归器都能被训练好。


现在过遍训练RPN的流程:
1、假设输入的图片是576* 960,经过VGG16生成卷积特征图,缩放16倍,得到36 * 60 *512的特征图,512是通道数
2、使用3*3*512的滑窗在特征图滑动(stride=1,padding=2),找到每个三维滑窗的中心在原图对应的像素位置,然后在原图上生成9个anchor,这9个anchor的中心重合且和三维滑窗对应的中心相同。共有36*60个滑窗,则共有36*60*9个原图上的锚19440\approx 20k。3*3*512的三维滑窗足够表达227pixels区域的特征。
3、生成anchor的同时根据ground truth的IoU值确定每个anchor是正样本还是负样本(是否是类)。为两种anchor分配正样本标签:(1)和一个ground truth的IoU值最大的那些anchor;(2)和任意一个ground truth的IoU大于或等于0.7的anchor。注意到单个ground truth可能分配正样本标签给多个anchor。第(2)个条件足以确定正样本,仍然使用第(1)个条件的原因是存在在第(2)个条件下没有正样本的情况。不是正样本的anchor中,那些和所有ground truth的IoU值小于0.3的被分配为负样本,其余那些既不是正样本也不是负样本的anchor,不作为训练样本,被忽略掉的。这样对于一个滑窗,原图产生的9个anchor,anchor可能被分配到正样本、负样本、被忽略样本的标签。然后对每个正样本anchor对应的ground truth,打上回归的标签,交给该anchor对应的回归器预测。anchor生成好以后,回归器对应的正样本回归标签t_x^*,t_y^*,t_w^*,t_h^*就确定好的。
4、从一张图片当中随机采样256个anchor,正负样本anchor的比例是1:1,如果一张图片中正样本anchor的数量少于128个,就减少负样本anchor的数量和正样本anchor数量相同。需要注意的是,这256个anchor中来自不同的3*3滑窗。
5、接着看网络的流程,mini-batch中的每个样本anchor对应的3*3*512的三维滑窗经过卷积(卷积核3*3*512)生成512维的向量,这512维的向量进入分类层、9个独立的回归层,输出一定是(4+2)* 9维,然后对正样本anchor对应的ground truth的回归层输出,使用t_x^*,t_y^*,t_w^*,t_h^*,w_a,h_a计算回归损失loss,然后还要计算其分类损失,负样本也要计算分类损失。被忽略的锚对应的输出loss=0。

训练RPNs:
端到端的训练遵循以图像为中心的抽样策略,每个mini-batch从一张图片中产生,包含很多正负样本锚。所有正负样本锚的损失函数优化是可能的,但由于负样本占大多数,会偏向负样本导致不平衡。因此,本文为了计算mini-batch的损失函数,从一张图片当中随机采样256个锚,正负样本锚的比例是1:1,如果一张图片中正样本锚的数量少于128个,就减少负样本锚的数量和正样本锚数量相同。
RPNs初始化权重是采用(0,0.01)的高斯分布,共享卷积层的权重是使用的预训练好的模型(ImageNet分类网络模型),如果是ZF网络,就微调所有的层,如果是VGG网络,微调conv3_1及以后的网络以节省内存。前60k mini-batch迭代,learning_rate=0.001,后20k mini-batch迭代,learning_rate=0.0001(PASCAL VOC dataset)。动量=0.9,权重衰减=0.0005。

RPN和Fast R-CNN共享特征:
提取区域建议框的网络是RPN,检测网络是Fast R-CNN,本文讨论三种方式来训练网络就使用共享特征。
1、交替训练:首先训练RPN,然后使用区域提议框训练Fast R-CNN,微调以后的Fast R-CNN网络用来初始化RPN。本文使用的是这种方法。
2、近似联合训练:这种方法在训练时融合两个网络为一个,每次SGD迭代,前向传播生成的区域建议框用于训练Fast R-CNN,
后向传播中,共享卷积网络使用RPN Loss和Fast R-CNN Loss的组合(加和)。这个方法很容易实现,但是忽略了导数w.r.t。建议框的坐标也是网络负责的。所以是近似。实验中,发现这种方法产生和交替训练近似的结果,但是减少了25%~50%的训练时间和交替训练相比较。
3、非近似联合训练:像2中所说,由RPN预测的bounding box也是输入的函数,Fast R-CNN的RoI pooling层输入卷积特征,并将预测的bounding box作为输入,所以一个理论上有效的反向传播应该包含包围盒坐标的梯度。这些梯度在2中被忽略掉的。

4步进行交替训练 
本文采用实用的4步交替训练算法,通过交替优化学习共享特征。
1)之前写过的RPN网络的训练方法,使用ImageNet预训练模型初始化,并就区域提议的任务进行端到端的微调。
2)使用1)中RPN生成的区域建议框训练一个单独的Fast R-CNN网络,检测网络也有ImageNet预训练模型进行初始化,这时两个网络不共享卷积层。
3)使用检测网络初始化RPN,但是固定共享卷积层仅仅优化RPN层,现在两个网络共享卷积层。
4)仍然固定共享卷积网络的参数,只微调Fast R-CNN层。
这样两个网络就共享相同的卷积层形成统一的网络。类似的交替训练可以进行更多次的迭代,但是发现提高的很小。
实现细节:
使用单一尺度的图片训练和测试。对图像进行缩放,最短边s=600个像素。多尺度特征提取(使用图片金字塔)可能提高准确率但是并没有在速度和准确率上取得平衡。在重新缩放的图片上,最后一层的缩放尺度相对于原图是16。即使缩放这么多倍也能有好的结果。猜测使用更小的缩放倍数准确率还会提高。对anchor,本文使用3种尺度、矩形框面积为128^2,256^2,512^2,3种长宽比1:1,1:2,2:1。这些参数不是特地为某个数据集挑选的,无需使用图片金字塔和过滤器金字塔,节省了很多时间。
表现出该方法对多尺度和长宽比的容纳能力
表中展现使用ZF网络学到的平均区域建议框的比例和大小,注意到本文算法允许预测比底层接受范围更大的区域,这不是不可能,如果仅仅有物体的中心可见,人们仍然能粗略地推测物体的范围。

跨越图像边界的锚盒需要小心处理,训练时忽略所有跨越边界的锚盒,对一张1000*600的图片,大约有(60*40*9)\approx20k个锚,去掉跨越边界的锚,每张图片大约有6000个锚用来训练。如果不去掉跨越边界的锚,在训练的时候,训练不收敛。测试期间,在整张图片上应用全卷积RPN,会产生跨越边界的建议框,会将这样的框裁剪到图像边界,使其不跨过边界。
一些锚相互重叠,为了减小冗余,基于它们的cls分数在区域建议框上使用NMS。NMS的阈值为0.7,每张图片大约剩下2000个区域建议框。NMS不会降低准确率,反而减少了提议框的数量。在NMS之后,使用top-N个建议的区域进行检测,接着使用2000个区域建议框训练Fast R-CNN,但是在测试的时候评估不同数量的区域。

实验:
 

 结果表明使用多个大小的锚作为回归参考是一种有效的解决方案。


\lambda在[1,100]中时,结果变化不到1%,表明在很宽的范围内\lambda是不敏感的

猜你喜欢

转载自blog.csdn.net/shiheyingzhe/article/details/83658797