↵
R-FCN: Region-based Fully Convolutional Networks
一,主要贡献
1,使用position-sensitive score maps解决目标检测中的位置敏感性问题;
2,提出基于区域的、全卷积、全部共享计算的网络。
二,网络结构和faster r-cnn类似,如下图:
最后一个卷积层会有3个分支:RPN和两个位置敏感得分图,位置敏感得分图的channels分别为(C+1)*k*k和4*k*k,后面接位置敏感的RoIpooling层,用于分类和回归。分类和回归原理相同,下面只讲分类,细节如下:
1,基础网络
使用ResNet101,去掉最后一个global average pooling层和fc层,并在最后一个卷积模块(2048维)后使用1*1卷积降维(生成1024维feature map)。
2,Position-sensitive score maps 和 Position-sensitive RoI pooling(核心部分)
首先把RoI划分为k*k个bins(除不尽则左上边缘向下取证,右下向上取整,总之,bins尽量大),并使得每个bin对应一个score map,因此每个类别生成k*k个score maps,所有类别一共有(C+1)*k*k个score maps。如上图,对于每一类,仅在第{i,j}个score map的第{i,j}个bin上执行平均池化,同一类别的9个bins放在同一层,故最后会生成(C+1)维score map。
然后进行投票,对于每个RoI,在每一维的score map上求平均值rc,得到(C+1)维向量。然后计算softmax置信度:
这个值既在训练时作为损失值,也在预测时对RoI排序用。
同理,边框回归中把C+1换成4即可,预测方法和Fast R-CNN相同。
3,训练
(1)损失函数
对于R-FCN网络(假设有计算好的region proposals),损失函数:
其中,c*是RoI的真实标签(0为背景),分类损失是简单的cross-entropy loss(-log(s)),回归损失和Fast R-CNN相同。
论文中λ为1。并将RoI和真实框IoU大于0.5记为正样本,其他为负样本。
(2)online hard example mining(OHEM)
首先对RPN获得的ROI(正负样本分别排序)进行排序操作;然后在正样本中选择前N个ROI,将正负样本的比例维持在1:3的范围内。如果不进行此操作的话,可能会出现抽取的所有样本都是背景,会影响网络的性能。
(3)训练参数
weight decay设为0.0005,momentum设为0.9,默认单尺度(把较短边resize到600像素)。每张图片选取128个RoI用于训练。用ImageNet与训练好的分类网络,然后使用VOC数据集fine-tune,前20k个mini-batch学习率设为0.001,接下来10k个设为0.0001。采用faster r-cnn中的4阶段法训练R-FCN和RPN。
4,步长和膨胀卷积
首先,把ResNet101中原stride32改为16,可以增大score map的分辨率。然后,保持conv4及之前层不变,把第一个conv5模块的stride由2改为1,然后所有conv5模块使用膨胀卷积以抵消stride的缩小。另,RPN从conv4接入,这样RPN不会受膨胀卷积的影响。
5,过滤背景Rol,
测试时,为了减少RoIs数量,在RPN提取阶段就对大约2W个proposals进行过滤,方法如下:
(1)去除超过图像边界的proposals;
(2)使用基于类别概率且阈值IoU=0.7的NMS过滤;
(3)按照类别概率选择top-N个proposals;
最后一般只剩下300左右个RoIs,当然这个数量是一个超参数。并且在R-FCN的输出300个预测框之后,仍然要对其使用NMS去除冗余的预测框。