【目标检测】对R-FCN论文的理解

  R-FCN 基于区域的全卷积网络。认为是对faster-RCNN的一种改进,速度提高了差不多三倍(主要是由于全程共享卷积),mAP也有了一定的提升。

目录

一 R-FCN概述

 1 R-FCN贡献

 2 R-FCN与传统二阶段网络的差异

3 分类网络的位置不敏感性和检测网络的位置敏感性

4 R-FCN的设计动机

二  R-FCN架构分析

1.算法步骤

2.Position-Sensitive Score Map

3 Position-Sensitive Rol Pooling

4 Position-Sensitive Regression

5. 为什么position-sensitive score map能够在含有某个类别的物体的某个部位的区域上具有高响应值?

6. Loss计算及其分析

三 R-FCN性能分析

四 总结


 

一 R-FCN概述

 1 R-FCN贡献

  • 提出敏感区域分数图来解决目标检测的位置敏感性问题。
  • 是以ROI为基础的,全卷积网络的二阶段目标检测框架
  • 比Faster-RCNN快2.5-20倍。

 2 R-FCN与传统二阶段网络的差异

相同点:首先,两者二阶段的检测框架(全卷积子网络+RoI-wise subnetwork); 其次两者最终输出的结果都是相应的类别和对应的BB;
不同点:
如上图所示,我们可以看到和Faster R-CNN相比,R-FCN具有更深的共享卷积网络层,这样可以获得更加抽象的特征;同时,它没有RoI-wise subnetwork,不像Faster R-CNN的feature map左右都有对应的网络层,它是真正的全卷积网络架构;从图中的表格可以看出Faster R-CNN的共享卷积子网络是91层,RoI-wise子网络是10层,而R-FCN只有共享卷积子网络,深度为101层。与R-CNN相比,最大的不同就是直接获得整幅图像的feature map,再提取对应的ROI,而不是直接在不同的ROI上面获得相应的feature map。

3 分类网络的位置不敏感性和检测网络的位置敏感性

分类网络的位置不敏感性:简单来讲,对于分类任务而言,我希望我的网络有一个很好地分类性能,随着某个目标在图片中不断的移动,我的网络仍然可以准确的将你区分为对应的类别。如上图左边所示,不管你这只鸟在图片中如何移动,我的分类网络都想要准确的将你分类为鸟。即我的网络有很好地区分能力。实验表明,深的全卷积网络能够具备这个特性,如ResNet-101等。
检测网络的位置敏感性:简单来讲,对于检测任务而言,我希望我的网络有一个好的检测性能,可以准确的输出目标所在的位置值。随着某个目标的移动,我的网络希望能够和它一起移动,仍然能够准确的检测到它,即我对目标位置的移动很敏感。我需要计算对应的偏差值,我需要计算我的预测和GT的重合率等。但是,深的全卷积网路不具备这样的一个特征。
总之,分类网络的位置不敏感性和检测网络的位置敏感性的一个矛盾问题,而我们的目标检测中不仅要分类也要定位,那么如何解决这个问题呢,R-FCN提出了Position-sensitive score maps来解决这个问题;
 

4 R-FCN的设计动机

Faster R-CNN是首个利用CNN来完成proposals预测的,从此之后很多的目标检测网络都开始使用Faster R-CNN的思想。而Faster R-CNN系列的网络都可以分成2个部分:ROI Pooling之前的共享全卷积网络和ROI Pooling之后的ROI-wise子网络(用来对每个ROI进行特征提出,并进行回归和分类)。第1部分就是直接用普通分类网络的卷积层,用来提取共享特征,然后利用ROI Pooling在最后一层网络形成的feature map上面提取针对各个RoIs的特征向量,然后将所有RoIs的特征向量都交给第2部分来处理(即所谓的分类和回归),而第二部分一般都是一些全连接层,在最后有2个并行的loss函数:softmax和smoothL1,分别用来对每一个RoI进行分类和回归,这样就可以得到每个RoI的真实类别和较为精确的坐标信息啦(x, y, w, h)。

需要注意的是第1部分通常使用的都是像VGG、GoogleNet、ResNet之类的基础分类网络,这些网络的计算都是所有RoIs共享的,在一张图片上面进行测试的时候只需要进行一次前向计算即可。而对于第2部分的RoI-wise subnetwork,它却不是所有RoIs共享的,主要的原因是因为这一部分的作用是“对每个RoI进行分类和回归”,所以不能进行共享计算。那么问题就处在这里,首先第1部分的网络具有“位置不敏感性”,而如果我们将一个分类网络比如ResNet的所有卷积层都放置在第1部分用来提取特征,而第2部分则只剩下全连接层,这样的目标检测网络是位置不敏感的translation-invariance,所以其检测精度会较低,而且这样做也会浪费掉分类网络强大的分类能力(does not match the network's superior classification accuracy)。而ResNet论文中为了解决这个问题,做出了一点让步,即将RoI Pooling层不再放置在ResNet-101网络的最后一层卷积层之后而是放置在了“卷积层之间”,这样RoI Pooling Layer之前和之后都有卷积层,并且RoI Pooling Layer之后的卷积层不是共享计算的,它们是针对每个RoI进行特征提取的,所以这种网络设计,其RoI Pooling层之后就具有了位置敏感性translation-variance,但是这样做会牺牲测试速度,因为所有的RoIs都需要经过若干层卷积计算,这样会导致测试速度很慢。R-FCN就是针对这个问题提出了自己的解决方案,在速度和精度之间进行折中。
 

二  R-FCN架构分析

1.算法步骤

如图所示,我们先来分析一下R-FCN算法的整个运行步骤,使得我们对整个算法有一个宏观的理解,接下来再对不同的细节进行详细的分析。

首先,我们选择一张需要处理的图片,并对这张图片进行相应的预处理操作;
接着,我们将预处理后的图片送入一个预训练好的分类网络中(这里使用了ResNet-101网络的Conv4之前的网络),固定其对应的网络参数;
接着,在预训练网络的最后一个卷积层获得的feature map上存在3个分支,第1个分支就是在该feature map上面进行RPN操作,获得相应的ROI;第2个分支就是在该feature map上获得一个K*K*(C+1)维的位置敏感得分映射(position-sensitive score map),用来进行分类;第3个分支就是在该feature map上获得一个4*K*K维的位置敏感得分映射,用来进行回归;
最后,在K*K*(C+1)维的位置敏感得分映射和4*K*K维的位置敏感得分映射上面分别执行位置敏感的ROI池化操作(Position-Sensitive Rol Pooling,这里使用的是平均池化操作),获得对应的类别和位置信息。
这样,我们就可以在测试图片中获得我们想要的类别信息和位置信息啦。
 

2.Position-Sensitive Score Map

所谓位置区域敏感分数图,R-FCN会在最后一个卷积层后接一个卷积层,这个卷积层输出的结果与共享卷积特征图的宽高一致,即具有相同的感受野,但channels不同,维度为k*k*(c+1)。其中k*k代表将ROI分为几个部位,+1为背景类。也就是说这个特征图为每一个类生成了k*k个score map, 对于每一个类来说,k*k中的每一个score map反映了原图中该类别的的某个部位对应的位置信息,如果该类的这个部位出现在了原图中那么对应的位置在这个score map的响应值就很高。那么只要让生成的ROI中的每个子区域对应到每个类的scores map然后获得响应值就好啦。但是要注意的是,由于一个score map都是只属于某一个类别的某一个部位的,所以ROI的第i个子区域一定要去对应的第i个score map上找,这样就能一一对应啦。如果这个ROI的某个子区域在原图上刚好包含了该部位,那么这个子区域获得的对应的score map响应值就高,最后对所有的k*k进行投票,获得每一个类的分数,那么最高分数的就代表是这个类啦。

3 Position-Sensitive Rol Pooling

 

上面我们说了每一个ROI的第i个子区域去找对应的每个类的第i个score map,但没有详细说这是怎么找到的?这就是位置敏感ROI池化操作啦。

通过RPN提取出来的每个ROI区域,在位置区域敏感图对应不同的位置,执行ROI池化将ROI分成了k*k个bins,经过前面的分析,每个类中的第i个bins去对应的第i个score map上进行池化,且执行的是平均池化,那么这样我们就能获得k*k*(c+1)个值了,就是上图的结果。那么对于每一个类别,该类别的k*k个值都表示该RoI对应部位的响应值,将这k*k个值相加就能得到该ROI在该类别的得分,于是我们得到了c+1个类别的得分,那么在这(C+1)个数上面使用简单的softmax函数就可以得到各个类别的概率了(注意,这里不需要使softmax分类器了,只需要使用简单的softmax函数,因为这里就是通过简单的比大小来判断最终的类别的)。

4 Position-Sensitive Regression

前面介绍了位置区域敏感分数图是怎么来进行分类的,那么自然而然我们可以将其应用至回归中。原文中作者是这样介绍回归的,也就是与分类卷积层并行接一个回归卷积层,这个卷积层输出结果也与共享卷积层有相同的H、W,但是它的维度是4*k*k,k的含义与分类一样,4对应回归的x,y,w,h,然后执行敏感区域ROI池化,一个ROI就能得到4个值作为ROI的x,y,w,h的偏移量了,思路与分类完全一致。

5. 为什么position-sensitive score map能够在含有某个类别的物体的某个部位的区域上具有高响应值?

这种有高响应值现在只是作者自己设想的啊,如果网络不满足这一点的话,那么我们前面的所有分析都不成立啦。现在我们就大致解释一下为什么训练该网络能够让网络最终满足这一点。首先根据网络的loss计算公式,如果一个RoI含有人这个物体,那么该RoI通过position-sensitive score map和Position-sensitive RoI pooling得到的(C+1)个值中属于人的那个值必然会在softmax损失函数的驱动下变得尽量的大,那么如何才能使得属于人的这个值尽量的大呢?那么我们需要想想属于人的这个预测值是怎么来的?经过前面的分析,我们已经知道它是通过Position-sensitive RoI pooling这种池化操作获得的,那么也就是说使得(C+1)个值中属于人的那个值尽量大,必然会使得position-sensitive score map中属于人的那个score map上的RoI对应的位置区域的平均值尽量大,从而会使得该score map上在该区域上的响应值尽量大,因为只有该区域的响应值大了,才能使得预测为人的概率大,才会降低softmax的loss,整个训练过程才能进行下去。

我们同样可以得出以上的结论。如图3所示,我们输入了一张含有一个小孩的图片,图中黄色的BB表示我们的检测到的目标,也就是我们的一个ROI,接下来是9张位置敏感的得分映射图(在这里使用的是3x3的特征映射),这9张图分别表示对人这个目标的top-left、top-center、... bottom-right不同区域敏感的得分映射。对应到图中就是将这个ROI分为9个子区域,每一个子区域其实大致上对应到了小孩的不同部位,而不同的部位一般都会有其独特的特征存在,9个区域敏感得分映射图对不同的区域比较敏感(所谓的敏感就是说如果这个子区域中存在该目标的某个部位特征时,其才会输出较大的响应值,否则的话我会输出较小的响应值)。图3中的9个得分映射对ROI中划分的对应子区域都比较敏感(都有很强的响应值,越白表示响应越大,越黑表示响应越小),即ROI中的9个子区域都有较大的响应值。然后进行位置敏感池化操作,最后进行Vote操作,由于9个区域中基本上都有很高的响应值,最后投票通过,认为这个ROI中的对象是一个person。同理,可以得出图4是一个背景类。(图4的位置敏感ROI池化中有5个区域是黑色的,即表示具有较低的响应值,只有4个区域比较高,即表示具有较高的响应值,根据Vote机制,就将其分类为背景类)。

6. Loss计算及其分析

这个Loss就是两阶段目标检测框架常用的形式。包括一个分类Loss和一个回归Loss。lamdy用来平衡两者的重要性。对于任意一个RoI,我们需要计算它的softmax损失,和当其不属于背景时的回归损失。这很简单,因为每个RoI都被指定属于某一个GT box或者属于背景,即先选择和GT box具有最大重叠率(IOU)的Rol,然后在剩余的Rol中选择与GT box的重叠率值大于0.5Rol进行匹配操作,最后将剩余的Rol都归为背景类。即每个Rol都有了对应的标签,我们就可以根据监督学习常用的方法来训练它啦。


三 R-FCN性能分析

如上表所示,作者测试了不同大小的ROI对性能的影响(我们使用了预训练的ResNet-101网络,在VOC 07数据集上面进行测试),我们可以看到如果使用1x1的ROI,显示输出失败,具体原因不得而知。当使用7x7的ROI时,能够获得最好的结果,这也是论文中最终使用7x7大小的ROI的原因吧,作者应该是做了很多的验证工作。

如上表所示,我们比较了Faster R-CNN和R-FCN的性能,从表中我们可以看出与Faster R-CNN相比,R-FCN有更快的运行速度,大概是2.5倍以上。另外,我们可以发现性能稍微有一点点提升,当调整ROI的个数时,我们发现300个ROI时能够获得最好的性能。

 

四 总结

总的来讲,和Faster R-CNN相比,R-FCN具有更快的运行速度(2.5倍以上),稍微提高了一点检测精度,在速度和准确率之间进行了折中,提出position-sensitive score map来解决检测的位置敏感性问题。算法中的很多细节值得我们进行深入的研究和分析。

 

参考blog:https://blog.csdn.net/WZZ18191171661/article/details/79481135

https://www.jianshu.com/p/9d11f4409a08?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值