Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读

目录

1.Mask R-CNN简介

2.Mask分支 

3.Mask R-CNN损失 

4Mask分支预测使用

 


1.Mask R-CNN简介

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第1张图片

        回顾我们之前所说的图像分类、目标检测、语义分割的内容:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第2张图片

        我们来看一下实例分割和语义分割的差别:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第3张图片

        Mask R-CNN不仅能够同时进行目标检测与分割,还能很容易地扩展到其他任务中。Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第4张图片

        Mask R-CNN原论文中的图一:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第5张图片

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第6张图片

         其中红线框住的部分和我们之前所说的Faster R-CNN部分是一样的,如果您还没有学过Faster R-CNN的内容,请参阅我的博客:

Faster R-CNN网络源码复现icon-default.png?t=MBR7https://blog.csdn.net/qq_41694024/category_12155708.html        在Faster R-CNN之外,我们又串联了一个Mask分支,通过这个分支,我们可以对于我们检测的每一个目标生成一个Mask分割蒙版,这里如果想要检测人的关键点信息或者实现其他功能可以并联其它分支。

        Mask分支与我们之前说的FCN结构十分类似:Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第7张图片

        我们在日常使用偏向于右边的分支。

        在Mask R-CNN中,我们将ROI Pooling替换成了ROI Align,因为在ROI Pooling中涉及两次取整操作,通过取整操作会导致我们定位产生偏差,论文中称之为misalignment。Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第8张图片

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第9张图片        我们回顾一下ROI Pooling,假设特征层相对原图步距为32。我们假设一点在原图上的坐标为[10,10],一右下角的点在原图上的坐标为[124,124]。我们现在要将它映射到特征层上,我们需要将坐标都除以32,很明显我们对于原图中[10,10]的点得到特征层的坐标为[0,0], 同样我们对于原图中[124,124]的点得到特征层的坐标为[4,4]

         在特征层上将如上区域框起来,这就是目标映射到特征层上的位置了,上述就是我们说的第一次取整操作。我们如果想要从ROI Pooling层得到2\times2大小的输出,我们就需要将我们的区域划分为2\times2大小,将每个区域进行Max Polling操作。很明显,现在是5\times5大小的区域,不能被2整除,因此我们要进行第二次取整操作,我们得到的区域大小是不一样的,比如我们一块区域得到的是3\times3大小的,一块区域是2\times2大小....如下图,我们对每个区域进行Max Polling操作,得到如上蓝色结果。

        我们回顾一下ROI Align,还是拿上面的做例子:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第10张图片

         这里不进行取整了,现在的区域如下图的蓝色框框。我们还是要求输出大小为2\times2,我们还是将矩形框均分为2\times2的区域,对每个区域去求它的输出,那么对于每个子区域如何求它的输出呢?我们这里又涉及一个参数叫做sampling ratio。它和我们在每个区域设置采样点是相关的,具体在子区域采样多少个点等于sampling ratio的平方,即对每个区域计算中心点的坐标,再利用双线性插值的方法计算橙色点所对应的数值:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第11张图片

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第12张图片

        同样,第二个区域还是先找到它的中心点,还是找到和它最近的四个中心点,利用双线性插值计算中心点对应数值:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第13张图片

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第14张图片

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第15张图片

2.Mask分支 

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第16张图片

        这里不做解释了,之前的FPN网络中以及解释过了。

        我们之前说的FCN对每个像素对每个类别都会预测一个概率分数,最后我们会将每个像素沿着channel方向做一个softmax处理,通过softmax处理之后我们就能得到每个像素归属于每个类别的概率分数,这样不同类别存在竞争关系的(在channel方向概率之和为1),这就是mask与classes是个耦合的状态的意思,在mask r-cnn中,我们是将mask与classes进行解耦的:

        在mask分支中我们针对每个类别都会去预测一个蒙版,但是我们不会针对每一个数据沿它的channel方向去做softmax处理,而是根据Fast R-CNN针对该目标的类别信息将mask分支中针对该类别的蒙版提取出来拿去使用。

        此外:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第17张图片

         训练网络的时候输入Mask分支的目标是由RPN提供的,即Proposals(正样本)(这个正样本是在FastRCNN分支进行正负样本匹配得到的,也就是说我们将proposal输入到FastRCNN分支,在这中我们会进行正负样本的匹配,在这个匹配中我们就能知道每个proposal它是属于正样本还是负样本以及它所对应的gt类别是什么,这里将正样本传递给mask分支),但在预测的时候输入Mask分支的目标是由Fast R-CNN提供。
        理解:

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第18张图片

        在RPN中提供的proposal它的目标边界框并不是那么准确,可能对于一个目标RPN提供了多个边界框,但在我们最终预测的时候我们直接使用FastRCNN部分的输出,因为对于预测的时候我们只需要最准确的边界框。

3.Mask R-CNN损失 

        RPN损失 + Fast R-CNN损失 + mask损失,其中前两项损失我们在说FasterRCNN说过,这里不再赘述。Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第19张图片

        首先我们将图片输入给网络,经过Backbone和FPN得到不同下采样率的特征层,经过RPN网络能够生成一系列的proposal,将proposal输入给ROI Align得到大小相同的特征图,再将特征输入给我们mask分支,就会针对每个类别都去预测一个mask,mask堆叠在一起就是mask分支预测的logits,我们将Fast R-CNN对应预测类别的特征图取出来,这就是一个针对cat类别的mask。

4Mask分支预测使用

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读_第20张图片

 

你可能感兴趣的:(Mask,RCNN网络源码复现,cnn,深度学习,人工智能)