主要内容

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

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

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

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

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

掩码R-CNN网络架构

Mask R-CNN网络包括两个阶段。第一阶段是区域建议网络(region proposal network, RPN),该网络基于锚框预测对象建议边界框。第二阶段是R-CNN检测器,它对这些建议进行精炼、分类,并为这些建议计算像素级分割。

RPN作为特征提取器的一部分,然后是目标分类,为输入图像生成边界框和语义分割遮罩

Mask R-CNN模型建立在更快的R-CNN模型之上。Mask R-CNN将更快的R-CNN中的ROI最大池层替换为ROI校准层提供更精确的亚像素级ROI池。Mask 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——- - - - - -W3数值数组。

例如,这个样本RGB图像是来自CamVid数据集的修改后的图像[2]已经过编辑,以删除个人身份信息。

街景的RGB图像,车辆和行人

真实边界框

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

例如,bboxes变量显示了样本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字符串向量NumObjects-by-1字符向量单元格数组)

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

标签= 6×1 cell array {'Person'} {'Person'} {'Vehicle'} {'Vehicle'} {'Vehicle'} {'Vehicle'}

实例的面具

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

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

  • 多边形坐标,指定为NumObjects2单元阵列。数组的每一行包含xy)一个多边形沿图像中一个实例边界的坐标。

    Mask 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图像中6个物体的二进制掩模。

六个显示两个行人和四辆车分割的二元面具

想象训练数据

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

imOverlay = insertObjectMask (im,面具,“颜色”行(numObjects));imshow (imOverlay);

在RGB图像上,每个行人和车辆都有一个独特的假色相

要在图像上显示带有标签的边框,请使用showShape函数。控件中显示带有边框大小和位置数据的标记矩形的示例代码bboxes中的变量和标签数据标签变量。

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

标记为“行人”和“车辆”的红色矩形环绕着每个物体的实例

读取和调整数据

使用数据存储读取数据。数据存储必须以1 × 4单元格数组的形式返回数据,格式为{RGB图像、边框、标签、掩码}。图像、包围框和遮罩的大小必须与网络的输入大小匹配。如果需要调整数据大小,则可以使用imresize调整RGB图像和遮罩的大小,以及bboxresize函数来调整包围框的大小。

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

形成小批数据

训练一个面具R-CNN网络需要一个自定义的训练循环。要在一个自定义训练循环中管理观察的小批处理,创建一个小型批处理队列(深度学习工具箱)对象。的小型批处理队列对象将数据强制转换为dlarray(深度学习工具箱)对象,使深度学习应用程序中的自动区分。如果你有一个支持的GPU,那金宝app么小型批处理队列对象也将数据移动到GPU。

下一个(深度学习工具箱)函数生成下一个小批数据小型批处理队列

火车面具R-CNN模型

在自定义训练循环中训练模型。每一次迭代:

  • 属性读取当前小批处理的数据下一个(深度学习工具箱)函数。

  • 方法评估模型梯度dlfeval(深度学习工具箱)函数和一个自定义助手函数,用于计算梯度和批量训练数据的总体损失。可以计算训练数据的特征,并返回网络的状态信息向前函数。

  • 使用函数更新网络可学习参数,例如阿达木酯(深度学习工具箱)sgdmupdate(深度学习工具箱)

有关如何使用经过训练的Mask R-CNN执行实例分割以及如何设置用于训练的网络的示例,请参见使用掩码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。

Brostow, Gabriel J., Julien Fauqueur和Roberto Cipolla。《视频中的语义对象类:高清地面真实数据库》模式识别字母30,no。2(2009年1月):88-97。https://doi.org/10.1016/j.patrec.2008.04.005。

另请参阅

应用程序

功能

对象

相关的例子

更多关于