Mask R-CNN

img

在 Faster R-CNN 的基础上将 RoI Pooling 换成了 RoI align并且添加了 LmaskL_{mask}也是一个 FCNapplied to each RoI

从 object detection 扩展到了 segmentation

Mask R-CNN·

首先回顾一下 Faster R-CNN它包含两个阶段第一阶段是 RPNto propose candidate object bounding boxes

第二阶段是 Fast R-CNN通过 RoIPooling 提取相同大小的特征做 classification 和 bounding-box regression


Mask R-CNN 的第一阶段是一样的第二阶段加了一个 binary mask for each RoI

L=Lcls+Lbox+LmaskL = L_{cls} + L_{box} + L_{mask}

前两个 loss 跟之前一样

mask 的输出大小是 Km2Km^2KK 是分类的数量mm 是 resolutionLmaskL_{mask} 是首先做一个 per-pixel sigmoid 然后 loss 是 average binary cross-entropy loss对于 ground-truth 分类是 kk 的 RoI只关心 kk 这一类的预测的 mask


mask 的 predicion 用的是全卷积网络不用什么 fc 层不会使空间信息受损

这要求 RoI features to faithfully preserve the explicit per-pixel spatial correspondence因此提出 RoI Align

RoI Align·

RoI Pooling 用到了太多的 quantization首先将所有的浮点数取整然后根据输出大小分块每一块做 max pool分块的时候显然也得用取整来确定大小这对于分割影响很大有的 feature 点对应一个像素有的对应两个这就无法准确地还原对应位置

These quantizations introduce misalignments between the RoI and the extracted features.

image-20220624092014429

就很暴力地不用任何取整

用双线性插值它充分的利用了原图中虚拟点比如20.56这个浮点数像素位置都是整数值没有浮点值四周的四个真实存在的像素值来共同决定目标图中的一个像素值即可以将20.56这个虚拟的位置点对应的像素值估计出来

如下图所示蓝色的虚线框表示卷积后获得的feature map黑色实线框表示ROI feature最后需要输出的大小是2x2那么我们就利用双线性插值来估计这些蓝点虚拟坐标点又称双线性插值的网格点处所对应的像素值最后得到相应的输出这些蓝点是2x2Cell中的随机采样的普通点作者指出这些采样点的个数和位置不会对性能产生很大的影响你也可以用其它的方法获得然后在每一个橘红色的区域里面进行max pooling或者average pooling操作获得最终2x2的输出结果我们的整个过程中没有用到量化操作没有引入误差即原图中的像素和feature map中的像素是完全对齐的没有偏差这不仅会提高检测的精度同时也会有利于实例分割

img