超详细解读Faster R | 您所在的位置:网站首页 › fasterrcnn算法优缺点 › 超详细解读Faster R |
0. 一些啰嗦
2021年了,竟然还有人写关于Faster R-CNN的文章?我的原因主要有两点: 根据我们在实际项目和比赛中的经验,基于RoIAlign和FPN的Faster R-CNN(后面简称Faster R-CNN-FPN)是一个表现很强的基线,有必要充分了解它的思想和细节; 客观来说,相比单阶段、anchor free和基于transformer的检测方法,Faster R-CNN-FPN是一个细节很繁琐的方法,即使复现过一遍,时间长了很多细节也会忘记,而网上详细介绍该方法的文章较少,要了解方法的每个细节则必须阅读涉及Faster R-CNN-FPN演进的多篇论文或者源码。因此,很有必要用文字的方式记录Faster R-CNN-FPN的关键思想和细节,便于日后翻阅。 1. 关键思想 1.1 概述我们先从全局上了解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发展顺序的汇总介绍每个改进的核心思想。 1.1.1 Fast R-CNN在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)之上执行 由于滑窗操作是通过正方形的CNN卷积实现的,为了训练网络适应不同长宽比和尺寸的对象,RPN引入了anchor box的概念。每个滑窗位置会预置k个anchor box,每个anchor box的位置便是滑窗的中心点,k个anchor box的长宽比和尺寸不同,作者使用了9种,分别是长宽比为 在Faster RCNN基础上,将backbone替换为ResNet50或ResNet101,涉及部分细节的改动,我们放在本文的细节部分进行描述。 1.1.4 FPN在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使用 mask R-CNN提出的RoI Align缓解了RoIPooling的缺陷,能够显著提升小目标物体的检测能力。网上介绍RoIPooling和RoIAlign的文章很多,此处不再赘述,推荐阅读个人觉得比较好的两篇博客:RoIPooling和RoIAlign。 此处稍微啰嗦下个人对RoIPooling的思考: 为什么RoIPooling不使用自适应的池化操作,即根据输入的feature map的尺寸和希望输出的feature map尺寸,自动调整池化窗口的大小和步长以计算想要尺寸的feature map,类似于自适应池化操作,而不是将输入的feature map划分成均匀的小区域(bins,论文中划分为 本人之前介绍YOLOv3的文章也介绍过anchor box的作用,再加上本文1.1.2节中的介绍应该比较全面了,不再赘述。 2.实现细节此处的绝大部分细节来自论文,论文中未提及的部分,主要参考了mmdetection中的实现。 2.1 网络结构整个模型的网络结构可以划分为四个部分,分别为backbone、FPN、RPN head和Fast RCNN head。 backbone与Faster RCNN-ResNet相同,为ResNet系列(论文中实验时的网络);RPN和Fast RCNN使用的feature map原始多尺度feature map分别来自ResNet中的C2、C3、C4、C5阶段,即分别来自conv2_x、conv3_x、conv4_x和conv5_x阶段的输出。ResNet系列的结构如下表所示。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一共会 产生 训练时将gt box通过下面的公式转换为相对anchor box的偏移值,与网络的预测计算loss,至于将每个gt与具体的哪个anchor box计算偏移,则需要根据2.3.1节中的正负样本方法来确定。测试时将预测的box通过该公式中的逆运算计算出当前box相对原图的位置和大小, 以上提到的2000和1000是作为Fast R-CNN的输入proposal box,在训练时参与RPN loss计算的anchor boxs数量为256个,正负样本数量为 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操作并得到 网络都会针对每个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计算,正样本不足的由负样本补足。 2.3 正负样本 2.3.1 RPN的正负样本在RPN中,由于每个feature map的每个滑窗位置上的张量( 与gt box的IoU大于0.5的proposal box作为正样本,注意,是将proposal box与gt box计算IoU,Fast-RCNN中的proposal box的作用与anchor box有些类似,即确定正负样本和预测的box 都是针对它们的偏移值 ,其余IoU在 Faster R-CNN中是以分步的方式联合训练RPN和Fast R-CNN,大致的过程为: backbone使用ImageNet预训练模型初始化后训练RPN,新增的Head 卷积层随机初始化; 使用第1步RPN产生的proposal box, backbone使用ImageNet预训练模型初始化后训练Fast R-CNN,新增的Head 全连接层随机初始化; 使用第2步训练的模型初始化RPN的backbone,并且固定backbone参数不进行训练,对RPN新增的Head 卷积层进行微调,这一步开始RPN和Fast R-CNN共享同一backbone参数; 最后也固定Fast R-CNN的backbone,微调Fast R-CNN新增的Head全连接层。 但在mmdetection中,已经将RPN和Fast R-CNN的loss进行权重加和,从而进行联合训练,训练流程简化很多,且能够达到相同的效果。 2.4.1 RPN的损失函数确定了每个预测box或anchor box的正负类别后,便可以计算损失函数了,类似于Fast RCNN的做法,只有正样本的box才会参与box损失计算,损失函数如下:
Fast R-CNN的loss类似于RPN,只有proposal box为非背景类别(正样本)时才计算box损失, 其中v是通过下面的公式将gt box( 在Faster R-CNN和Faster R-CNN-ResNet中,由于RPN只是在单尺寸的feature map上进行滑窗,为了缓解多尺寸的问题,每个滑窗位置会设计多个尺寸的anchor,但是在Faster R-CNN-FPN中使用了FPN,则天然就具有了适应对象多尺寸的问题,因此不用再为每个滑窗设计多个尺寸的anchor。即在Faster RCNN-FPN中,为每种尺寸feature map上的滑窗只设计了单一尺寸多种长宽比的anchor,长宽比有 COCO上的训练细节:RPN的weight decay为0.0001,SGD的 RoIPooling: https://towardsdatascience.com/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44 RoIAlign: https://towardsdatascience.com/understanding-region-of-interest-part-2-roi-align-and-roi-warp-f795196fc193 Fast R-CNN Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks Feature Pyramid Networks for Object Detection Mask R-CNN Deep residual learning for image recognition mmdetection: https://github.com/open-mmlab/mmdetection |
CopyRight 2018-2019 实验室设备网 版权所有 |