目标检测经典网络之Mask R-CNN

Mask R-CNN

Mask R-CNN是He Kaiming大神于2017年的力作,其在进行目标检测的同时进行实例分割,取得了出色的效果,其在没有任何trick的情况下,取得了2016年COCO比赛的冠军,其网络设计也比较简单,在Faster R-CNN的网络结构基础上,在原本的两个分支上(分类+回归)增加了一个分支进行图像分割,如下图所示:

摘要

  • Mask R-CNN可以看作是一个通用实例分割架构;
  • Mask R-CNN以Faster R-CNN为原型,增加了一个mask分支做分割任务;
  • Mask R-CNN比Faster R-CNN速度慢一些,达到了5fps;
  • Mask R-CNN可用于人体姿态估计等其他任务。

Mask R-CNN详细介绍

在介绍Mask R-CNN之前,首先了解一下什么是分割?

  • 语义分割(semantic segmentation):对图像中逐像素进行分类;
  • 实例分割(instance segmentation):对图像中的object进行目标检测,并对检测到的object进行分割;
  • 全景分割(panopticon segmentation):对图像中的所有物体进行描述。

下面这张图很好的表示了这几种分割的区别,如下图可见,全景分割难度最大:

在这里插入图片描述

Mask R-CNN属于实例分割,首先实例分割的难点在于:需要同时检测出目标的位置并且对目标进行分割,所以这就需要结合目标检测(bounding box位置)以及语义分割(对像素进行分类,分割出目标)方法。因此,何凯明大神结合目标检测领域表现较好的Faster R-CNN和语义分割领域表现较好的FCN,并取得了很好的效果。

那么Mask R-CNN是怎么做的呢?

Mask R-CNN是建立在Faster R-CNN基础上的,那么我们首先回顾一下Faster R-CNN,Faster R-CNN是典型的two stage的目标检测方法,首先生成 RPN候选区域, 然后候选区域经过Roi Pooling进行目标检测(包括目标分类以及坐标回归),分类与回归共享前面的网络。
Mask R-CNN做了哪些改进?Mask R-CNN同样是two-stage的,生成RPN部分与Faster R-CNN相同,然后,Mask R-CNN在Faster R-CNN的基础上,增加了第三个支路,输出每个ROI的Mask(这里是区别于传统方法的最大的不同,传统方法一般是先利用算法生成mask然后再进行分类,这里平行进行),还有一个改进是将Faster R-CNN的ROI pooling改为ROI Align,使得像素更精确一些。

多任务损失函数: 
前两个loss与Faster R-CNN相同,Mask分支每个RoI的输出维度为K*m*m ,表示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损失,不会垮类别竞争。这是改善实例分割结果的关键。

另一个创新点:ROI Align

另外由于分割需要较准确的像素位置,而Faster R-CNN方法中,在进行Roi-Pooling之前需要进行两次量化操作(第一次是原图像中的目标到conv5之前的缩放,比如缩放32倍,目标大小是600,结果不是整数,需要进行量化舍弃,第二次量化是比如特征图目标是5*5,ROI-pooling后是2*2,这里由于5不是2的倍数,需要再一次进行量化,这样对于Roi Pooling之后的结果就与原来的图像位置相差比较大了),因此作者对ROI-Pooling进行了改进,提出了RoI Align方法,在下采样的时候,对像素进行对准,使得像素更准确一些。

关于ROI Align具体是如何做的请看这篇博客《目标检测之TROI pooling及其改进》
 

你可能感兴趣的:(目标检测,目标检测,MaskR-CNN,计算机视觉)