美文网首页
Mask R-CNN

Mask R-CNN

作者: 小松qxs | 来源:发表于2018-11-22 14:53 被阅读0次
titile Mask R-CNN
url https://arxiv.org/pdf/1703.06870.pdf
动机 目标检测和语义分割迅速发展,主要因为有Faster R-CNN和FCN这样的基础系统,所以开发一个简单、灵活、快速的实例分割模型。
FCN每像素多类分类,分割和分类同时进行,分割效果不佳,DeepMask先分割再识别,速度慢、准确率低。全卷积实例分割(FCIS)一组通道同时得到结果,重叠实例出现系统错误,产生虚假边缘。本文解耦mask and class prediction,mask分支只预测binary mask
内容 在Faster R-CNN基础上加入segmentation masks预测分支(基于ROI,FCN网络,binary mask);
提出RoIAlign层,得到精确地空间位置,mask accuracy提高到10%至50%;
容易扩展到更复杂任务,框架灵活(人体姿势估计任务)。

多任务损失函数: L = Lcls + Lbox + Lmask
前两个与Faster R-CNN相同,Mask分支每个RoI的输出维度为Km2 ,表示K个分辨率为m × m的binary masks。每个类别一个分辨率为m × m的binary masks,K表示classes。每个像素采用sigmoid,并定义Lmask为平均二进制交叉熵损失。ground-truth为k的RoI,仅在第k个mask上计算Lmask(其他掩模输出不计入损失)。
优势:FCNs像素级softmax和multinomial交叉熵损失,masks跨类别竞争。Mask R-CNN,classification分支得到类别,像素级的sigmod和binary损失,不会垮类别竞争。这是改善实例分割结果的关键。
Mask Representation:mask编码输入物体空间布局,卷积保留空间维度,比fc参数少。

RoIAlign: 问题:RoIPool粗糙量化。一、图像坐标 — feature map坐标:对在连续坐标系上的x计算[x/16],其中16是特征图步幅,[.]表示四舍五入。二、feature map坐标 — ROI feature坐标:当对RoI分块时(例如7×7)也执行同样的计算。对预测像素级精确的掩模有很大的负面影响。
解决方案:选取每个RoI分块中(根据RoI尺寸分块)的四个常规位置,使用双线性插值计算每个位置的精确值,最大或平均池化得到结果。(选择四个常规位置,以便可以使用最大或平均池化。其实只在每个分块中心取一个值(没有池化)或多个值几乎同样有效。)
Network Architecture:Mask分支可以更复杂,提高效果,但不是这篇论文的目的。
训练:与Fast R-CNN相同,RoI与真值框的IoU不小于0.5,为正样本,否则为负样本。Mask损失函数Lmask仅在RoI的正样本上定义。Mask目标是RoI与相关的真值Mask之间的交集。
采用image-centric的训练,图像短边缩放到800像素。mini-batch每个GPU2个图像,每个图像有N个RoI,正负比例为1:3。C4网络N为64,FPN为512。使用8个GPU训练(有效mini-batch为16)160k次迭代,学习率为0.02,在120k次迭代时学习率除10。使用0.0001的权重衰减和0.9的动量。
RPN,5 scales and 3 aspect ratios(backbone为ResNet-101+FPN时,由5个尺度层,每个cell3个anchor,而不是每个cell5*3),为方便对照,RPN分开训练,不与Mask R-CNN共享特征。论文中,RPN和Mask R-CNN具有相同的主网络,是共享的。

Mask分支:输入为rpn_rois之后的box数(和分类、回归框分支相同2000),ROI得到14*14的feature map,再upsample到28*28,mask与gt_mask计算loss时,是计算预测box之中mask的真值,而不是gt_box中mask真值。

使用FPN时,RPN环节有P2-P6层用来训练(5个scale),在ROIAlign时只用P2-P5(4个),proposal坐标根据公式选择P2-P5层其中一层进行ROIAlign,框越小,level 越小,(目标小,level低的层保留信息较完善,所以crop level低的层)。 ROI的w×h=224*224时,k = 4,层数限制在2-5。见下面函数map_rois_to_fpn_levels

测试:在测试时,C4网络proposal为300,FPN为1000。proposal边框预测,然后NMS,再将100个最高分的detection boxes用于Mask分支。
测试与训练不同,非并行计算,但扔加速测试并提高精度(RoIs更少更精确)。
Mask分支每个RoI得K个Mask,但只使用第k个Mask,k是classification预测类别。然后将m×m浮点数Mask resize为RoI大小,并使用阀值0.5将其二值化。

Mask分支:输入为回归框分支(输入1000个)筛选后的框(16个),这几个框经过二次ROIAlign得到14*14的feature map,再upsample到28*2。
实验 主要结果: 对照实验:
Multinomial vs. Independent Masks:解耦的好处
RoIWarp采用双线性采样,仍量化RoI,与输入没有对齐。证明对齐的关键 Bounding Box检测结果:
Mask R-CNN高于Faster R-CNN:多任务训练的结果。
Mask R-CNN的Mask(Table1)和Bounding Box AP差距小,largely closes the gap between object detection and the more challenging instance segmentation task 时间:
测试:训练ResNet-101-FPN模型,RPN和Mask R-CNN共享特征,遵循Faster R-CNN四级训练。该模型在Nvidia Tesla M40 GPU上处理每个图像需要195ms(加上15ms的CPU时间,用于将输出的大小resize原始分辨率)。ResNet-101-C4 400ms,模型比较复杂。
优化速度:改变图像尺寸和proposal数量,。
训练:COCO trainval 35k上ResNet-50-FPN训练,8GPU实现(0.72s per 16-image mini-batch)需要32个小时,ResNet-101-FPN需要44个小时。

Mask R-CNN人体姿势估计:
K类KeyPonits,m*m的one-hot代表一个KeyPoint
a relatively high resolution output (compared to masks) is required for keypoint-level localization accuracy Experiments on Cityscapes: Enhanced Results on COCO:
non-local:提取某处特征时利用其周围点的信息,可以是时间维度,也可以是空间维度,为了获取全局信息(卷积是local information)。论文链接
data distillation: (1) 用手动标注的数据训练模型A,(2) 用模型A去训练数据增广的未标注数据,(3) 将未标注数据的预测结果通过ensembling多个预测结果,转化为labels。(4) 在手动标注和自动标注的数据集重新训练模型论文链接
思考 5 fps 仍未实时 demo 图片大小900×600,时间0.2s左右,backbone:resnet101,514.3M 参考1参考2
def map_rois_to_fpn_levels(rois, k_min, k_max):  # k_min=2, k_max=5
    """Determine which FPN level each RoI in a set of RoIs should map to based
    on the heuristic in the FPN paper.
    """
    # Compute level ids
    s = np.sqrt(box_utils.boxes_area(rois))
    s0 = cfg.FPN.ROI_CANONICAL_SCALE  # default: 224
    lvl0 = cfg.FPN.ROI_CANONICAL_LEVEL  # default: 4

    # Eqn.(1) in FPN paper
    target_lvls = np.floor(lvl0 + np.log2(s / s0 + 1e-6))
    target_lvls = np.clip(target_lvls, k_min, k_max)
    return target_lvls

相关文章

网友评论

      本文标题:Mask R-CNN

      本文链接:https://www.haomeiwen.com/subject/cqvcqqtx.html