经典网络解读系列(四):mask rcnn

时间:2024-03-31 11:47:21

mask rcnn用于实现实例分割

实例分割是物体检测+语义分割的综合体。相对物体检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割可以标注出图上同一物体的不同个体(羊1,羊2,羊3...)

经典网络解读系列(四):mask rcnn

网络结构:

经典网络解读系列(四):mask rcnn

 其中 黑色部分为原来的 Faster-RCNN,红色部分为在 Faster网络上的修改:

1)将 Roi Pooling 层替换成了 RoiAlign;

2)添加并列的 FCN 层(mask 层);

       先来概述一下 Mask-RCNN 的几个特点(来自于 Paper 的 Abstract):

1)在边框识别的基础上添加分支网络,用于 语义Mask 识别;

2)训练简单,相对于 Faster 仅增加一个小的 Overhead,可以跑到 5FPS;

3)可以方便的扩展到其他任务,比如人的姿态估计 等;

4)不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries;


与faster rcnn相比有几个不同点:

1、提取feature map所用的CNN网络结构

使用ResNet-FPN进行特征提取的Mask R-CNN可以在精度和速度方面获得极大的提升。ResNet101+FPN也是当下特征提取非常棒的方式。

2、 RoiAlign

此前faster rcnn中的Roi Pooling 层是直接将proposals 均匀分成H×W份,然后对每一小窗口做最大池化,最终得到大小相同的proposal feature。举个例子:原本的区域是20*20,要分成7*7的大小。均匀分的时候采用的方法是整除。[20/7]=3   []表示四舍五入取整。这样会导致错位的情况出现。对目标检测可能影响不大,但是对像素级的运算影响很大。 RoiAlign采用的做法是不取整,如:20/7=2.857  然后采用双线性插值确定划分边界的值,最后再进行最大池化。

3、mask

在把统一尺寸的propoals输入后续网络中,除了原本的classification 、box_regression两个分支以外,另外添加了一个mask分支。用于实现对每一个proposal(ROI)端对端的像素级分类。具体来说,我们使用FCN来为每个RoI预测一个m×m的掩码。这里采用的是FCN,一个简单的语义分割网络。可以采用更复杂的语义分割网络,但作者认为这并不是重点。

那么,什么是重点呢?

对于大多数的语义分割网络,采用的方法都是同时对所有类别像素点进行分割。作者采用的是对每一类进行单独预测。每一类单独预测二进制掩码,这样不会有类别竞争,依靠classification的分支预测对应的标签。

4、损失函数

在训练期间,我们将在每个采样后的RoI上的多任务损失函数定义为L=Lcls+Lbox+Lmask。分类损失Lclshe检测框损失Lboxyu和faster rcnn中定义的相同。掩码分支对于每个RoI的输出维度为Km2.......
K
个分辨率为
m×m
的二进制掩码,每个类别一个,K表示类别数量。我们为每个像素应用Sigmoid,并将Lmask定义为平均二进制交叉熵损失。对于真实类别为k的RoI,仅在第k个掩码上计算Lmask(其他掩码输出不计入损失)


训练:与Faster R-CNN中的设置一样,如果RoI与真值框的IoU不小于0.5,则为正样本,否则为负样本。掩码损失函数Lmask仅在RoI的正样本上定义。掩码目标是RoI及其对应的真值框之间的交集的掩码。

我们采用以图像为中心的训练。图像被缩放(较短边)到800像素。批量大小为每个GPU2个图像,每个图像具有N个RoI采样,正负样本比例为1:3。 C4下层网络的N为64,FPN为512。我们使用8个GPU训练(如此有效的批量大小为16)160k次迭代,学习率为0.02,在120k次迭代时学习率除以10。我们使用0.0001的权重衰减和0.9的动量。

RPN锚点跨越5个尺度和3个纵横比。为方便做对比试验,RPN分开训练,不与Mask R-CNN共享特征。本文中的,RPN和Mask R-CNN具有相同的下层网络,因此它们是可共享的。

测试:在测试时,C4下层网络(如2)中的候选数量为300,FPN为1000。我们在这些候选上执行检测框预测分支,然后执行非极大值抑制。然后将掩码分支应用于评分最高100个检测框。尽管这与训练中使用的并行计算不同,但它可以加速推理并提高精度(由于使用更少,更准确的RoI)。掩码分支可以预测每个RoI的KK个掩码,但是我们只使用第kk个掩码,其中kk是分类分支预测的类别。然后将m×mm×m浮点数掩码输出的大小调整为RoI大小,并使用阈值0.5将其二值化。

请注意,由于我们仅在前100个检测框中计算掩码,Mask R-CNN将边缘运行时间添加到其对应的Faster R-CNN版本(例如,相对约20%)。


除了实例分割外,mask rcnn还可以通过简单的修改用于人体姿态估计。详细可见原论文。