当前位置: 代码网 > it编程>编程语言>C/C++ > MASK R-CNN网络介绍

MASK R-CNN网络介绍

2024年08月01日 C/C++ 我要评论
MASK R-CNN网络介绍

前言

  在介绍mask r-cnn之前,建议先看下fpn网络,faster r-cnnfcn的介绍:下面附上链接:

  在之前介绍数据集的时候我们讲过图像分割分为语义分割和实例分割,看下面两幅动图展示:
语义分割:
在这里插入图片描述
实例分割:
在这里插入图片描述
  今天介绍的mask r-cnn是针对实例分割这种情况的,我们主要从以下几个部分进行讲解:

一.mask r-cnn网络

  先来看下mask r-cnn网络结构:
在这里插入图片描述
  从上面的网络结构可以看出,前面的rolalign+cnn就是前面的faster r-cnn结构(实际中faster r-cnn使员的也是roialign,并不是roipool)。后面一个卷积层就是自己可以并联的的网络结构用于分割,关键点检测都行。
在这里插入图片描述

  下面我们来看下mask分支的结构,跟fcn非常像,主要有两种结构:不带fpn特征金字塔结构和带有fpn的,我们经常使用的也是右边这个带有fpn的。
在这里插入图片描述

1.1.roipool和roialign

  上面讲到在mask r-cnn中把之前faster r-cnn中的roipool替换成了roialign层,为什么呢?因为在roipool中涉及两次取整的操作,会导致定位产生偏差。
这里我们再来看下roipool操作:
在这里插入图片描述
  从上面的图中可以看出,roipool可能会涉及两次取整操作,我们以目标检测的标注框为例解释,第一次是在标注框大小投影到最终网络输出特征层进行了一次四舍五入;第二次是在maxpooling的时候,因为投影后的框不能保证能够均分,还会涉及到一次四舍五入。
在这里插入图片描述
  相比于roipool,通过上面的图可以看到,第一次投影的时候roialign并不会涉及到四舍五入的操作,最终计算的值是多少就是多少;第二次池化的时候直接均分第一次投影得到的特征矩阵,找到中心点坐标和周围最近的几个点(也可以采用几个采样点计算均值,这里以一个为例),直接计算双线性差值,也不会涉及到四舍五入的操作。
  通过上面的对比可以看出roialign并不会涉及到任何的取整操作,所以他的定位也更加的准确。

1.2.mask分支

  上面我们讲mask分支有两种,带fpn和不带fpn,我们最常用的是下面这个带有fpn的结构:

在这里插入图片描述
注意1:
  上图中有两个roi,上面一个对应的是faster r-cnn的预测器的分支,他所用的roialignmask分支采用的roialign并不一样,即两者不共用一个roialign,一个输出的大小是 7 × 7 7\times 7 7×7,一个是 13 × 13 13\times13 13×13。因为分割要求保留更多的信息,池化比较大的话会损失比较多的信息。下面一个mask分支的最后输出 28 × 28 × 80 28\times28\times80 28×28×80的意思是对每一个类别(coco通常使用的都时候80个类别的)都预测一个 28 × 28 28\times28 28×28大小的蒙版。

  在mask r-cnn中对预测的maskclass进行解耦,什么意思?fcn对每个像素,每个类别都会预测一个类别概率分数,最后会对每个像素沿着channel方向进行softmax处理,处理之后就能能得到每个像素归属每个类别的概率分数,所以不同类别之间是存在竞争关系的。通过sofmax之后,每个像素在channel方向概率只和等于1,对于某个类别的概率分数大的话,那么其他类别的概率分数就会小。所以他们之间存在竞争关系,即amskclass是耦合的状态。那么在mask r-cnn中是怎么对maskclass进行解耦的呢?刚才说了在mask分支中对每个预测类别都会预测一个蒙版,但是不会针对每一个数据沿着他的channel方向做softmax处理,而是根据faster r-cnn分支预测针对该目标的类别信息将mask分支中针对该类别的蒙版信息提取出来使用。这段话听起来有点绕,晦涩难懂,多理解一下。核心就是mask分支现在不用自己的分类信息了,把faster r-cnn的分类信息拿过来当做自己的。

注意2:
  训练网络的时候输入mask分支的目标是由rpn提供的,即proposals,需要注意的是输入给mask分支的proposals全都是正样本,正样本是在faster r-cnn分支进行正负样本匹配的时候得到的,即将proposals输入到faster r-cnn分支,在fasterr-cnn分支中会进行正负样本的匹配就会得到每个proposal到底是正样本还是负样本以及这个proposal他所对应的gt类别是什么,将得到的所有正样本传递给mask分支。
  预测的时候输入mask分支的目标是由faster r-cnn提供,即最后预测的目标边界框。rpn提供的目标边界框可能并不准确,对于一个目标,rpn可能提供了多个目标边界框,我们刚说了提供给mask分支的proposals都是正样本,所以一定会存在交集,这些proposals都可以提供给mask分支进行训练,但是在最终预测的时候是直接使用的faster r-cnn分支的输出,因为预测的时候只需要最准确的目标边界框即可,可能就一个目标,将这个目标提供给mask分支即可,并且在faster r-cnn中,通过nms处理之后是能过滤掉很多重合在一起的目标,最终送入mask分支的目标也就少一些,目标少一些计算量就会下降。

二.损失函数

损失函数总共三项,就是在faster r-cnn的基础上加上了mask分支所对应的损失。
l o s s = l r p n + l f a s t r c n n + l m a s k loss =l_{r p n}+l_{fast_rcnn }+l_{mask } loss=lrpn+lfastrcnn+lmask

在这里插入图片描述
  如何计算mask分支的损失,这里我们借用一篇博主画的图,如上图所示,输入一张图片,经过backbonefpn得到不同采样率的特征层,接着通过rpn就能生成一系列的proposals,假设通过rpn得到了一个proposal(图中黑色的矩形框),将proposal输入给roialign,就能根据proposal的大小在对应特征层上进行裁剪得到对应的特征(shape为 14 × 14 × c 14\times14\times c 14×14×c),接着通过mask branch预测每个类别的mask信息得到图中的logitslogits通过sigmoid激活函数后,所有值都被映射到0至1之间)。上面讲了训练的时候输入mask的分支的proposal是由rpn提供的,并且这些proposal都是正样本,这些正样本是通过fast r-cnn分支正负样本匹配过程知道的,对应图上的proposal通过faster r-cnn时,在正负样本匹配的时候可以得到对应的gt是猫,所以将logits中对应类别猫的预测mask(shape 28 × 28 28\times28 28×28)提取出来。需要注意的是这里的logits虽然没有在通道上做softmax处理,但是会进行sigmoid激活,也就是会将每个预测值映射到0-1之间。然后根据proposal在原图对应的gt上裁剪并缩放到 28 × 28 28\times28 28×28大小,得到图中的gt mask(对应目标区域为1,背景区域为0)。最后计算logits中预测类别为猫的maskgt maskbceloss(binarycrossentropyloss)即可。以上仅仅是以一个proposal为例的,实际中会有很多。

三.mask分支预测

在这里插入图片描述
  在真正预测推理的时候,输入mask分支的目标是由fast r-cnn分支提供的。如上图所示,前面的backbon+fpn,rpn跟上面介绍的都是一样的,不再介绍。rpn输出的proposals通过fast r-cnn分支(注意这里的roialign跟上面的mask的不一样),我们能够得到最终预测的目标边界框信息以及类别信息。接着将目标边界框信息提供给mask分支通过roialign得到对应的特征,对于每个类别都预测一个mask,就能预测得到该目标的logits信息,再根据fast r-cnn分支提供的类别信息将logits中对应该类别的mask信息提取出来,即针对该目标预测的mask信息(shape 28 × 28 28\times28 28×28,由于通过sigmoid激活函数,数值都在0在这里插入代码片1之间)。然后利用双线性插值将mask缩放到预测目标边界框大小,并放到原图对应区域。接着通过设置的阈值(默认为0.5)将mask转换成一张二值图,比如预测值大于0.5的区域设置为前景剩下区域都为背景。现在对于预测的每个目标我们就可以在原图中绘制出边界框信息,类别信息以及目标mask信息。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com