Faster RCNN系列:
Faster RCNN系列1——Anchor生成过程
Faster RCNN系列2——RPN的真值与预测值概述
Faster RCNN系列3——RPN的真值详解与损失值计算
Faster RCNN系列4——生成Proposal与RoI
Faster RCNN系列5——RoI Pooling与全连接层
在RPN网络中,已经计算过一次类别真值与类别预测值、偏移量真值与偏移量预测值之间的损失值,但这里的类别预测值只包含两类:前景和背景。
RPN网络输出的Proposal作为生成的区域,继续在后续的RoI Pooling和全连接层中进行分类与回归。
一、RoI Pooling
RoI Pooling的主要作用是将RPN网络生成的Proposal变换到相同的维度,以满足后续全连接层的要求。
RoI Pooling的实现过程如下图所示,假设当前的Rol为图中左侧图像的边框,大小为 332 × 332 332×332 332×332,为了得到这个RoI的特征图,首先需要将该区域映射到全图的特征图上,由于下采样率为16,因此该区域在特征图上的坐标直接除以16并取整,而对应的大小为 332 / 16 = 20.75 332/16=20.75 332/16=20.75。在此, Rol Pooling的做法是直接将浮点数量化为整数,取整为 20 × 20 20×20 20×20,也就得到了该RoI的特征,即图中第3步的边框。
下一步还要将该 20 × 20 20×20 20×20区域处理为 7 × 7 7×7 7×7的特征,然而 20 / 7 ≈ 2.857 20/7≈2.857 20/7≈2.857,再次出现浮点数,RoI Pooling的做法是再次量化取整, 2.857 2.857 2.857取整为 2 2 2,然后以 2 2 2为步长从左上角开始选取出 7 × 7 7×7 7×7的区域,这样每个小方格在特征图上都对应 2 × 2 2×2 2×2的大小,如图中第4步所示。最后,取每个小方格内的最大特征值,作为这个小方格的输出,最终实现了 7 × 7 7×7 7×7的输出,也完成了池化的过程,如图中第5步所示。
二、RoI Align
RoI Pooling的问题在于进行了两次量化取整,有精度误差,对回归物体位置的准确率影响较大。
Mask RCNN提出了RoI Align,使用双线性插值获得浮点数格式的坐标,过程如下图所示,池化后的特征大小仍为 7 × 7 7×7 7×7,但对应到特征图上的大小为 20.75 × 20.75 20.75×20.75 20.75×20.75,不做量化。
接下来,将特征图上的 20.75 × 20.75 20.75×20.75 20.75×20.75大小均匀分成 7 × 7 7×7 7×7方格的大小,中间的点依然保留浮点数。在此选择其中 2 × 2 2×2 2×2方格为例,如下图所示,在每一个小方格内的特定位置选取4个采样点进行特征采样,如图中每个小方格选择了4个小黑点,然后对这4个黑点的值选择最大值,作为这个方格最终的特征。
对于黑点的位置,可以将小方格平均分成
2
×
2
2×2
2×2的4份,然后这4份更小单元的中心点可以作为小黑点的位置。
对于这4个小黑点的值,RoI Align使用了双线性插值的方法。小黑点周围会有特征图上的4个特征点,利用这4个特征点双线性插值出该黑点的值。
三、全连接网络
在经过RoI Pooling层之后,特征被池化到了固定的维度,然后就可以利用全连接网络进行分类和回归预测量的计算。
全连接网络如下图所示,256个Rol经过池化之后得到固定维度为 512 × 7 × 7 512×7×7 512×7×7的特征,在此首先将这三个维度延展为一维,因为全连接网络需要将一个Rol的特征全部连接起来。
接下来利用VGGNet的两个全连接层,得到长度为4096的256个RoI特征。为了输出类别与回归的预测,将上述特征分别接入分类与回归的全连接网络。在此默认为21类物体,因此分类网络输出维度为21,回归网络则输出每一个类别下的4个位置偏移量,因此输出维度为84。
参考文章
《深度学习之Pytorch物体检测实战》