faster rcnn(怎么运行faster-rcnn的代码)

2024-05-23 17:26:48 29

faster rcnn(怎么运行faster-rcnn的代码)

本文目录

怎么运行faster-rcnn的代码

初始化参数:args = parse_args() 采用的是Python的argparse
主要有–net_name,–gpu,–cfg等(在cfg中只是修改了几个参数,其他大部分参数在congig.py中,涉及到训练整个网络)。
cfg_from_file(args.cfg_file) 这里便是代用config中的函数cfg_from_file来读取前面cfg文件中的参数,同时调用_merge_a_into_b函数把所有的参数整合,其中__C = edict() cfg = __C cfg是一个词典(edict)数据结构。
faster rcnn采用的是多进程,mp_queue是进程间用于通讯的数据结构
import multiprocessing as mp
mp_queue = mp.Queue()

Faster RCNN 里的NMS发生在哪个环节

nms发生在两个阶段,一个是RPN阶段,另一个是Fast RCNN阶段。在这两个阶段都是在做框回归再nms。nms出来的结果就是最终的结果了。

超详细解读Faster R-CNN-FPN

2021年了,竟然还有人写关于Faster R-CNN的文章?我的原因主要有两点:

我们先从全局上了解Faster R-CNN-FPN,然后再关注其中涉及的细节。下面是Faster R-CNN-FPN的网络框架图(或称为tensor流动图)。

众所周知,Faster R-CNN-FPN(主要是Faster R-CNN)是个两阶段的对象检测方法,主要由两部分网络组成,RPN和Fast R-CNN。

RPN的作用是以bouding box(后简称为box)的方式预测出图片中对象可能的位置,并过滤掉图片中绝大部分的背景区域,目标是达到尽量召回图像中感兴趣的对象,预测box尽量能够与实际对象的box贴合,并且保证一定的预测精度(Precision)。另外,RPN并不需要指出预测的box中对象具体的类别,RPN预测的box称为RoI(Region of Interest),由于是以box的方式输出,所以后面我们统一将其称为proposal box。

Fast R-CNN则是在FPN预测的proposal box基础上进一步预测box中对象具体的类别,并对proposal box进行微调,使得最终预测的box尽量贴合目标对象。大致的做法是根据RPN预测的proposal box,从原图backbone的feature map上通过RoIPooling或RoIAlign(Faster R-CNN-FPN使用RoIAlign)提取每个proposal box对应区域的feature map,在这些区域feature map上进一步预测box的类别和相对proposal box的偏移量(微调)。另外,RPN和Fast R-CNN共用同一个backbone网络提取图像的feature map,大大减少了推理耗时。

从上面的介绍可以看出,RPN和Fast R-CNN的配合作用其实可以理解为一种注意力机制,先大致确定目标在视野中的位置,然后再锁定目标仔细观察,确定目标的类别和更加精确的位置,简单来说就是look twice,相比单阶段的look once,当然是比较耗时的,但也换来了更好的效果(虽然很多单阶段方法号称已经获得相当或好于两阶段的效果)。

下面以Faster R-CNN-FPN发展顺序的汇总介绍每个改进的核心思想。

在R-CNN中,CNN只被用来作为特征抽取,后接SVM和线性回归模型分别用于分类和box修正回归。在此基础上,Fast R-CNN直接对原输入图进行特征抽取,然后在整张图片的特征图上分别对每个RoI使用RoIPooling提取(后面会介绍RoIPooling的原理)特定长度的特征向量(论文中空降尺寸为7*7),去掉SVM和线性回归模型,在特征向量上直接使用若干FC层进行回归,然后分别使用两个FC分支预测RoI相关的类别和box,从而显著提升速度和预测效果。 整体框架图如下:

在Fast RCNN的基础上进一步优化,用CNN网络代替Fast R-CNN中的region proposal模块(使用传统Selective Search方法),从而实现了全神经网络的检测方法,在召回和速度上都超过了传统的Selective Search。作者将提供proposal region的网络称为RPN(Region Proposal Network),与检测网络Fast RCNN共享同一backbone,大大缩减了推理速度。

RPN在backbone产生的feature map(图中的conv feature map)之上执行 的滑窗操作,每个滑窗范围内的feature map会被映射为多个proposal box(图中的reg layer分支)以及每个box对应是否存在对象的类别信息(图中的cls layer分支)。由于CNN天然就是滑窗操作,所以RPN使用CNN作为窗口内特征的提取器(对应图中的intermediate layer,后面简称为“新增CNN层”),窗口大小 ,将feature map映射为较低维的feature map以节省计算量(论文中为256)。虽然只使用了 的卷积,但是在原图上的有效的感受野还是很大的,感受野大小不等于网络的降采样率,对于VGG网络,降采样率为16,但是感受野为228像素。类似于Fast-RCNN,为了分别得到box和box对应的类别(此处类别只是表示有没有目标,不识别具体类别),CNN操作之后会分为两个子网络,它们的输入都是新增CNN层输出的feature map,一个子网络负责box回归,一个负责类别回归。由于新增CNN层产生的feature map的每个空间位置的特征(包括通道方向,shape为 )都被用来预测映射前窗口对应位置是否存在对象(类别)和对象的box,那么使用 的CNN进行计算正合适(等效于FC层),这便是RPN的做法。综上所述,所有滑窗位置共享一个新增CNN层和后续的分类和box回归分支网络。下图是RPN在一个窗口位置上执行计算的原理示意。

由于滑窗操作是通过正方形的CNN卷积实现的,为了训练网络适应不同长宽比和尺寸的对象,RPN引入了anchor box的概念。每个滑窗位置会预置k个anchor box,每个anchor box的位置便是滑窗的中心点,k个anchor box的长宽比和尺寸不同,作者使用了9种,分别是长宽比为 、 和 ,尺寸为 , 和 的9种不同组合。分类分支和box回归分支会将新增CNN层输出的feature map的每个空间位置的tensor(shape为 )映射为k个box和与之对应的类别,假设每个位置的anchor box数量为k(如前所述, ),则分类分支输出的特征向量为2k(两个类别),box回归分支输出为4k(4为box信息,box中心点x坐标、box中心点y坐标、box宽w和box高h)。box分支预测的位置(x,y,w,h)都是相对anchor box的偏移量。从功能上来看,anchor box的作用有点类似于提供给Fast RCNN的propsal box的作用,也表示目标可能出现的位置box,但是anchor box是均匀采样的,而proposal box是通过特征抽取(或包含训练)回归得到的。由此可以看出,anchor box与预测的box是一一对应的。从后文将会了解到,通过anchor box与gt box的IoU的关系,可以确定每个预测box的正负样本类别。通过监督的方式让特定的box负责特定位置、特定尺寸和特定长宽比的对象,模型就学会了拟合不同尺寸和大小的对象。另外,由于预测的box是相对anchor box的偏移量,而anchor box是均匀分布在feature map上的,只有距离和尺寸与gt box接近(IoU较大)的anchor box对应的预测box才会与gt box计算损失,这大大简化了训练,不然会有大量的预测box与gt box计算损失,尤其是在训练初始阶段,当一切都是瞎猜的时候。

在Faster RCNN基础上,将backbone替换为ResNet50或ResNet101,涉及部分细节的改动,我们放在本文的细节部分进行描述。

在Faster RCNN-ResNet基础上,引入FPN(特征金字塔网络)模块,利用CNN网络天然的特征金字塔特点,模拟图像金字塔功能,使得RPN和Fast RCNN可以在多个尺度级别(scale level)的feature map上分别预测不同尺寸的对象,大大提高了Faster RCNN的检测能力。相比图像金字塔大大节省了推理时间。原理如下图所示:

从上图中可以看出,FPN并不是简单地使用backbone的多个CNN层输出的feature map进行box回归和分类,而是将不同层的feature map进行了top-down和lateral connection形式的融合后使用。这样便将CNN网络前向传播(bottom-up)产生的深层语义低分辨率特征与浅层的浅语义高分辨率的特征进行融合,从而弥补低层特征语义抽象不足的问题,类似增加上下文信息。其中,top-down过程只是简单地使用最近邻插值将低分辨率的feature map上采样到即将与之融合的下层feature map相同的尺寸(尺寸上采样到2倍),lateral connection则是先将低层的feature map使用 的卷积缩放为即将与之融合的上层feature map相同的通道数(减少计算量),然后执行像素级相加。融合后的feature map不仅会用于预测,还会继续沿着top-down方向向下传播用于下层的特征融合,直到最后一层。

mask R-CNN提出的RoI Align缓解了RoIPooling的缺陷,能够显著提升小目标物体的检测能力。网上介绍RoIPooling和RoIAlign的文章很多,此处不再赘述,推荐阅读个人觉得比较好的两篇博客: RoIPooling 和 RoIAlign 。

此处稍微啰嗦下个人对RoIPooling的思考: 为什么RoIPooling不使用自适应的池化操作,即根据输入的feature map的尺寸和希望输出的feature map尺寸,自动调整池化窗口的大小和步长以计算想要尺寸的feature map,类似于自适应池化操作,而不是将输入的feature map划分成均匀的小区域(bins,论文中划分为 个bins),然后每个小区域中分别计算MaxPooling。不管计算上是否高效,至少这种做法在输入的feature map尺寸(比如 )小于期望的输出feature map尺寸(比如 )时会失效,因为在3*3的feature map上如果不使用padding的话是无法得到 的特征的,而使用padding又是很低效的操作,因为要扩展局部feature map的尺寸,而使用划分bins的方法,即使输出的feature map尺寸远小于要输出的feature map尺寸,也仅仅是在同一位置采样多次而已。

本人之前介绍YOLOv3的 文章 也介绍过anchor box的作用,再加上本文1.1.2节中的介绍应该比较全面了,不再赘述。

此处的绝大部分细节来自论文,论文中未提及的部分,主要参考了mmdetection中的 实现 。

整个模型的网络结构可以划分为四个部分,分别为backbone、FPN、RPN head和Fast RCNN head。

1.backbone: 原图短边被resize到800像素,这里值得注意的是,如此resize后一个batch内的每张图片的大小很有可能并不一致,所以还无法合并为一个输入矩阵,普遍的做法是将batch内的每张图片的左上角对齐,然后计算resize后batch内所有图片的最大宽和高,最后按照最大宽或高分别对每张图片的宽或高进行0值padding;输出为4个不同尺寸的feature map(C2、C3、C4、C5)。

2.FPN: ResNet backbone产生的4个不同尺寸的feature map(C2、C3、C4、C5)作为输入,输出5个不同尺寸的feature map(P2、P3、P4、P5、P6),P6是对P5进行2倍降采样得到,每个feature map的通道数为固定的256;使用P6的原因是为了预测更大尺寸的对象。

3.RPN:输入为FPN产生的feature map(P2、P3、P4、P5、P6);由于RPN是在5个输入feature map上进行独立的预测,则每个feature map都会输出 proposal box,因此不可能将所有的proposal box都提供给Fast R-CNN,这里的做法是对每个feature map上产生的proposal box按类别概率进行排序(每个feature map上的proposal box独立进行),然后选择前k个proposal box, 5个feature map一共会 产生 个proposal box,训练时 ,推理时 。最后,将所有的 个proposal box合并后统一进行NMS(IoU threshold=0.7)去掉冗余的box,最后选择前m个输出给Fast R-CNN,训练和测试时m都取1000。

训练时将gt box通过下面的公式转换为相对anchor box的偏移值,与网络的预测计算loss,至于将每个gt与具体的哪个anchor box计算偏移,则需要根据2.3.1节中的正负样本方法来确定。测试时将预测的box通过该公式中的逆运算计算出当前box相对原图的位置和大小, , , , 指相对全图的box中心点坐标以及宽和高, , , , 指每个anchor相对全图的box中心点坐标以及宽和高。由此可以看出,box回归分支直接预测的便是相对anchor的偏移值,即公式中的 、 、 和 。

以上提到的2000和1000是作为Fast R-CNN的输入proposal box,在训练时参与RPN loss计算的anchor boxs数量为256个,正负样本数量为 ,正样本不足128的用负样本补足。这里的256是从所有feature map中的anchor box中选择的,并非每个feature map都独立取得256个正负样本。这也是合理的,因为每个gt box由于尺寸的原因,几乎不可能与所有feature map上的anchor box的IoU都大于一定的阈值(原因参考2.3.1节)。注意选择前并未进行NMS处理,而是直接根据2.3.1节中确定正负样本的方式确定每个预测box正负类别,然后分别在正样本中随机选择128个正样本,在负样本中随机选择128个负样本。

4.Fast R-CNN:输入为FPN产生的前4个feature map和RPN输出的proposal box,4个feature map为P2、P3、P4、P5,与backbone对应,不使用P6。那么,如何确定在哪个feature map上执行每个proposal box对应的RoIAlign操作并得到 大大小的feature map呢?论文中的做法是通过下面的公式将特定尺寸的proposal box与FPN产生的4个feature map中尺寸最适合的对应起来,即让感受野更接近对象尺寸的feature map预测该对象 ,其中224为backbone在ImageNet上预训练的尺寸,w和h为proposal box的长和宽,k表示适合尺寸为w和h的propsal box的feature map的位置,即4个feature map为P2、P3、P4、P5的下标,k_0为proposal box大致为224*224时对应feature map位置值( ),表示proposal box大致为 时在P4上执行RoIAlign,小于 时,在P2或P3上执行,大于则在P5上。

网络都会针对每个RoI会输出一个类别概率分布(包括背景类别)和一个相对RoI box的长度为4的box偏移向量。概率分支由softmax激活函数得到。与RPN的类似,训练时,如2.4.2节loss计算中所述,会将gt box通过下面的公式转换为相对proposal box(前提是该RoI是正样本)的偏移量,然后使用loss计算公式直接与预测的相对偏移量进行loss计算;测试时,会通过下列公式的逆运算将偏移值换算回相对原图的位置box,然后使用NMS去掉冗余的box,最终输出。

训练时,通过2.3.2中的方式确定每个proposal box属于正样本或负样本后,随机选择512个样本,其中正负比例为1:3进行loss计算,正样本不足的由负样本补足。

在RPN中,由于每个feature map的每个滑窗位置上的张量( 维张量,C为feature map的通道数)会被用来预测k个box和每个box对应的类别概率,那么具体哪个box才能参与gt box的损失计算(包括类别和box回归损失)?这便需要在所有预测的box中确定正负样本,因为一个anchor对应一个预测的box和类别,那么确定预测的box是正例还是负例等价于确定anchor box的是正例还是反例。为了便于训练,RPN中使用双IoU阈值的方式确定正负样本,与gt box的IoU为最大或者大于0.7的anchor box被设置为正样本,这会导致一个gt box与多个预测box计算损失,即允许多个box预测同一对象,与gt box的IoU小于0.3的anchor box被设置为负样本,其余的忽略掉,即不参与loss计算。在此基础上,如2.2节中所述,会对正负样本进行随机采样,总数为256,其他不参与损失函数计算。

与gt box的IoU大于0.5的proposal box作为正样本,注意,是将proposal box与gt box计算IoU,Fast-RCNN中的proposal box的作用与anchor box有些类似,即确定正负样本和预测的box 都是针对它们的偏移值 ,其余IoU在 之间的作为负样本,低于0.1的作为难例挖掘时的启发式样本(mmdetection中的做法是单阈值方式,与gt box的IoU大于0.5的proposal box作为正样本,小于的都是负样本)。

Faster R-CNN中是以分步的方式联合训练RPN和Fast R-CNN,大致的过程为:

但在mmdetection中,已经将RPN和Fast R-CNN的loss进行权重加和,从而进行联合训练,训练流程简化很多,且能够达到相同的效果。

确定了每个预测box或anchor box的正负类别后,便可以计算损失函数了,类似于Fast RCNN的做法,只有正样本的box才会参与box损失计算,损失函数如下:

为类别损失为类别损失函数,使用交叉熵损失, 为box回归损失,使用smooth L1损失,论文中平衡因子lambda为10。 表示第i个anchor box对应的gt 类别(背景为0,对象为1), 为gt box相对anchor box的偏移量(如果该anchor box被确定为正样本),通过下面的公式计算得到, 即表示只有 ,即为正样本时才会计算box的损失。

Fast R-CNN的loss类似于RPN,只有proposal box为非背景类别(正样本)时才计算box损失, 为类别损失, 为box损失, 表示proposal box的 , 时表示背景(通过2.3.2的方式确定proposal box的类别)。 为平衡因子,作者所有实验中 。为了防止box回归的L2 loss放大噪声(异常loss)从而影响训练,作者将L2 loss修改为 loss,当box尺寸的差异较大时使用L1 loss,抑制异常值对梯度的贡献。

其中v是通过下面的公式将gt box( , , , )转换得到,其中,( , , , )为proposal box的在原图中的中心点坐标和宽与高。

在Faster R-CNN和Faster R-CNN-ResNet中,由于RPN只是在单尺寸的feature map上进行滑窗,为了缓解多尺寸的问题,每个滑窗位置会设计多个尺寸的anchor,但是在Faster R-CNN-FPN中使用了FPN,则天然就具有了适应对象多尺寸的问题,因此不用再为每个滑窗设计多个尺寸的anchor。即在Faster RCNN-FPN中,为每种尺寸feature map上的滑窗只设计了单一尺寸多种长宽比的anchor,长宽比有 、 和 ,不同feature map上anchor的尺寸为: , , , 和 ,依次对应P2、P3、P4、P5和P6。

COCO上的训练细节:RPN的weight decay为0.0001,SGD的 ,初始学习率为0.002,学习率调整使用step decay方式。

[图像算法]-Faster RCNN详解

paper: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Tensorflow-faster r-cnn github: Tensorflow Faster RCNN for Object Detection

faster rcnn是何凯明等大神在2015年提出目标检测算法,该算法在2015年的ILSVRV和COCO竞赛中获得多项第一。该算法在fast rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。

(1)image input;
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
(3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
(4)将每个Region Proposal提取的CNN特征输入到SVM进行分类;
(5)对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.
缺陷:
(1) 训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
(2) 训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
(3) 速度慢:使用GPU,VGG16模型处理一张图像需要47s;
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算;
(5) SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.

(1)image input;
(2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
(3)将整张图片输入CNN,进行特征提取;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

相比R-CNN,主要两处不同:
(1)最后一层卷积层后加了一个ROI pooling layer;
(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练
改进:
(1) 测试时速度慢:R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.
(2) 训练时速度慢:R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.
(3) 训练所需空间大:R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.
(4) 由于ROI pooling的提出,不需要再input进行Corp和wrap操作,避免像素的损失,巧妙解决了尺度缩放的问题.

(1)输入测试图像;
(2)将整张图片输入CNN,进行特征提取;
(3)用RPN先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

相比FASTER-RCNN,主要两处不同:
(1)使用RPN(Region Proposal Network)代替原来的Selective Search方法产生建议窗口;
(2)产生建议窗口的CNN和目标检测的CNN共享

改进:
(1) 如何高效快速产生建议框?
FASTER-RCNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.

从上面的三张图可以看出,Faster R CNN由下面几部分组成:
1.数据集,image input
2.卷积层CNN等基础网络,提取特征得到feature map
3-1.RPN层,再在经过卷积层提取到的feature map上用一个3x3的slide window,去遍历整个feature map,在遍历过程中每个window中心按rate,scale(1:2,1:1,2:1)生成9个anchors,然后再利用全连接对每个anchors做二分类(是前景还是背景)和初步bbox regression,最后输出比较精确的300个ROIs。
3-2.把经过卷积层feature map用ROI pooling固定全连接层的输入维度。
4.然后把经过RPN输出的rois映射到ROIpooling的feature map上进行bbox回归和分类。

SPP-Net是出自论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
由于一般的网络结构中都伴随全连接层,全连接层的参数就和输入图像大小有关,因为它要把输入的所有像素点连接起来,需要指定输入层神经元个数和输出层神经元个数,所以需要规定输入的feature的大小。而SPP-NET正好解决了这个问题。

如果原图输入是224x224,对于conv5出来后的输出,是13x13x256的,可以理解成有256个这样的filter,每个filter对应一张13x13的activation map.如果像上图那样将activation map pooling成4x4 2x2 1x1三张子图,做max pooling后,出来的特征就是固定长度的(16+4+1)x256那么多的维度了.如果原图的输入不是224x224,出来的特征依然是(16+4+1)x256;直觉地说,可以理解成将原来固定大小为(3x3)窗口的pool5改成了自适应窗口大小,窗口的大小和activation map成比例,保证了经过pooling后出来的feature的长度是一致的.

总结而言,当网络输入的是一张任意大小的图片,这个时候我们可以一直进行卷积、池化,直到网络的倒数几层的时候,也就是我们即将与全连接层连接的时候,就要使用金字塔池化,使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量)。

ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图.对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入.

为什么要pooling成7×7的尺度?是为了能够共享权重。Faster RCNN除了用到VGG前几层的卷积之外,最后的全连接层也可以继续利用。当所有的RoIs都被pooling成(512\×7\×7)的feature map后,将它reshape 成一个一维的向量,就可以利用VGG16预训练的权重,初始化前两层全连接.

那么经过何种变换才能从图11中的窗口P变为窗口呢?比较简单的思路就是:

注意:只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟GT离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理).这个也是G-CNN: an Iterative Grid Based Object Detector多次迭代实现目标准确定位的关键. 线性回归就是给定输入的特征向量X,学习一组参数W,使得经过线性回归后的值跟真实值Y(Ground Truth)非常接近.即.那么Bounding-box中我们的输入以及输出分别是什么呢?
如上图中标识:
① rpn_cls:60*40*512-d ⊕ 1*1*512*18 》 60*40*92 逐像素对其9个Anchor box进行二分类
② rpn_bbox:60*40*512-d ⊕ 1*1*512*36》60*40*9*4 逐像素得到其9个Anchor box四个坐标信息

逐像素对Anchors分类标记
① 去除掉超过1000*600这原图的边界的anchor box
② 如果anchor box与ground truth的IoU值最大,标记为正样本,label=1
③ 如果anchor box与ground truth的IoU》0.7,标记为正样本,label=1
④ 如果anchor box与ground truth的IoU《0.3,标记为负样本,label=0
剩下的既不是正样本也不是负样本,不用于最终训练,label=-1

逐像素Bbox回归纠正
除了对anchor box进行标记外,另一件事情就是计算anchor box与ground truth之间的偏移量
令:ground truth:标定的框也对应一个中心点位置坐标x ,y 和宽高w ,h
anchor box: 中心点位置坐标x_a,y_a和宽高w_a,h_a
所以,偏移量:
△x=(x -x_a)/w_a △y=(y -y_a)/h_a
△w=log(w /w_a) △h=log(h /h_a)
通过ground truth box与预测的anchor box之间的差异来进行学习,从而是RPN网络中的权重能够学习到预测box的能力

接着进一步对Anchors进行越界剔除和使用nms非最大值抑制,剔除掉重叠的框;比如,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个);这样,进入到下一层ROI Pooling时region proposal大约只有300个。

参考文献:

从R-CNN到Faster R-CNN

论文: 《Rich feature hierarchies for accurate object detection and semantic segmentation》

发表年份:2013

RCNN(Regions with CNN features)是将CNN用到目标检测的一个里程碑,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。

Region proposal是一类传统的候选区域生成方法,论文使用 selective search  生成大约2k个候选区域(先用分割手段将图片完全分割成小图,再通过一些合并规则,将小图均匀的合并,经过若干次合并,直到合并成整张原图),然后将proposal的图片进行归一化(大小为217*217)用于CNN的输入。

对每个Region proposal使用CNN提取出一个4096维的特征向量

3.1 CNN提取的特征输入到SVM分类器中,对region proposal进行分类,与 ground-truth box的IoU大于0.5的为正样本,其余为负样本。论文中每个图片正样本个数为32负样本个数为96。得到所有region proposals的对于每一类的分数,再使用贪心的非极大值抑制方法对每一个SVM分类器类去除相交的多余的框。

3.2 使用一个线性回归器对bounding box进行修正,proposal bounding box的大小位置与真实框的转换关系如下:

综上,整个网络结构如下:
R-CNN在当年无论是在学术界还是工业界都是具有创造性的,但是现在来看RCNN主要存在下面三个问题:

1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;

2)针对传统CNN需要固定尺寸(217*217)的输入图像,crop/warp(归一化)产生物体截断或拉伸,丧失或者改变了图片本身的信息;

3)每一个ProposalRegion都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的CNN特征提取导致巨大的计算浪费。
论文: 《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》

发表年份:2015

既然CNN特征提取如此耗时,为什么还要对每个Region proposal进行特征提取,而不是整体进行特征提取,然后在分类之前做一次Region的截取呢,于是就诞生了SPP-Net。

1.解决了CNN需要固定大小输入的变换后导致图片信息丢失或者变化的问题

2.对于一张图,只需要进行一次的特征提取运算,避免了R-CNN中特征重复计算的问题

CNN为什么需要固定大小的输入?

R-CNN中会对图片缩放成217*217的固定大小,从而导致物体发生形变(如下图的上部分所示)。与前面不同,SPP-Net是加在最后一个卷积层的输出的后面,使得不同输入尺寸的图像在经过前面的卷积池化过程后,再经过SPP-net,得到相同大小的feature map,最后再经过全连接层进行分类

以AlexNet为例,经CNN得到conv5输出的任意尺寸的feature map,图中256-d是conv5卷积核的数量。将最后一个池化层pool5替换成SPP layer,将feature map划分成不同大小的网格,分别是`4x4`,`2x2`,`1x1`,每个网格中经过max pooling,从而得到4x4+2x2+1x1=21个特征值,最后将这21个特征值平铺成一个特征向量作为全连接层的输入,这种方式就是 空间金字塔池化 。

与R-CNN不同,SPP-Net中是将整张图片进行一次特征提取,得到整张图片的feature map,然后对feature map中的候选区域(RoIs)经过空间金字塔池化,提取出固定长度的特征向量进入全连接层。

原图候选区域与特征图上的RoIs的转换流程:
综上,整个网络结构如下图。SPP-Net相比R-CNN做了很多优化,但现在来看依然存在一些问题,主要如下:
论文: 《Fast R-CNN》

发表年份:2015

Fast R-CNN是对R-CNN的一个提升版本,相比R-CNN,训练速度提升9倍,测试速度提升213倍,mAP由66%提升到66.9%
主要改进点如下:
多任务损失函数(Multi-task Loss):

        Fast R-CNN将分类和边框回归合并,通过多任务Loss层进一步整合深度网络,统一了训练过程。分为两个损失函数:分类损失和回归损失。分类采用softmax代替SVM进行分类,共输出N(类别)+1(背景)类。softmax由于引入了类间竞争,所以分类效果优于SVM,SVM在R-CNN中用于二分类。回归损失输出的是4*N(类别),4表示的是(x,y,w,h分别表示候选框的中心坐标和宽、高)。

SVD对全连接层进行分解:

        由于一张图像约产生2000个RoIs,将近一半多的时间用在全连接层计算,为了提高运算速度,使用 SVD(奇异值分解) 对全连接层进行变换来提高运算速度。一个大的矩阵可以近似分解为三个小矩阵的乘积,分解后的矩阵的元素数目远小于原始矩阵的元素数目,从而达到减少计算量的目的。通过对全连接层的权值矩阵进行SVD分解,使得处理一张图像的速度明显提升。

论文: 《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

发表年份:2016

        SPP-Net和Fast R-CNN都有一个非常耗时的候选框选取的过程,提取候选框最常用的SelectiveSearch方法,提取一副图像大概需要2s的时间,改进的EdgeBoxes算法将效率提高到了0.2s,但是还是比较耗时。

        Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变化问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)

Region Proposal Network:

        RPN的核心思想是候选框的提取不在原图上做,而是在feature map上做,这意味着相比原图更少的计算量。在Faster R-CNN中,RPN是单独的分支,通过RPN提取候选框并合并到深度网络中。
多尺度先验框:

RPN网络的特点在于通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选窗口(不同尺度、不同宽高),提取对应9个候选窗口(anchor)的特征,用于目标分类和边框回归,与FastRCNN类似。
anchor的生成规则有两个:调整宽高比和放大。如下图所示,假设base_size为16,按照1:2,1:1,2:1三种比例进行变换生成下图上部分三种anchor;第二种是将宽高进行三种倍数放大,2^3=8,2^4=16,2^5=32倍的放大,如16x16的区域变成(16*8)*(16*8)=128*128的区域,(16*16)*(16*16)=256*256的区域,(16*32)*(16*32)=512*512的区域。
训练过程中,涉及到的候选框选取,选取依据如下:

从模型训练的角度来看,通过使用共享特征交替训练的方式,达到接近实时的性能,交替训练方式为:

Faster R-CNN实现了端到端的检测,并且几乎达到了效果上的最优,有些基于Faster R-CNN的变种准确度已经刷到了87%以上。速度方面还有优化的余地,比如Yolo系列(Yolo v1/v2/v3/v4)。对于目标检测,仍处于一个探索和高度发展的阶段,还不断有更优的模型产生。

Faster R-CNN 论文阅读

原文: Ren S, He K, Girshick R, et al. Faster R-CNN: towards real-time object detection with region proposal networks// International Conference on Neural Information Processing Systems. MIT Press, 2015:91-99.

译文参考: Faster R-CNN论文翻译——中英文对照

目标检测网络依赖于Region Proposal算法假设目标位置,通过引入Region Proposal(网络RPN),与检测网络共享全图像卷积特征,使得Region Proposals的成本近乎为零。

如下图所示,图a采用的是图像金子塔(Pyramids Of Images)方法;图b采用的是滤波器金字塔(Pyramids Of Filters)方法;图c引入“锚”盒(“Anchor“ Boxes)这一概念作为多尺度和长宽比的参考,其可看作回归参考金字塔(Pyramids Of Regression References)方法,该方法可避免枚举图像、多尺度滤波器和长宽比。

为了将RPN与Fast R-CNN相结合,本文提出了一种新的训练策略:在region proposal任务和目标检测任务之间交替进行微调,同时保持proposals的固定。该方案能够快速收敛,两个任务之间并共享具有卷积特征的统一网络。

Faster R-CNN由两个模块组成:

RPN以任意大小的图像作为输入,输出一组矩形的目标proposals,每个proposals都有一个目标得分。在实验中,假设两个网络(RPN和Fast R-CNN)共享一组共同的卷积层,并研究了具有5个共享卷积层的 Zeiler和Fergus模型(ZF) ,以及具有13个共享卷积层的 Simonyan和Zisserman模型(VGG-16) 。

为了生成region proposals,对最后的共享卷积层输出的卷积特征图谱使用一个小网络。该网络以卷积特征图谱的 空间窗口作为输入,且每个滑动窗口映射到一个低维特征,所有空间位置共享全连接层。

该低维特征作为两个子全连接层———边界框回归层(box-regression layer, reg)和边界框分类层(box-classification layer, cls)的输入,其卷积核均为 大小。

对于每个滑动窗口位置,可同时预测多个region proposals,最大region proposals数为 。因此,reg层具有 个输出,用于编码k个边界框的坐标;cls层具有 个得分,用于估计每个proposal是目标或不是目标的概率。

Anchors:k个proposals相对于 个参考框是参数化形式。

anchor位于滑动窗口的中心,并与尺度和长宽比相关。默认情况,使用3个尺度和3个长宽比,在每个滑动位置产生 个anchors。对于大小为 的卷积特征图谱,共产生 个anchors。

基于anchor的方法建立在anchors金字塔(pyramid of anchors)上,参考多尺度和长宽比的anchor盒来分类和回归边界框,用于解决多尺度和多长宽比问题。

为了训练RPN,为每个anchor分配一个二值标签。

正标签:

负标签:IoU值低于0.3。

对Fast R-CNN中的多任务损失进行最小化。图像的损失函数为:

其中, 是mini-batch数据中anchor的索引, 是第i个anchor作为目标的预测概率。若anchor为正标签,真值 ;反之, 。 是表示预测边界框4个参数化坐标的向量, 是正真值框的向量。分类损失 为两个类别的对数损失;回归损失 ,其中 为在 Fast R-CNN 一文中定义的鲁棒损失函数(平滑 )。 表示回归损失仅对正anchor激活,否则被禁用( )。cls和rge层的输出分别由 和 组成。该两项使用 和 进行标准化,并使用平衡参数 加权处理。等式中cls项根据mini-batch的大小进行归一化,而reg项根据anchor位置的数据进行归一化。默认情况下, 从而使得cls和reg项的权重大致相等。

对于边界框回归,采用 Rich feature hierarchies for accurate object detection and semantic segmentation 一文中的4个坐标参数化方法:

其中, 和 表示边界框的中心坐标及其宽和高。变量 和 分别表示预测边界框、anchor和真值框。

采样策略:以图像为中心。

在图像中随机采样256个anchors,用于mini-batch数据中损失函数的计算,正负样本的比例为 。

从标准差为0.01的零均值高斯分布中提取权重来随机初始化所有的新网络层,而共享卷积层通过预训练ImageNet分类模型来初始化。同时,调整ZF网络的所有网络层,以及VGG网络的conv3_1之上的网络,用于节省内存的使用。对于60k的mini-batch数据,学习率为0.001;对于PASCAL VOC数据集中的20k的mini-bacth数据,学习率为0.0001。随机梯度下降算法的动量设置为0.9,重量衰减率为0.0005。

训练具有共享特征网络的三个方法:

版权印版权标识

怎么理解 faster rcnn中rpn的anchor

Faster RCNN用了整合了之前的RCNN啊,SPP-net啊,Fast RCNN啊这些网络的region proposal方式,提出了RPN,所谓RPN就是根据图像自身的色彩以及边缘信息等等来生成region proposal的一个网络,因此实现了end-to-end,但还是慢
YOLO就是把原图划成7x7的小格子,在每个格子里对目标进行预测,相当于固定了region proposal的位置和大小,所以没有了RPN,加快了速度,但是准确率下去了
SSD用了YOLO的思想,但是选了6个比例来对原图进行划分,这样就保证了大物体有大格子学,小物体有小格子学,不像YOLO只有一种大小的格子,准确率也提高了(相对于YOLO),速度也上去了(相对于Faster,SSD也没有RPN步骤)

Faster R-CNN:使用RPN实时目标检测

论文: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

目标检测网络大多依靠 区域生成 (region proposal)算法来假设目标的位置。 R-CNN 是采用 Selective Search 算法来提取(propose)可能的 RoIs(regions of interest) 区域,然后对每个提取区域采用标准 CNN 进行分类。选择性搜索(Selective Search )方法就是在目标对象周围设定2000个形状大小位置不一的候选区域,目标物体在候选区域的可能性还是比较大的。然后对这些区域卷积,找到目标物体,虽然大多数区域都是无用的。与寻找几乎个区域比起来,这种方法要高效的多。

Fast R-CNN ,不在原始图像生成备选区域,而是先整张图片通过卷积网络得到特征图,然后在特征图上使用备选区域算法得到感兴趣的区域在特征图的映射,之后使用 Rol Pool将所有区域变成同样尺寸,大大减少了这些目标检测网络的运行时间,但是区域生成的计算成为整个检测网络的瓶颈。

Faster R-CNN 引入了一个 区域生成网络(Region Proposal Network,RPN) ,该网络与检测网络共享输入图像的卷积特征,从而使接近零时间成本的区域生成成为可能。 RPN是一个全卷积网络,可以同时在每个位置预测目标边界和目标分数。RPN经过端到端的训练,可以生成高质量的区域候选框,然后提供给Fast R-CNN用于检测。

Faster R-CNN 由两个模块组成:第一个模块是区域生成的深度全卷积网络,第二个模块是使用备选区域的Fast R-CNN检测器。整个系统是一个单个的,统一的目标检测网络。使用最近流行的“注意力”机制的神经网络术语,RPN模块告诉Fast R-CNN模块在哪里寻找目标。

针对一张图片,需要获得的输出有:

Faster R-CNN 第一步是采用基于分类任务(如ImageNet)的 CNN 模型作为特征提取器。输入图片表示为 H × W × D 的形式,经过预训练 CNN 模型的处理,得到卷积特征图(conv feature map)。

Faster R-CNN 最早是采用在 ImageNet 训练的 ZF 和 VGG ,其后出现了很多其它权重不同的网络.。如 MobileNet 是一种小型效率高的网络结构,仅有 3.3M 参数;而ResNet-152 的参数量达到了 60M;新网络结构,如 DenseNet 在提高了结果的同时,降低了参数数量。

以 VGG16 为例:

VGG16 图片分类时,输入为 224×224×3 的张量(即,一张 224×224 像素的 RGB 图片)。网络结构最后采用 FC 层(而不是 Conv 层)得到固定长度的向量,以进行图片分类.。对最后一个卷积层的输出拉伸为1维的向量,然后送入 FC 层。官方实现中是采用的卷积层 conv5/conv5_1 的输出。

在深度上,卷积特征图对图片的所有信息进行了编码,同时保持相对于原始图片所编码 “things” 的位置。例如,如果在图片的左上角存在一个红色正方形,而且卷积层有激活响应,那么该红色正方形的信息被卷积层编码后,仍在卷积特征图的左上角。因此利用特征图检测目标所在的位置是可行的。

ResNet 结构逐渐取代 VGG 作为基础网络,用于提取特征。ResNet 相对于 VGG 的明显优势是,网络更大,因此具有更强的学习能力.。这对于分类任务是重要的,在目标检测中也应该如此。另外,ResNet 采用残差连接(residual connection) 和 BN (batch normalization) 使得深度模型的训练比较容易。

然后,RPN(Region Propose Network) 对提取的卷积特征图进行处理,寻找可能包含 目标的 预定义数量的区域(regions,边界框) 。为了生成候选区域,在最后的共享卷积层输出的卷积特征图上做 3x3 卷积,卷积核共有512个(VGG),后面是ReLU,这样每个 3x3 区域会得到一个512维的特征向量。然后这个特征向量被输入到两个全连接层——一个边界框回归层(reg)和一个边界框分类层(cls)。

下面解释 k, 2k, 4k 的含义。

基于深度学习的目标检测中,可能最难的问题就是生成长度不定(variable-length)的边界框列表(bounding-boxes),边界框是具有不同尺寸(sizes)和长宽比(aspect ratios )的矩形。在构建深度神经网络时,最后的网络输出一般是固定尺寸的张量输出(采用RNN的除外)。例如,在图片分类中,网络输出是 (C, ) 的张量,C是类别标签数,张量的每个位置的标量值表示图片是类别的概率值。

在 RPN 中,通过采用 anchors(锚) 来解决边界框列表长度不定的问题,即在原始图像中统一放置固定大小的参考边界框。上面说到RPN对特征图做3x3的卷积,假设每一次卷积需要预测 k 个候选区域,因此,reg层具有 4k 个输出,编码 k 个边界框的坐标,cls层输出 2k 个分数,估计每个区域是目标或是背景的概率。这 k 个区域就是 被 k 个参考边界框初始化, k 个参考框就是 k 个锚点,作为第一次预测目标位置的参考 boxes。锚点的中心位于卷积核滑动窗口的中心。默认情况下每个滑动位置使用3个不同尺度(128 2 , 256 2 , 512 2 )3个不同长宽比(1:2, 1:1, 2:1)的锚点,k=9。对于大小为W×H(通常约为2400)的卷积特征图,总共有 W×H×k 个锚点。对于RPN的最后两个全连接层,参数的个数为 512×(4+2)×k.

不同于直接检测目标的位置,这里将问题转化为两部分。对每一个 anchor 而言:

有一种简单的方法来预测目标的边界框,即学习相对于参考边界框的偏移量。假设参考 box:( ),待预测量:( ),一般都是很小的值,以调整参考 box 更好的拟合所需要的。

虽然 anchors 是基于卷积特征图定义的,但最终的 anchos 是相对于原始图片的.

由于只有卷积层和 pooling 层,特征图的维度是与原始图片的尺寸成比例关系的. 即,数学地表述,如果图片尺寸 w×h,特征图的尺寸则是w/r×h/r. 其中,r 是下采样率(subsampling ratio). 如果在卷积特征图空间位置定义 anchor,则最终的图片会是由 r 像素划分的 anchors 集。在 VGG 中, r=16。

RPN 利用所有的参考边界框(anchors),输出一系列目标的良好的 proposals。针对每个 anchor,都有两个不同的输出:

RPN是全卷积网络。

对于分类层,每个 anchor 输出两个预测值:anchor 是背景(background,非object)的 score 和 anchor 是前景(foreground,object) 的 score.

对于回归层,也可以叫边界框调整层,每个 anchor 输出 4 个预测值:
(Δxcenter,Δycenter,Δwidth,Δheight),用于 anchors 来得到最终的 proposals。根据最终的 proposal 坐标和其对应的 objectness score,即可得到良好的 objects proposals.

RPN 有两种类型的预测值输出:二值分类和边界框回归调整。

为了训练RPN,我们为每个锚点分配一个二值类别标签(是目标或不是目标)。我们给两种锚点分配一个正标签:(i)具有与实际边界框的重叠最高交并比(IoU)的锚点,或者(ii)具有与实际边界框的重叠超过0.7 IoU的锚点。注意,单个真实边界框可以为多个锚点分配正标签。通常第二个条件足以确定正样本;但我们仍然采用第一个条件,因为在一些极少数情况下,第二个条件可能找不到正样本。对于所有的真实边界框,如果一个锚点的IoU比率低于0.3,我们给非正面的锚点分配一个负标签。既不正面也不负面的锚点不会有助于训练目标函数。

然后,随机采样 anchors 来生成batchsize=256 的 mini-batch,尽可能的保持 foreground 和 background anchors 的比例平衡。

RPN 对 mini-batch 内的所有 anchors 采用二分类交叉熵来计算分类 loss。然后,只对 mini-batch 内标记为 foreground 的 anchros 计算回归 loss。为了计算回归的目标targets,根据 foreground anchor 和其最接近的 groundtruth object,计算将 anchor 变换到 object groundtruth 的偏移值 Δ。

Faster R-CNN没有采用简单的 L1 或 L2 loss 用于回归误差,而是采用 Smooth L1 loss. Smooth L1 和 L1 基本相同,但是,当 L1 误差值非常小时,表示为一个确定值即认为是接近正确的,loss 就会以更快的速度消失.

由于 Anchors 一般是有重叠,因此,相同目标的候选区域也存在重叠。

为了解决重叠 proposals 问题,采用 NMS 算法处理,丢弃与一个 score 更高的 proposal 间 IoU 大于预设阈值的 proposals.

虽然 NMS 看起来比较简单,但 IoU 阈值的预设需要谨慎处理. 如果 IoU 值太小,可能丢失 objetcs 的一些 proposals;如果 IoU 值过大,可能会导致 objects 出现很多 proposals。IoU 典型值为 0.7。

NMS 处理后,根据 sore 对topN 个 proposals 排序. 在 Faster R-CNN 论文中 N=2000,其值也可以小一点,如 50,仍然能的高好的结果.

当获得了可能的相关目标和其在原始图像中的对应位置之后,问题就更加直接了,采用 CNN 提取的特征和包含相关目标的边界框,采用 RoI Pooling 处理,并提取相关目标的特征,得到一个新的向量。

RPN 处理后,可以得到一堆没有分类得分的目标 proposals。待处理问题为,如何利用这些边界框并分类。

一种最简单的方法是,对每个 porposal,裁剪,并送入pre-trained base 网络,提取特征;然后,将提取特征来训练分类器. 但这就需要对所有的 2000 个 proposals 进行计算,效率低,速度慢。Faster R-CNN通过重用卷积特征图来加快计算效率,即采用 RoI(region of interest) Pooling 对每个 proposal 提取固定尺寸的特征图。然后 R-CNN 对固定尺寸的特征图分类。

目标检测中,包括 Faster R-CNN,常用一种更简单的方法,即:采用每个 proposal 来对卷积特征图裁剪crop,然后利用插值算法(一般为双线性插值 bilinear)将每个 crop resize 到固定尺寸14×14×ConvDepth. 裁剪后,利用 2×2 kernel 的 Max Pooling 得到每个 proposal 的最终7×7×ConvDepth 特征图.

之所以选择该精确形状,与其在下面的模块(R-CNN)中的应用有关。

R-CNN利用RoI Pooling提取的特征进行分类,采用全连接层来输出每个可能的 目标类别的分类得分,是Faster R-CNN框架中的最后一个步骤。

R-CNN 有两个不同的输出:

R-CNN 对每个 proposal 的特征图,拉平后采用 ReLU 和两个大小为 4096 维的全连接层进行处理。然后,对每个不同目标采用两个不同的全连接层处理:一个全连接层有 N+1 个神经单元,其中 N 是类别 class 的总数,包括 background class;一个全连接层有 4N 个神经单元,是回归预测输出,得到 N 个可能的类别分别预测 Δcenterx,Δcentery,Δwidth,Δheight。

R-CNN 的目标基本上是与 RPN 目标的计算是一致的,但需要考虑不同的可能的 object 类别 classes.

根据 proposals 和 ground-truth boxes,计算其 IoU。与任何一个 ground-truth box 的 IoU 大于 0.5 的 proposals 被设为正确的 boxes。IoU 在 0.1 到 0.5 之间时设为 background。这里忽略没有任何交叉的 proposals。这是因为,在此阶段,假设已经获得良好的 proposals。当然,所有的这些超参数都是可以用于调整以更好的拟合 objects。

边界框回归的目标计算的是 proposal 与其对应的 ground-truth间的偏移量,只对基于 IoU 阈值设定类别后的 proposals 进行计算。随机采用一个平衡化的 mini-batch=64,其中,25% 的 foreground proposals(具有类别class) 和 75% 的background proposals.

类似于 RPNs 的 losses,对于选定的 proposals,分类 loss 采用 multiclass entropy loss;对于 25% 的 foreground proposals 采用 SmoothL1 loss 计算其与 groundtruth box 的匹配。

由于 R-CNN全连接网络对每个类别仅输出一个预测值,当计算边框回归loss 时需谨慎,只需考虑正确的类别。

类似于 RPN,R-CNN 最终输出一堆带有类别分类的objects,在返回结果前,再进一步进行处理。

为了调整边界框,需要考虑概率最大的类别的 proposals. 忽略概率最大值为 background class 的proposals.

当得到最终的 objects 时,并忽略被预测为 background 的结果,采用 class-based NMS. 主要是通过对 objects 根据类别class 分组,然后根据概率排序,并对每个独立的分组采用 NMS 处理,最后再放在一起.

最终得到的 objects 列表,仍可继续通过设定概率阈值的方式,来限制每个类的 objects 数量.

Faster R-CNN在论文中是采用分步方法,对每个模块分别训练再合并训练的权重. 自此,End-to-end 的联合训练被发现能够得到更好的结果.

当将完整的模型合并后,得到 4 个不同的 losses,2 个用于 RPN,2 个用于 R-CNN。4 种不同的 losses 以加权和的形式组织. 可以根据需要对分类 loss 和回归 loss 设置权重,或者对 R-CNN 和 RPNs 设置不同权重.

采用 SGD 训练,momentum=0.9. 学习率初始值为 0.001,50K 次迭代后衰减为 0.0001. 这是一组常用参数设置。

faster rcnn(怎么运行faster-rcnn的代码)

本文编辑:admin
faster rcnn ,cn

更多文章:


mb466苹果笔记本(苹果笔记本MB466)

mb466苹果笔记本(苹果笔记本MB466)

本文目录苹果笔记本MB466苹果MacBook(MB466CH/A)配置请问懂行的大侠讲一下苹果电脑MB466比MB402的什么好大概相差在什么苹果MacBook(MB466CH/A)能弄独立显卡吗准备入手一台二手95新的苹果MAC笔记本M

2023年3月4日 14:00

geforce205相当于(GF205相当于哪个型号的显卡)

geforce205相当于(GF205相当于哪个型号的显卡)

大家好,如果您还对geforce205相当于不太了解,没有关系,今天就由本站为大家分享geforce205相当于的知识,包括GF205相当于哪个型号的显卡的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录GF205相

2024年6月6日 12:11

移动硬盘读不出来什么原因(移动硬盘读不出数据的原因及解决方法)

移动硬盘读不出来什么原因(移动硬盘读不出数据的原因及解决方法)

本文目录移动硬盘读不出数据的原因及解决方法移动硬盘电脑读不出来移动硬盘闪灯但读不出怎么回事 移动硬盘闪灯但读不出的原因移动硬盘无法识别的原因移动硬盘读取不出来移动硬盘读不出数据的原因及解决方法   移动硬盘读不出数据的原因及解决:

2023年6月29日 20:20

x1隐士测评(x1 隐士4代 230w电源用不了吧)

x1隐士测评(x1 隐士4代 230w电源用不了吧)

本文目录x1 隐士4代 230w电源用不了吧x1隐士2021适合作图吗thinkpadx1隐士二代缺点x1隐士gen4屏能不能用在ThinkPad X1隐士跟P1隐士或者MacBook Pro 2019怎么选想买台笔记本电脑,ThinkPa

2024年6月6日 20:07

三星港版要不要刷国行(三星港版不刷国行直接使用)

三星港版要不要刷国行(三星港版不刷国行直接使用)

本文目录三星港版不刷国行直接使用三星note9港版,不刷国行!可以在大陆正常使用吗三星手机为什么要刷国行系统港版三星刷国行系统缺点三星港版未激活,刷成国行会激活吗三星8港版有必要刷国行版嘛三星港版固件国行哪个调度好三星s6edge+港版的,

2023年5月4日 11:00

imac2012年末型号(2012年出的IMAC一体机27寸屏幕的那款显卡是什么型号的)

imac2012年末型号(2012年出的IMAC一体机27寸屏幕的那款显卡是什么型号的)

“imac2012年末型号”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看imac2012年末型号(2012年出的IMAC一体机27寸屏幕的那款显卡是什么型号的)!本文目录2012年出的IMAC一体机27寸屏幕的那款显卡是什

2024年6月23日 22:31

想学手机维修在哪里学(手机维修在哪里学)

想学手机维修在哪里学(手机维修在哪里学)

本文目录手机维修在哪里学想学手机维修到哪里学手机维修哪里学到哪里可以学修手机我想学修手机的技术,在哪里可以学哪里学手机维修手机维修去哪里学手机维修在哪里学你好,手机维修可以去速成班里面学(速成班自己百度找,找到顺眼的就实地勘察,看看合适自己

2023年8月23日 23:00

谷歌广告屏蔽(360安全卫士无法屏蔽谷歌浏览器的广告)

谷歌广告屏蔽(360安全卫士无法屏蔽谷歌浏览器的广告)

大家好,今天小编来为大家解答以下的问题,关于谷歌广告屏蔽,360安全卫士无法屏蔽谷歌浏览器的广告这个很多人还不知道,现在让我们一起来看看吧!本文目录360安全卫士无法屏蔽谷歌浏览器的广告如何关闭谷歌广告Google浏览器怎么屏蔽广告啊用ch

2024年9月18日 04:40

苹果自带app视频tv怎么用(苹果自带app视频tv怎么用)

苹果自带app视频tv怎么用(苹果自带app视频tv怎么用)

本文目录苹果自带app视频tv怎么用苹果tv怎么用AppleTV应该怎么用买来直接接电视能用吗怎么设置苹果手机上的apple tv功能怎么用apple tv 怎么用苹果自带app视频tv怎么用苹果tv需要在设置里面连接appleTV遥控器使

2023年5月21日 04:20

为什么福建有“海滨邹鲁”的说法?“海滨邹鲁”的含义

为什么福建有“海滨邹鲁”的说法?“海滨邹鲁”的含义

本文目录为什么福建有“海滨邹鲁”的说法“海滨邹鲁”的含义海滨邹鲁是什么意思“岭海名邦””“海滨邹鲁”是什么意思为什么福建有“海滨邹鲁”的说法这是一个后进生逆袭的故事。福建在文化意义上的开发远远晚于中原,直到西晋永嘉年间的“衣冠南渡”,才算得

2023年3月15日 01:20

联想c325的配置是什么?c325联想一体机怎么拆啊

联想c325的配置是什么?c325联想一体机怎么拆啊

大家好,如果您还对c325不太了解,没有关系,今天就由本站为大家分享c325的知识,包括联想c325的配置是什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录联想c325的配置是什么c325联想一体机怎么拆啊联想

2024年7月19日 08:04

三星max下载(三星MAX-560V.音响说明书谁有,谢谢..)

三星max下载(三星MAX-560V.音响说明书谁有,谢谢..)

本文目录三星MAX-560V.音响说明书谁有,谢谢..三星Galaxy Grand Max手机(安卓4.4.4系统)不能安装软件怎么办哪里有 3ds max 游戏模型下载三星手机软件下载在哪里面三星手机max怎么备份三星音响max-560v

2024年7月12日 11:28

epson打印机卡纸(epsonL455打印显示卡纸没有代码)

epson打印机卡纸(epsonL455打印显示卡纸没有代码)

本文目录epsonL455打印显示卡纸没有代码EPSONL3118卡纸怎么办epson打印机卡纸撕烂了出不了怎么办epson me 打印机总是显示卡纸其实没有卡纸,怎么办急!急!急!epson打印机卡纸怎么拿出来epson打印机经常卡纸怎么

2023年3月23日 05:40

3nod音响桔子酒店使用说明(北京桔子酒店用的什么音响)

3nod音响桔子酒店使用说明(北京桔子酒店用的什么音响)

各位老铁们,大家好,今天由我来为大家分享3nod音响桔子酒店使用说明,以及北京桔子酒店用的什么音响的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录北

2024年9月11日 17:40

三星rv415u盘启动(三星rv415怎样设置u盘启动)

三星rv415u盘启动(三星rv415怎样设置u盘启动)

本文目录三星rv415怎样设置u盘启动三星笔记本rv415怎么进bios设置u盘启动不能识别三星rv415怎么样设置U盘启动 高手进三星rv415U盘启动怎么设置三星RV415怎么设置U盘启动Boot里没有U盘的选项,怎么开启呢三星RV41

2023年3月13日 04:00

免费游戏大全试试玩(免费可以玩的游戏不要钱的)

免费游戏大全试试玩(免费可以玩的游戏不要钱的)

本文目录免费可以玩的游戏不要钱的steam必玩的免费游戏中文小游戏4399大全免试玩游戏大全4399小游戏免费试玩免费可以试玩的小游戏有哪些可以免费试玩的小游戏,说说吧疫情宅在家,请大家推荐几个打发时间的小游戏什么游戏不花钱玩什么游戏能使你

2024年6月22日 09:07

华为s7pro手机壳(华为nzones7pro+和华为nova8SE手机壳通用吗)

华为s7pro手机壳(华为nzones7pro+和华为nova8SE手机壳通用吗)

本文目录华为nzones7pro+和华为nova8SE手机壳通用吗华为nova7pro智能手机壳怎么设置华为s7pro+手机壳和哪个型号通用华为nzones7pro+和华为nova8SE手机壳通用吗是不通用的,外观即使差不多,也会有的口不完

2023年11月3日 00:20

小米8se缺点和不足(小米8 se、魅族x8、坚果Pro2s,选择哪款手机较好)

小米8se缺点和不足(小米8 se、魅族x8、坚果Pro2s,选择哪款手机较好)

本文目录小米8 se、魅族x8、坚果Pro2s,选择哪款手机较好小米8 SE对比vivo Z3,哪款手机更好一点小米8、Mix2s、小米8SE相比,选哪款比较好小米8 SE与荣耀9i,哪个手机的科技感更好、更吓人小米8SE 6+64GB的内

2023年3月29日 10:00

笔记本电脑fn键(笔记本电脑fn键功能介绍)

笔记本电脑fn键(笔记本电脑fn键功能介绍)

今天给各位分享笔记本电脑fn键功能介绍的知识,其中也会对笔记本电脑fn键功能介绍进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录笔记本电脑fn键功能介绍笔记本电脑上的Fn键有什么用处dell笔记本fn键是什么笔

2024年9月13日 01:10

小米汽车工程师招聘(雷军的小米汽车招人 自研L4级智能驾驶)

小米汽车工程师招聘(雷军的小米汽车招人 自研L4级智能驾驶)

今天给各位分享雷军的小米汽车招人 自研L4级智能驾驶的知识,其中也会对雷军的小米汽车招人 自研L4级智能驾驶进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录雷军的小米汽车招人 自研L4级智能驾驶小米汽车走向自动

2024年9月17日 04:20

近期文章

本站热文

4008827777转人工客服(4008827777饿了么怎么转人工电话)
2024-07-23 14:41:37 浏览:504
标签列表

热门搜索