重庆专业网站建设公司排名,iis如何做网站,佛山做pc端网站,手机邮箱申请免费注册目录前言一.MASK R-CNN网络1.1.RoIPool和RoIAlign1.2.MASK分支二.损失函数三.Mask分支预测前言 在介绍MASK R-CNN之前#xff0c;建议先看下FPN网络#xff0c;Faster-CNN和FCN的介绍#xff1a;下面附上链接#xff1a;
R-CNN、Fast RCNN和Faster RCNN网络介绍FCN网络介绍…
目录前言一.MASK R-CNN网络1.1.RoIPool和RoIAlign1.2.MASK分支二.损失函数三.Mask分支预测前言 在介绍MASK R-CNN之前建议先看下FPN网络Faster-CNN和FCN的介绍下面附上链接
R-CNN、Fast RCNN和Faster RCNN网络介绍FCN网络介绍FPN网络介绍 在之前介绍数据集的时候我们讲过图像分割分为语义分割和实例分割看下面两幅动图展示 语义分割 实例分割 今天介绍的MASK R-CNN是针对实例分割这种情况的我们主要从以下几个部分进行讲解 MASK R-CNN网络RoiAlignMask分支(FCN)损失函数Mask分支预测 一.MASK R-CNN网络 先来看下MASK R-CNN网络结构 从上面的网络结构可以看出前面的RolAlignCNN就是前面的Faster-RCNN结构(实际中Faster-RCNN使员的也是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的预测器的分支他所用的RoIAlign跟MASK分支采用的RoIAlign并不一样即两者不共用一个RoIAlign一个输出的大小是7×77\times 77×7一个是13×1313\times1313×13。因为分割要求保留更多的信息池化比较大的话会损失比较多的信息。下面一个MASK分支的最后输出28×28×8028\times28\times8028×28×80的意思是对每一个类别(COCO通常使用的都时候80个类别的)都预测一个28×2828\times2828×28大小的蒙版。 在MASK R-CNN中对预测的Mask和class进行解耦什么意思FCN对每个像素每个类别都会预测一个类别概率分数最后会对每个像素沿着channel方向进行softmax处理处理之后就能能得到每个像素归属每个类别的概率分数所以不同类别之间是存在竞争关系的。通过sofmax之后每个像素在channel方向概率只和等于1对于某个类别的概率分数大的话那么其他类别的概率分数就会小。所以他们之间存在竞争关系即AMSK与class是耦合的状态。那么在MASK R-CNN中是怎么对mask与class进行解耦的呢?刚才说了在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-cnn提供即最后预测的目标边界框。RPN提供的目标边界框可能并不准确对于一个目标RPN可能提供了多个目标边界框我们刚说了提供给mask分支的proposals都是正样本所以一定会存在交集这些proposals都可以提供给mask分支进行训练但是在最终预测的时候是直接使用的Faster R-CNN分支的输出因为预测的时候只需要最准确的目标边界框即可可能就一个目标将这个目标提供给MASK分支即可并且在Faster RCNN中通过NMS处理之后是能过滤掉很多重合在一起的目标最终送入mask分支的目标也就少一些目标少一些计算量就会下降。
二.损失函数
损失函数总共三项就是在Faster R-cnn的基础上加上了mask分支所对应的损失。 LossLrpnLfastrcnnLmaskLoss L_{r p n}L_{fast_rcnn }L_{mask } LossLrpnLfastrcnnLmask 如何计算mask分支的损失这里我们借用一篇博主画的图如上图所示输入一张图片经过backbone和fpn得到不同采样率的特征层接着通过RPN就能生成一系列的proposals假设通过RPN得到了一个Proposal图中黑色的矩形框将proposal输入给RoIAlign就能根据proposal的大小在对应特征层上进行裁剪得到对应的特征shape为14×14×C14\times14\times C14×14×C接着通过Mask Branch预测每个类别的Mask信息得到图中的logitslogits通过sigmoid激活函数后所有值都被映射到0至1之间。上面讲了训练的时候输入mask的分支的proposal是由RPN提供的并且这些proposal都是正样本这些正样本是通过Fast R-CNN分支正负样本匹配过程知道的对应图上的proposal通过faster rcnn时在正负样本匹配的时候可以得到对应的GT是猫所以将logits中对应类别猫的预测maskshape为28×2828\times2828×28提取出来。需要注意的是这里的logits虽然没有在通道上做softmax处理但是会进行sigmoid激活也就是会将每个预测值映射到0-1之间。然后根据Proposal在原图对应的GT上裁剪并缩放到28×2828\times2828×28大小得到图中的GT mask对应目标区域为1背景区域为0。最后计算logits中预测类别为猫的mask与GT mask的BCELossBinaryCrossEntropyLoss即可。以上仅仅是以一个proposal为例的实际中会有很多。
三.Mask分支预测 在真正预测推理的时候输入Mask分支的目标是由Fast R-CNN分支提供的。如上图所示前面的backbonfpnRPN跟上面介绍的都是一样的不再介绍。RPN输出的proposals通过Fast R-CNN分支(注意这里的RoIAlign跟上面的mask的不一样)我们能够得到最终预测的目标边界框信息以及类别信息。接着将目标边界框信息提供给Mask分支通过RoIAlign得到对应的特征对于每个类别都预测一个mask就能预测得到该目标的logits信息再根据Fast R-CNN分支提供的类别信息将logits中对应该类别的Mask信息提取出来即针对该目标预测的Mask信息shape为28×2828\times2828×28由于通过sigmoid激活函数数值都在0在这里插入代码片到1之间。然后利用双线性插值将Mask缩放到预测目标边界框大小并放到原图对应区域。接着通过设置的阈值默认为0.5将Mask转换成一张二值图比如预测值大于0.5的区域设置为前景剩下区域都为背景。现在对于预测的每个目标我们就可以在原图中绘制出边界框信息类别信息以及目标Mask信息。