相关文章推荐

1 总结架构与主要思想

Mask-RCNN 大体框架还是 Faster-RCNN 的框架,可以说在基础特征网络之后又加入了全连接的分割子网,由原来的两个任务(分类+回归)变为了三个任务(分类+回归+分割)。Mask R-CNN 是一个两阶段的框架,第一个阶段扫描图像并生成提议(proposals,即有可能包含一个目标的区域),第二阶段分类提议并生成边界框和掩码。

其中黑色部分为原来的 Faster-RCNN,红色部分为在 Faster网络上的修改,总体流程如下:

1)输入图像;
2)将整张图片输入CNN,进行特征提取;
3)用FPN生成建议窗口(proposals),每张图片生成N个建议窗口;
4)把建议窗口映射到CNN的最后一层卷积feature map上;
5)通过RoI Align层使每个RoI生成固定尺寸的feature map;

6)最后利用全连接分类,边框,mask进行回归。

另一系统图:

首先对图片做检测,找出图像中的ROI,对每一个ROI使用ROIAlign进行像素校正,然后对每一个ROI使用设计的FCN框架进行预测不同的实例所属分类,最终得到图像实例分割结果。

与faster RCNN的区别:
1)使用ResNet101网络
2)将 Roi Pooling 层替换成了 RoiAlign;
3)添加并列的 Mask 层;

4)由RPN网络转变成FPN网络

主要改进点:

1. 基础网络的增强,ResNeXt-101+FPN的组合可以说是现在特征学习的王牌了;

2. 分割 loss 的改进,由原来的 FCIS 的 基于单像素softmax的多项式交叉熵变为了基于单像素sigmod二值交叉熵。softmax会产生FCIS的 ROI inside map与ROI outside map的竞争。但文章作者确实写到了类间的竞争, 二值交叉熵会使得每一类的 mask 不相互竞争,而不是和其他类别的 mask 比较 ;

3.  ROIAlign解决Misalignment 的问题,说白了就是对 feature map 的插值。直接的ROIPooling的那种量化操作会使得得到的mask与实际物体位置有一个微小偏移,个人感觉这个没什么 insight,就是工程上更好的实现方式。

说明:这么好的效果是由多个阶段的优化实现的,大头的提升还是由数据和基础网络的提升:多任务训练带来的好处其实可以看作是更多的数据带来的好处;FPN 的特征金字塔,ResNeXt更强大的特征表达能力都是基础网络。

残差网络ResNet参见: 残差网络resnet详解

RPN网络参见: 目标检测--FPN解析

Mask-RCNN 的几个特点(来自于 Paper 的 Abstract):

1)在边框识别的基础上添加分支网络,用于语义Mask 识别;
2)训练简单,相对于 Faster 仅增加一个小的 Overhead,可以跑到 5FPS;
3)可以方便的扩展到其他任务,比如人的姿态估计等;
4)不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries,包括 COCO 2016 的Winners。

2 ROI Align

ROI Align 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。实验显示,在检测测任务中将 ROI Pooling 替换为 ROI Align 可以提升检测模型的准确性。

2.1 ROI Pooling

在faster rcnn中,anchors经过proposal layer升级为proposal,需要经过ROI Pooling进行size的归一化后才能进入全连接网络,也就是说ROI Pooling的主要作用是将proposal调整到统一大小。步骤如下:

  • 将proposal映射到feature map对应位置
  • 将映射后的区域划分为相同大小的sections
  • 对每个sections进行max pooling/avg pooling操作
  • 举例说明:

    考虑一个8*8大小的feature map,经过一个ROI Pooling,以及输出大小为2*2.
    这里写图片描述

    1)输入的固定大小的feature map (图一)
    2)region proposal 投影之后位置(左上角,右下角坐标):(0,4)?,(4,4)(图二)
    3)将其划分为(2*2)个sections(因为输出大小为2*2),我们可以得到(图三) ,不整除时错位对齐( Fast RCNN

    4)对每个section做max pooling,可以得到(图四)

    前言: Mask R-CNN是一个非常灵活的框架,它来源于faster- RCNN 和全卷积网络FCN,但是又提出了很多的改进措施, Mask - RCNN 非常灵活,我们可以可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、语义分割、 实例分割 、人体姿势识别等多种任务,与其说 Mask - RCNN 是一个 实例分割 算法,倒不如说 Mask - RCNN 是一个灵活的框架。 一、 Mask - RCNN 概览
    注意:本课程已从 mask rcnn -benchmark更新到了Detectron2 Mask R-CNN是一种基于深度学习的图像 实例分割 方法,可对物体进行目标检测和像素级分割。本课程将手把手地教大家使用Labelme图像标注工具制作自己的数据集,并使用PyTorch版本的 Mask R-CNN(Facebook 官方Detectron2/ mask rcnn -benchmark)训练自己的数据集,从而能开展自己的图像分割应用。本课程的具体项目实战案例是:对汽车行驶场景中的路坑、车、车道线等多类物体进行检测和分割 。本课程在Ubuntu系统上进行项目全过程的演示。本课程提供项目标注的数据集和相关Python程序文件。相关课程: Mask R-CNN图像 实例分割 实战:训练自己的数据集 (Keras版本 )https://edu.csdn.net/course/detail/25128
    扩展而来的。 目前实现的转换包括 ColorJitter、RandomErasing、Expand、Scale、Resize、Crop、ElasticTransform、Rotate、Shift Flip。 如果你需要更多的图像增强类型,你可以看看 ,它是一个非常全面的库。 图像变换可以分为两类: 几何变换改变图像的几何形状,目的是使算法在位置/方向的变化和图像变形中保持不变。 光度变换修改颜色通道,目的是使算法对光照和颜色的变化保持不变。 对于图像分类以外的计算机视觉问题,仅变换图像通常是不够的。 比如说,对于物体检测,我们应该同时变换图像和边界框,对于图像分割,我们还应该变换分割掩码(掩码不应与图像相同,因为对于图像几何变换,我们经常使用插值进行变换图像在视觉上很满意,但掩码的插值毫无意义)。 本项目集中解决这些问题。 RandomState transform Compose 本文提出了一个概念上简单且灵活通用的目标分割框架—— Mask R-CNN Mask R-CNN能有效地检测图像中的目标,同时能为每个实例生成高质量的分割掩码 Mask R-CNN训练简单,相对于Faster R-CNN,只需增加一个较小的开销,运行速度可达5 FPS,且很容易推广到其他任务中 二、模型与方法 2.1 设计思路 由于Fast/Faster R-CNN和FCN的出现,使得目标检测和语义分割的效果在短时间得到了很大改善 目标分割它需要正确检测图像中的所有目标,同时也要精确地分割每个目标 目标检测的目的是对目标进行分类,并使用边界框定位每个目标,既是语义分割,又是另一种形式的
    Mask R-CNN的模型结构 Mask R-CNN是在Faster R-CNN的基础上添加了一个预测分割 mask 的分支,如上图所示。其中黑色部分为原来的Faster- RCNN ,红色部分为在Faster- RCNN 网络上的修改。将 RoI Pooling层替换成了 RoI Align 层;添加了并列的FCN层( mask 层)。 此外, Mask R-CNN还引入FPN(图像金字塔结构)。 Mask RCNN 沿用了Faster RCNN (https://blog.csdn.net/YOULANSHENGMENG/article/details/121850364)的思想,特征提取采用ResNet-FPN的架构,另外多加了一个 Mask (用于生成物体的掩模)预测分割分支。如下图1所示。其中黑色部分为原来的Faster- RCNN ,红色部分为在Faster- RCNN 网络上的修改。将 RoI Pooling 层替换成了 RoI Align 层;添加了并列的FCN层( mask 层)。
    DCT- Mask 是一种将掩码编码成DCT向量表示的方法。在使用DCT- Mask 时,首先将原始掩码转换为大小为[ mask _size, mask _size]的矩阵。然后,通过对该矩阵进行二维DCT编码,将掩码转换为DCT系数矩阵。最后,通过选择DCT系数矩阵中的一些特定系数,将掩码编码成DCT向量表示。 Mask RCNN 是一种基于Faster RCNN 的目标检测算法,它不仅可以检测物体的边界框,还可以对每个边界框内的物体进行分割。在 Mask RCNN 中,通过添加额外的分割分支,可以生成物体的掩码。这些掩码可以用来对物体进行精确的像素级分割。
     
    推荐文章