在本篇文章中,主要讲解Mask R-CNN的原理以及如何运用它的步骤:
一、参考github代码链接
Mask_RCNN/samples/balloon at master · matterport/Mask_RCNN · GitHub
二、概述
(一)、什么是实例分割?
实例分割从本质上而言,就是像素级上区分识别对象的轮廓。在计算机视觉研究方面,是一个较难解决的难题。我们大脑中可以识别番茄,草莓,土豆,对于图像而言,他们就是千百万个像素的集合。
其主要分为四个关键问题:
(1)、分类:在图片中进行物体分类;
(2)、语义分割:在图片中进行语义分割
(3)、物体检测:主要在图像中考虑重叠的部分
(4)、实例分割:具体到分割每一个物体中包含的像素。
(二)、什么是Mask R-CNN?
最大的特点:Mask R-CNN相比Faster R-CNN的最大区别之处在于Faster R-CNN在进行Rol pooling层时会失去浮点小数,尽量两层的取整之后,同比例放大将失去不少的像素,这将产生一个新的问题;而在Mask R-CNN中,使用RolALign替代了Rol Pooling,巧妙地使用双线性插值的方法,使得RoleAlign在另一个层上带有小数的运算,并在后续增加了Lmask层。
通过下列图片,看一下两者之间的区别:
Rol Pooling会进行量化处理,Rol Align会在Feature map中计算四个采样点,具体看下面的过程
1、原始数据
2、Rol Pooling与Rol Align
3、Rol Pooling与Rol Align得output
4、Rol Pooling输出如上图所示,Rol Align的输出还有以下两步:
支持,已经完成2X2的输出,更加详细的说明请去github上了解~~
(三)、网络架构
根据这种网络架构图可以看出:
两者都是包含两个支线,一个支线完成class、box的输出;另一个支线完成mask的输出;
其中,两者都是经过反卷积操作,rol pooling中输出的mask大小为14x14x80,rol pooling中输出的mask大小为28x28x80。
(四)、Loss Function
每个ROIAlign对应 K * m^2 维度的输出。K对应类别个数,即输出 K个mask,m对应池化分辨率(7*7)。Loss函数定义:Lmask(Cls_k) = Sigmoid (Cls_k),平均二值交叉熵 (average binary cross-entropy)Loss,通过逐像素的Sigmoid计算得到。对应一个属于GT中的第k类的ROI,Lmask仅仅在第k个mask上面有定义(其它的k-1个mask输出对整个Loss没有贡献)。
三、安装使用环境
下一章节讲解!