Mask R-CNN图像识别和分割实现步骤(一)

在本篇文章中,主要讲解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层。

  通过下列图片,看一下两者之间的区别:

Mask R-CNN图像识别和分割实现步骤(一)_第1张图片

Rol Pooling会进行量化处理,Rol Align会在Feature map中计算四个采样点,具体看下面的过程

1、原始数据

Mask R-CNN图像识别和分割实现步骤(一)_第2张图片

2、Rol Pooling与Rol Align

Mask R-CNN图像识别和分割实现步骤(一)_第3张图片

 3、Rol Pooling与Rol Align得output

Mask R-CNN图像识别和分割实现步骤(一)_第4张图片

 4、Rol Pooling输出如上图所示,Rol Align的输出还有以下两步:

Mask R-CNN图像识别和分割实现步骤(一)_第5张图片

 Mask R-CNN图像识别和分割实现步骤(一)_第6张图片

 支持,已经完成2X2的输出,更加详细的说明请去github上了解~~

(三)、网络架构

Mask R-CNN图像识别和分割实现步骤(一)_第7张图片

 根据这种网络架构图可以看出:

两者都是包含两个支线,一个支线完成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没有贡献)。

 三、安装使用环境

下一章节讲解!

 

你可能感兴趣的:(r语言,cnn,开发语言)