深度网络解析之-Mask RCNN

Mask RCNN 综合了 Faster RCNN 和 FCN,并且改良了ROI Pooling,提出了ROI Align

Faster RCNN 架构 (图片参考 reference):

Mask RCNN与Faster RCNN的区别:

  • ResNet101 / FPN 替换了原来的 vgg 卷积层;
  • ROI Pooling 替换为 ROI Align;
  • 添加了和bbox reg、classification并列的mask branch

ROI Pooling 流程(ROI Pooling的介绍见Faster RCNN的Fast RCNN部分):

  1. 四舍五入从 ROI proposals 映射到 feature map( [x/16],向下取整);
  2. 将 feature map 划分为7*7的bin,每个bin使用max pooling;

ROI Pooling 存在的问题:

  • 从输入图上的RoI到特征图上的RoI feature,RoI Pooling是直接通过四舍五入取整得到的结果;
  • 将每个RoI对应的RoI feature 转化为固定大小的bin时,又采用了取整操作;
  • 总结:两次取整量化造成的feature map 和 RoI 区域不匹配(mis-alignment)问题;

因此,Mask RCNN中提出了ROI Align改进上述问题(对分割小目标效果提升很大)

ROI映射到feature map后,将候选区域分割为k*k个单元,每个单元固定四个坐标的位置,用双线性插值的方法计算这四个点的位置,然后做max pooling操作;

主要改进:

  • 不再取整操作;
  • 使用双线性插值(在两个方向分别进行一次线性插值)来更精确找到每个块对应的特征;

说明:

  • 双线性差值的采样点(grid points)的确定:如果采样点是1,那就是每个单元(bin)的中心点;如果采样点是4,那就将bin均分为4个方格,取四个方格的中心点为grid points;
  • ROI pooling  和 ROI Align 的BP公式ROI Align详细细节

Mask RCNN架构简图 (ref):

Mask RCNN 详细架构 (ref):

Mask RCNN 的 head architecture:

  • backbone 部分用 ResNet + FPN 替代 vgg,提升了特征表达能力(ResNet),在不同尺度的特征上获得更多信息(FPN );
  • ROI Align 之后有一个“head”部分,是将ROI Align的输出维度扩大,在预测mask时会更加精确;

Mask Branch:

  • 作者没有使用FCN的SoftmaxLoss(多分类),而是利用了 a per-pixel sigmoid 损失函数(二分类),\large L_{mask}定义为平均二值交叉熵损失(average binary cross-entropy loss) 
  • 输出 K*m*m 二值mask预测图(每个类一张,与阈值0.5比较输出二值mask);
  • 在训练时,对于属于第k个类别的RoI,仅有第k个mask对\large L_{mask}有贡献;
  • 这样避免了类间的竞争,对每个类别都会生成掩模,将分类任务交付给classification分支;

Mask RCNN loss:

 \large \large L_{final} = L_{cls}+L_{box}+L_{mask}, 其中 \large L_{box} 和 \large L_{mask} 都是对positive RoI才会起作用;

猜你喜欢

转载自blog.csdn.net/francislucien2017/article/details/86848627