主要内容

开始使用掩码R-CNN进行实例分割

实例分割是一种增强类型的对象检测,它为对象的每个被检测实例生成一个分割映射。实例分割将单个对象视为不同的实体,而不考虑对象的类。相比之下,语义分割将同一类的所有对象视为属于单个实体。

Mask R-CNN是一种流行的深度学习实例分割技术,它对检测到的对象执行像素级分割[1].Mask R-CNN算法可以容纳多个类和重叠的对象。

方法可以创建预训练的Mask R-CNN网络maskrcnn对象。该网络在MS-COCO数据集上进行训练,可以检测80个不同类别的对象。为了执行实例分割,将预先训练好的网络传递给segmentObjects函数。

如果要修改网络以检测额外的类,或者调整网络的其他参数,则可以执行迁移学习。有关如何训练Mask R-CNN的示例,请参见使用掩码R-CNN进行实例分割

掩码R-CNN网络架构

面具R-CNN网络由两个阶段组成。第一个阶段是区域建议网络(RPN),该网络基于锚框预测对象建议边界框。第二阶段是R-CNN检测器,它细化这些建议,对它们进行分类,并计算这些建议的像素级分割。

RPN作为特征提取器的一部分,接着是对象分类,为输入图像生成边界框和语义分割掩码

Mask R-CNN模型建立在Faster R-CNN模型之上。掩模R-CNN替换ROI最大池化层在更快R-CNNroiAlignLayer提供更精确的亚像素级ROI池。掩码R-CNN网络还为像素级对象分割添加了一个掩码分支。有关Faster R-CNN网络的更多信息,请参见R-CNN入门,快R-CNN,快R-CNN

这张图左边是一个经过修改的Faster R-CNN网络,右边是一个掩码分支。

使用ROI对齐层将更快的R-CNN网络连接到掩码分支

若要配置用于迁移学习的Mask R-CNN网络,请在创建类时指定类名和锚框maskrcnn对象。您可以选择指定其他网络属性,包括网络输入大小和ROI池大小。

准备掩码R-CNN训练数据

加载数据

要训练一个Mask R-CNN,你需要以下数据。

数据 描述
RGB图像

作为网络输入的RGB图像,指定为H——- - - - - -W-by-3数值数组。

例如,这个示例RGB图像是从CamVid数据集中修改的图像[2]该网站已经过编辑,删除了个人身份信息。

RGB图像的街道场景与车辆和行人

Ground-truth边界框

RGB图像中对象的包围框,指定为NumObjects-by-4矩阵,行格式为[xywh])。

例如,bboxesvariable显示了样本RGB图像中六个对象的包围框。

盒子= 394 442 36 101 436 457 32 88 619 293 209 281 460 441 210 234 862 375 190 314 816 271 235 305

实例的标签

每个实例的标签,指定为NumObjects-by-1字符串向量或aNumObjects字符向量的-by-1单元格数组)

例如,标签变量显示了样本RGB图像中六个对象的标签。

标签= 6×1单元格数组{'人'}{'人'}{'车辆'}{'车辆'}{'车辆'}

实例的面具

对象实例的掩码。掩码数据有两种格式:

  • 二进制掩码,指定为大小的逻辑数组H——- - - - - -W——- - - - - -NumObjects.每个掩码是图像中一个实例的分割。

  • 多边形坐标,指定为aNumObjects-by-2单元格数组。数组的每一行都包含(xy)多边形沿图像中一个实例边界的坐标。

    掩码R-CNN网络需要二进制掩码,而不是多边形坐标。若要将多边形坐标转换为二进制掩码,请使用poly2mask函数。的poly2mask函数将多边形内的像素设置为1并将多边形外的像素设置为0.此代码演示如何转换多边形坐标masks_polygon变量到二进制掩码的大小h——- - - - - -w——- - - - - -numObjects

    denseMasks = false([h,w,numObjects]);i = 1: numObjects denseMasks(:,:我)= poly2mask (masks_polygon{我}(:1),masks_polygon{我}(:,2),h, w);结束

例如,这个蒙太奇显示了样本RGB图像中六个对象的二进制掩码。

六个二元掩模显示了两个行人和四辆车的分割

创建读取数据的数据存储

使用数据存储读取数据。数据存储必须以1 × 4单元格数组的形式返回数据,格式为{RGB图像、包围框、标签、掩码}。您可以使用以下步骤创建这种格式的数据存储:

  1. 创建一个imageDatastore返回RGB图像数据

  2. 创建一个boxLabelDatastore它以两列单元格数组的形式返回边界框数据和实例标签

  3. 创建一个imageDatastore并指定一个自定义读取函数,该函数将掩码数据作为二进制矩阵返回

  4. 方法组合三个数据存储结合函数

图像、包围框和掩码的大小必须与网络的输入大小相匹配。如果需要调整数据的大小,则可以使用imresize来调整RGB图像和蒙版的大小bboxresize函数调整包围框的大小。

有关更多信息,请参见用于深度学习的数据存储(深度学习工具箱)

可视化培训数据

要在映像上显示实例掩码,请使用insertObjectMask.您可以指定一个颜色映射,以便每个实例以不同的颜色显示。中显示实例掩码的示例代码面具变量在RGB图像上的即时通讯变量使用colormap。

imOverlay = insertObjectMask(im,masks,Color=lines(numObjects));imshow (imOverlay);

每个行人和车辆在RGB图像上都有一个独特的伪彩色色调

要在图像上显示带有标签的包围框,请使用showShape函数。类中显示带有包围框大小和位置数据的已标记矩形形状bboxes中的变量和标签数据标签变量。

imshow imOverlay showShape (“矩形”、bboxes标签=标签颜色=“红色”);

标有“行人”和“车辆”的红色矩形围绕着每个对象的实例

火车面具R-CNN模型

训练一个面具R-CNN网络使用trainMaskRCNN函数。有关示例,请参见使用掩码R-CNN进行实例分割

参考文献

[1] He, Kaiming, Georgia Gkioxari, Piotr Dollár和Ross Girshick。“面具R-CNN。”ArXiv: 1703.06870 (Cs)2018年1月24日。https://arxiv.org/pdf/1703.06870。

[2] Brostow, Gabriel J., Julien Fauqueur和Roberto Cipolla。视频中的语义对象类:一个高清地面真相数据库。模式识别信30,没有。2(2009年1月):88-97。https://doi.org/10.1016/j.patrec.2008.04.005。

另请参阅

应用程序

功能

相关的例子

更多关于

Baidu
map