2020-10-18

1.Mask-RCNN的ROI-Pooling的缺点
在常见的两级检测框架(比如Fast-RCNN,Faster-RCNN,RFCN)中,ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和包围框回归操作。由于预选框的位置通常是由模型回归得到的,一般来讲是浮点数,而池化后的特征图要求尺寸固定。故ROI Pooling这一操作存在两次量化的过程。

下图是第一次量化出现的误差
2020-10-18
下图是第二次量化后出现的误差

2020-10-18
2020-10-18
所以改进就是下图(ROIAlign)
2020-10-18
ROIPooling的反向传播
max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示 :
2020-10-18
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下 :
2020-10-18
ROIAlign的反向传播
2020-10-18
正向传播:ROI划分成k*k个大bin,每个大bin再划分成4个小bin。每个小bin中间的像素值采用周围4个像素点双线性插值而成。在每一个大bin取最大的小bin的中间值来做pooling。
反向传播:记录池化后某一个像素值是由哪一个小bin决定的,然后直接把梯度之间传递给这个小bin。然后小bin又把梯度按照比例传递给周围的4个真正的像素。