【第三十周】文献阅读:Mask R-CNN

摘要

本周阅读了Mask R-CNN的论文。Mask R-CNN 是一种扩展了 Faster R-CNN 的强大框架,专门用于实例分割任务。它首先通过 RPN 生成大量候选区域(Region Proposals),然后利用 FPN 提取多尺度特征图,增强对不同尺寸目标的检测能力。为了确保空间对齐的准确性,Mask R-CNN 引入了 RoIAlign 层,替代了传统的 RoIPool 层,使用双线性插值避免量化误差,更精确地映射每个感兴趣区域(RoI)到固定的输出尺寸。对于每个 RoI,模型不仅进行分类和边界框回归以提高检测精度,还新增了一个专门的分支——小型全卷积网络(FCN),来预测像素级的分割掩码,实现精确的实例分割。这种多任务学习架构共享卷积特征,提高了效率和性能,同时保持了模型的简洁性和灵活性。通过这些创新,Mask R-CNN 实现了高精度的实例分割,成为该领域的标杆方法,显著提升了检测和分割任务的准确性和高效性。

Abstract

This week, I read the Mask R-CNN paper. Mask R-CNN is a powerful framework that extends Faster R-CNN, specifically designed for instance segmentation tasks. It begins by generating a large number of candidate regions (Region Proposals) through the Region Proposal Network (RPN). Then, it leverages the Feature Pyramid Network (FPN) to extract multi-scale feature maps, enhancing the detection capability for objects of varying sizes. To ensure accurate spatial alignment, Mask R-CNN introduces the RoIAlign layer, which replaces the traditional RoIPool layer. Using bilinear interpolation, RoIAlign avoids quantization errors and provides more precise mapping of each region of interest (RoI) to a fixed output size. For each RoI, the model not only performs classification and bounding box regression to improve detection accuracy but also adds a dedicated branch—a small Fully Convolutional Network (FCN)—to predict pixel-level segmentation masks, achieving precise instance segmentation. This multi-task learning architecture shares convolutional features, improving efficiency and performance while maintaining the simplicity and flexibility of the model. Through these innovations, Mask R-CNN achieves high-precision instance segmentation, becoming a benchmark method in the field, significantly enhancing the accuracy and efficiency of detection and segmentation tasks.


Mask R-CNN

Title: Mask R-CNN
Author: He, KM (He, Kaiming) ; Gkioxari, G (Gkioxari, Georgia) ; Dollár, P (Dollar, Piotr) ; Girshick, R (Girshick, Ross)
Source: IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE
WOS:https://webofscience.clarivate.cn/wos/alldb/full-record/WOS:000508386100011


研究背景

在过去的几年里,图像识别技术取得了巨大的进步,特别是在物体检测(找出图片中有哪些物体)和语义分割(给图片中的每个像素分类)方面。这些进步很大程度上得益于一些强大的基础系统,比如用于物体检测的 Fast/Faster RCNN 和用于语义分割的完全卷积网络(FCN)。这些方法不仅概念简单易懂,而且非常灵活、可靠,同时还能快速训练和处理数据。

论文作者的目标是开发一个类似的基础系统来进行实例分割。实例分割是一项更具挑战性的任务,因为它不仅要正确地找到图片中的所有物体,还要精确地将每个物体从背景和其他物体中区分开来。这结合了两个经典的计算机视觉任务:一是目标检测,即对单个物体进行分类并用边界框定位;二是语义分割,即将每个像素分类到不同的类别中,但不区分具体的物体实例。

乍一看,你可能会觉得要实现这么复杂的任务需要一种非常复杂的方法。然而,论文作者发现了一种既简单又高效的方法,它甚至超越了之前最先进的实例分割技术。他们把这个方法叫做 Mask R-CNN。Mask R-CNN 是基于 Faster R-CNN 发展而来的,在原有基础上增加了一个新的分支,用来预测每个感兴趣区域(RoI)的分割掩码(mask),这个分支与原来的分类和边界框回归分支一起工作。

新添加的掩码分支是一个小型的完全卷积网络(FCN),它逐像素地预测分割结果。由于 Mask R-CNN 基于 Faster R-CNN 框架,所以它的实现和训练都相对简单,而且可以很容易地适应各种架构设计。此外,新增加的掩码分支带来的计算成本很小,因此整个系统仍然保持了快速运行的能力。

为了更好地处理输入图像和输出结果之间的精确对应关系,作者还引入了一个叫 RoIAlign 的新层。这个层解决了传统 RoIPool 层中存在的空间位置量化问题,确保了特征提取时的空间位置更加准确。

创新性

  • 结合目标检测与实例分割:Mask R-CNN 同时实现了目标检测和实例分割两项任务。通过添加一个分支来预测每个 RoI
    上的分割掩码,Mask R-CNN不仅可以识别图像中的物体,还可以精确地分割出每个物体的轮廓。这种设计使得模型能够处理复杂的场景,例如多个重叠或相邻的对象。

  • 引入 RoIAlign 层:针对 Faster R-CNN 中 RoIPool 层存在的空间量化问题,Mask R-CNN 引入了 RoIAlign 层。RoIAlign 通过使用双线性插值的方法,避免了空间位置上的量化误差,确保了输入图像与输出特征图之间更精确的空间对应关系,从而提升了分割质量。

  • 灵活性和可扩展性:Mask R-CNN 的架构非常灵活,可以很容易地集成到不同的骨干网络(如 ResNet 或 ResNeXt)中,并且可以根据需要调整配置参数以适应不同的应用场景。

局限性

  • 计算复杂度高:Mask R-CNN 模型包含了大量的层和参数,导致训练和推理过程中的计算成本较高。这对于实时应用或资源受限的环境来说是一个挑战。此外,处理高分辨率图像或大量对象时,速度可能会受到影响。
  • 数据需求大:为了获得良好的性能,Mask R-CNN 需要大量的带注释的数据来进行训练。获取高质量的标注数据不仅耗时而且成本高昂,尤其是在需要像素级标注的情况下。

网络结构

在这里插入图片描述
Mask RCNN 实际上只是为了满足实例分割任务,在faster RCNN的基础上并行了一个 mask 分支,并且改进了RoIPooling,将其变为RoIAlign 而已,具体架构参照下图:
在这里插入图片描述

Backbone

Mask R-CNN 有四种 backbone 可以选择,分别是 ResNet50,ResNet101,ResNet50 + FPN,ResNet101 + FPN。选择不同的backbone,ROI生成方式、RP的选择以及RP投射到feature map上的选择会有所不同,并且进入Head层的特征图大小也不尽相同,见下图:

在这里插入图片描述

注意带和不带FPN结构的Mask R-CNN在Mask分支上略有不同,对于带有FPN结构的Mask R-CNN它的class、box分支和Mask分支并不是共用一个RoIAlign。在训练过程中,对于class, box分支RoIAlign将RPN(Region Proposal Network)得到的Proposals池化到7x7大小,而对于Mask分支RoIAlign将Proposals池化到14x14大小。

FPN(特征金字塔网络)

在这里插入图片描述
基本思想:将多个阶段特征图融合在一起,这就相当于既有了高层的语义特征,也有了低层的轮廓特征,为RPN提供不同尺度的特征图。

那么不同阶段的特征图是如何融合的呢?

在这里插入图片描述

假设不同阶段的特征图如上所示分别为C1、C2、C3、C4和C5,横向通过1×1卷积核改变通道数,右侧纵向通过上采样使得与上一阶段的特征图尺寸对其并输出预测结果。

# 提取每个阶段的特征图
_, C2, C3, C4, C5 = resnet_graph(input_image, config.BACKBONE, stage5=True)
        # 自上而下处理,首先需要输入 P5
        # 通过1x1卷积输出256个通道的特征图
        # C5=32x32x2048, P5=32x32x256
        P5 = KL.Conv2D(256, (1, 1), name='fpn_c5p5')(C5) 
        # C4=64x64x1024, P4=64x64x256
        P4 = KL.Add(name="fpn_p4add")([
            KL.UpSampling2D(size=(2, 2), name="fpn_p5upsampled")(P5), 
            KL.Conv2D(256, (1, 1), name='fpn_c4p4')(C4)])
        # C3=128x128x512, P3=128x128x256
        P3 = KL.Add(name="fpn_p3add")([ 
            KL.UpSampling2D(size=(2, 2), name="fpn_p4upsampled")(P4),
            KL.Conv2D(256, (1, 1), name='fpn_c3p3')(C3)])
        # C2=256x256x256, P2=256x256x256,
        P2 = KL.Add(name="fpn_p2add")([
            KL.UpSampling2D(size=(2, 2), name="fpn_p3upsampled")(P3),
            KL.Conv2D(256, (1, 1), name='fpn_c2p2')(C2)])
        
        # 将P2、P3、P4、P5 再通过一个3×3×256的卷积进行特征提取
        P2 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p2")(P2)
        P3 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p3")(P3)
        P4 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p4")(P4)
        P5 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p5")(P5)
        
        # P6只用来生成锚框,不需要再进行过多的处理
        P6 = KL.MaxPooling2D(pool_size=(1, 1), strides=2, name="fpn_p6")(P5)

        rpn_feature_maps = [P2, P3, P4, P5, P6]
        mrcnn_feature_maps = [P2, P3, P4, P5]

生成默认候选框(anchors)

假设我们有一个锚框,其面积为 A A A,宽高比为 r r r。宽高比定义为宽度与高度的比例,即 r = w h r = \frac{w}{h} r=hw。对于一个给定的面积 A A A,我们有:

A = w × h A = w \times h A=w×h

结合宽高比的定义,我们可以写出:

A = w × w r = w 2 r A = w \times \frac{w}{r} = \frac{w^2}{r} A=w×

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值