深度网络解析之-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部分):
- 四舍五入从 ROI proposals 映射到 feature map( [x/16],向下取整);
- 将 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 损失函数(二分类),
定义为平均二值交叉熵损失(average binary cross-entropy loss) ;
- 输出 K*m*m 的二值mask预测图(每个类一张,与阈值0.5比较输出二值mask);
- 在训练时,对于属于第k个类别的RoI,仅有第k个mask对
有贡献;
- 这样避免了类间的竞争,对每个类别都会生成掩模,将分类任务交付给classification分支;
Mask RCNN loss:
, 其中
和
都是对positive RoI才会起作用;