RFCN by hs

一、简介

1、在Faster rcnn之后比较有代表性的检测网络就是R-FCN了,通过学习之前经典的检测网络来熟悉检测模型的大体发展过程和创新思路,该网络主要的贡献在于提升了检测网络的训练效率。

2、论文的主体思路在于神经网络的卷积层是具有平移不变性的,对分类任务较为友好,而且所有的卷积层是共享计算的,计算耗时较少。ROI pooling层会破坏网络的平移不变性,生成一系列的proposals从而增加网络的平移可变性,对检测任务更加友好,且pooling层后面的网络都是针对各个proposal进行计算的,计算时间会大大增加。作者为了提高效率,将检测部分网络的深度压缩到了0,这样训练时的计算基本上是共享的,从而训练速度大大加快,然后提出了position sensitive score map这个概念来增加位置信息,使检测效果几乎没有损失。

二、参考文献

1、2016NIPS:  R-FCN: Object Detection via Region-based Fully Convolutional Networks

2、论文: https://arxiv.org/abs/1605.06409

三、RFCN

1、平移不变性和平移可变性

首先解释一下平移不变性,就是指一张图片中的检测目标就算发生了平移运动,但是最后在分类任务中得到的结果还是一致的,而卷积网络就具有的这样的特性,经过卷积网络不会影响对物体的分类任务。而ROI pooling层就不同,经过pooling层之后,由于会生成很多大小不同的proposals,相当于对原图像进行了裁剪,这样就会对分类任务产生影响,我们就称它具有平移可变性。同时,检测回归任务就需要网络具有平移可变性,否则最后得到的检测框会非常的不准确。

2、region-based

对于region-based的检测方法,以Faster R-CNN为例,实际上是分成了几个subnetwork,第一个用来在整张图上做比较耗时的conv,这些操作与region无关,是计算共享的。第二个subnetwork是用来产生候选的boundingbox(如RPN),第三个subnetwork用来分类或进一步对box进行regression(如Fast RCNN),这个subnetwork和region是有关系的,必须每个region单独跑网络,衔接在这个subnetwork和前两个subnetwork中间的就是ROI pooling。我们希望的是,耗时的卷积都尽量移到前面共享的subnetwork上,这样通过计算共享可以大大提高效率。

3、pooling层位置的选择

举个例子,将ROI pooling层放在网络中段,这时候特征图还很大,proposal的偏移会有较大的影响,会对检测结果产生较大的影响,从而能得到更好的检测结果,同时由于pooling层之后的网络计算都不共享,训练效率很低。但如果将pooling层放在网络的尾部,使所有网络计算共享,这样可以使训练速度加快,但是由于网络后部特征图很小,对位置的变化已经不够敏感,带来的就是检测结果的不准确。

4、RFCN的解决办法

通过对以上的分析,论文提出了解决办法。将pooling层移动到网络的尾端的同时增加一个position sensitive score map层,给检测任务增加了位置信息,从而在获得训练效率的同时不降低检测准确性。

四、网络结构

在resnet101加上一个rpn,不过resnet的最后的一层全连接层改为了全卷积层,输出为w*h*1024,这样就是一个全卷积网络。

分类:用k*k*(c+1)个1024*1*1的卷积核去得到k*k*(c+1)个position sensitive score map,大小为w*h。其中k为划分区域的个数,c为分类的种类。再根据ROI pooling将输入的score map得到c+1个k*k大小的特征图,其中k*k大小的块是分别从k*k张score map中得到的。最后将k*k个bin的值相加并进行softmax来得到分类的分数。

边界回归:将分类中的c+1改为了4,最后输出的是将c+1个得分变为了回归边界的四个坐标,思路和分类的结构一样。

五、总结

1、共享计算对于卷积网络训练速度的提升。

2、回归任务与分类任务分别对平移不变性和平移可变性有要求。

原文地址:https://www.cnblogs.com/bupt213/p/11379892.html