Mask R-CNN学习

Posted chenying66

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mask R-CNN学习相关的知识,希望对你有一定的参考价值。

终于!开始了Mask R-CNN的学习!!膜拜大佬!
首先介绍一下Faster R-CNN模型:

  1. 是一个二阶段的分类器。第一结算是区域候选网络(Region Proposal Network, RPN)用于提出候选的包围箱;第二个阶段是核心,即从每一个候选盒中使用RoIPool,提取出特征并且执行分类和bounding-box回归。两个阶段中使用的特征是被共享的
  2. 在Faster R-CNN中使用了RoIPool,它可以从每一个RoI中提取出小的特征图。RoIPool首先将浮点数RoI量化为特征图的离散粒度,然后将此量化的RoI细分为空间容器,这些空间容器本身也被量化,最后汇总每个容器所覆盖的特征值(通常通过最大池化)

接下来进入主题:Mask R-CNN
4. Mask R-CNN模型,可以同时完成下述两件事:在图像中有效的检测出对象、为每一个实例生成一个高质量的分割掩码
5. 本文主要的应用场景是实例分割instance segmentation,在对图像中所有物体进行正确检测的同时,准确的将每一个实例进行精确的分割。(相当于将目标检测和语义分割两个内容联系起来了)
6. 由下述图可知,在原始Faster R-CNN的基础上,再添加了一个分支,来生成感兴趣区域RoI对应的掩码图像。该分支是一个简单的FCN全卷积网络,通过像素-像素的方式来预测得到一个分割掩码。同时,这个网络可以提取出一个对象上更加精细化finer的空间布局spatial layout
7. 同时,Faster R-CNN网络的输入输出之间并没有完整的像素-像素之间的对齐。所以,Mask R-CNN网络还提出了一个RoIAlign的模块,用于保持确切的空间位置。这个小小的模块,可以将掩码准确度由约10%提升到50%,且在更严苛的定位度量上展现出了更大的增益。同时,RoIAlign模块可以对掩码预测和类别预测这两个过程进行解耦,具体的方式是为每一个类别单独的预测一个二值掩码,而不需要在多个类间进行竞争,同时根据网络的RoI分类分支来预测类别
8. L = Lcls+Lbox+Lmask。其中,对于每一个RoI来说,掩码分支的输出是一个是一个Km^2维的量,其中,K表示总的类别数量,m ^2表示产生的掩码的分辨率为mxm。针对这一个输出,我们使用像素级的sigmoid函数,且将Lmask定义为平均二元交叉熵损失函数。其中,若一个RoI有着对应的金标准类别k,那么Lmask就只定义为第k个掩码
9. 由5可知,对每一个类别来说,网络会为了每一个类别产生掩码,不会在类别间存在竞争。使用预设的分类分支来预测类的类别,并选择相应的输出掩码
10. 掩码表示:当使用全连接层处理标签或box偏移时,不可避免的会被折叠成短的输出向量,然而,通过卷积提供的像素-像素对应关系可以自然的解决掩码的空间结构的提取。具体的,对于每一个RoI区域,使用FCN来预测一个mxm的掩码,这就允许掩码分支的每一层都可以维护一个显性的mxm对象空间布局,而不是使用向量表示,因为后者会损失空间维度。
11. 由7就对上述得到的每一个RoI特征(它们每一个又是有效的特征图),都可以保持显性的每一个像素的空间对应关系。
12. 引入RoIAlign的原因:由上述RoIPool的解释,可以知道,在这个过程中,会执行量化操作,而量化操作就会引入RoI区域和提取出来的特征之间的不对齐性。虽然,这个不对齐性对于分类问题可能没有影响(因为对于分类问题而言,它可以有效地应对小的平移),但是对于预测像素正确的掩码图像来说会产生很大的负影响
13. RoIAlign的内容:根据11中提到的内容,发现RoIPool中产生不对齐性的原因是引入了量化,所以很自然的,对其进行的改进就是避免任何对于RoI边界或者bins的量化。在每个RoI bin中有4个规则采样的位置,然后,使用双线性插值的方式来计算输入特征在上述四个位置上的确切的值。然后,再聚集这些值(如使用max或average)

蓝色的虚线表示特征图,对于每一个RoI bin中的sampled point,将会使用RoI特征图的最邻近的grid顶点,使用双线性插值的方法来计算每个采样点的值。从而,不需要使用量化操作。
同时,文章中指出,只要不进行量化,结果就不会对确切的采样位置或采样的点数敏感。
14. 文章中将网络分成了两部分:backbone主干网络(用于在整幅图像上进行特征提取)、head(用于进行bbox回归和掩码预测),其中,head被独立的用在每个RoI上。使用术语network-depth-features网络深度特征来表示backbone架构。

以上是关于Mask R-CNN学习的主要内容,如果未能解决你的问题,请参考以下文章

使用Mask R-CNN模型实现人体关键节点标注

使用Mask R-CNN模型实现人体关键节点标注

目标检测论文解读11——Mask R-CNN

Mask R-CNN图像实例分割实战:训练自己的数据集

PyTorch版Mask R-CNN图像实例分割实战:训练自己的数据集

有空就学学的实例分割1——Tensorflow2搭建Mask R-CNN实例分割平台