Everything in|

PaB式乌龙茶

园龄:4年1个月粉丝:1关注:0

MaskRCNN

maskRCNN:https://blog.csdn.net/weixin_43702653/article/details/124377487

https://www.cnblogs.com/wangyong/p/10614898.html

https://zhuanlan.zhihu.com/p/407831250

feature map:https://blog.csdn.net/MengYa_Dream/article/details/123705503

FPN网络:https://zhuanlan.zhihu.com/p/562953949

感受野:https://zhuanlan.zhihu.com/p/394917827

ROI Align:https://zhuanlan.zhihu.com/p/73113289

https://blog.csdn.net/Tian__Gao/article/details/124474448

双线性插值法:https://zhuanlan.zhihu.com/p/191260037

FCN:https://zhuanlan.zhihu.com/p/384377866

转置卷积:https://blog.csdn.net/weixin_39910711/article/details/124342599?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-124342599-blog-121181904.235v38pc_relevant_anti_t3&spm=1001.2101.3001.4242.1&utm_relevant_index=3

maskRCNN在fasterRCNN的基础上,与bounding box检测并行地增加了一个预测分割mask的分支,相当于将目标检测和语义分割结合起来,从而达到实力分割的效果。

实例分割

实力分割和语义分割的区别:语义分割会分割出不同类别的物体,而实力分割可以分割出同一类中的不同实例的物体。

基本结构

maskRCNN的基本结构图

maskRCNN的基本结构如上图所示。其流程步骤如下:

  1. 输入一张图片,经过预训练好的CNN(ResNet+FPN)得到feature map;
  2. 对feature map的每一个点预设一些ROI,从而获得多个候选的ROI;
  3. 对这些ROI送入RPN网络进行二值分类(前景或背景)和bbox回归,过滤掉超出图像区域的ROI;
  4. 进行ROI Align操作,将原图和feature map的像素对应起来,然后将feature map和固定的feature对应起来;
  5. 对ROI进行N类别分类、bbox回归和mask生成(在每个ROI中进行FCN操作)。

maskRCNN相对于fasterRCNN的结构变化

如上图所示,maskRCNN相对于fasterRCNN的结构变化有有如下几个:

  1. 使用的ResNet+FPN代替fasterRCNN中的vgg网络;
  2. 将ROI pooling替换为ROI alig;
  3. 添加并列的FCN层,完成语义分割任务。

1. FPN

浅层网络中的特征语义信息比较少,但是目标位置准确;深层的特征语义信息比较丰富,但是目标位置比较粗略(原因:浅层网络的感受野较小,每一个像素点代表的区域很小,能够利用更多细粒度特征信息;随着下采样或卷积次数的增加,感受野逐渐增加,每一个像素点代表一个区域的信息,相对不够细粒度。感受野:特征图上的一点,相对于原图的大小)。

FPN的目标:先通过下采样得到语义特征,然后在保留语义特征的基础上进行上采样,最终得到既有语义特征、又有细粒度特征的网络。因此FPN的网络结构可以分为两个部分:自底向上自顶向下

FPN网络结构

FPN网络结构以及自顶向下过程中的上采样机制

FPN的网络机构如图所示:

  • 自底向上的过程中,通过卷积和池化提取对特征图进行降维,依次得到C1, C2, C3, C4, C5五个特征图。其中,因为C1,和C2的特征图的大小是一样的,所以FPN的建立基于C2C5这四个特征层。
  • 自顶向下的过程中,需要进行上采样,同时将上采样结果和下采样过程中的特征图进行merge。同时还需要进行卷积操作,消除上采样中的混叠效应。首先C5通过1×1的卷积生成P5,再进行对P5进行步长为2的下采样,将下采样结构与C4经过1×1的卷积的结果merge的到P4,依此类推得到P2, P3
  • P5进行步长为2的max pooling得到P6.

Anchor生成规则

规则:

  1. 遍历P2,到P6这五个特征层,对特征层上的每一个像素都生成anchor;
  2. anchor生成规则:以P2层为例,其相对于原图的步长为4,因此对于P2上的每一个尺寸预设为anchor scale锚框,都能够在原图上对应一个4×4×anchorscale的锚框。同时,我们可以为锚框设置长宽比变换,如RATIO=[0.5,1,2],就可以基于每个锚框得到三种不同尺寸的锚框。在fasterRCNN中可以将anchor scale设置为多个值,而在maskRCNN中每一个特征层只对应着一个anchor scale。

例如,如果我们将anchor scale设置为4×4,则在P2上,可以生成256×256×3()个锚框。

2. ROI Align

ROI pooling需要进行两次量化操作:图像坐标->feature map; feature map->ROI feature坐标。这两个操作导致ROI pooling并不是按照像素一一对齐的,因此对掩码的精度有较大的影响。因此使用ROI Align来代替ROI pooling。

ROI pooling的基本步骤

在得到ROI后,如果ROI的边界没有位于feature map的网格,需要进行对齐操作,如下图所示。这一步中会引入位置的偏差。

在进行完上一步后,需要划分子区域。此时如果ROI的大小为5×7,则对于长度为奇数的边进行先取平均值再向上向下取整的操作,再对子区域做max pooling,如下图所示,这一步也会引入偏差。

ROI Align的步骤

首先,对浮点数边界不做对齐;其次划分子区域时采用均匀划分。

对于划分的每个子区域,取得四个采样点(选取方式为将子区域划分成四个子子区域,并取每个子子区域的中心点),再利用双线性插值法计算四个采样点的像素值大小,最后通过max pooling或average pooling对每一个子区域执行聚合操作,得到最终的特征图。

双线性插值法

首先介绍一下插值法。插值法是在图像缩放的过程中,将旧图片中的像素放到新图片中时所使用的算法。对于原图像中的像素的坐标(src_x,src_x),假设原图像的宽高为src_w,src_h,目标图像的宽高为des_w,des_h,则对应的目标图像中的x坐标为:

des_x=src_xdes_wsrc_wdes_y=src_ydes_hsrc_h

如果得到的des_xdes_y不是整值的话,就需要使用插值的方法。速度最快但效果最差的是最近邻插值法,直接用计算结果找到最邻近的点。

双线性插值法则不是找到附近的一个点,而是找到四个点。双线性插值可以看作进行三次单线性插值,两次x一次y或者两次y一次x。单线性插值就是利用直线上一点到直线两端的关系,得到如下的关系:

y=x2xx2x1y1+xx1x2x1y2x=y2xy2y1x1+yy1y2y1x2

3. FCN层

传统的CNN会将图像下采样后,最后输出一个n维的向量来表示输入图像属于每一类的概率。而FCN则是对图像进行像素级的分类,深度模型后使用转置卷积进行上采样,最后输出的heat map上的每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息。

FCN网络的流程如下(如下图所示):

  • 输入的图像经过convi+pooli(i=1~5)进行下采样,得到1/32尺寸特征图;
  • 经过两个卷积层后图像尺寸不变;
  • 使用转置卷积对1/32特征图进行上采样,得到图像预测结果FCN-32s;
  • 将1/32特征图进行2倍上采样,再和pool4的1/16特征图进行融合,对融合原理进行上采样得到预测图FCN-16s;
  • 最后将pool3的1/8特征图与1/16图和1/32图做上述同样的操作,最后上采样得到图像预测FCN-8s。

本文作者:PaB式乌龙茶

本文链接:https://www.cnblogs.com/pab-oolongtea/p/17999558

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   PaB式乌龙茶  阅读(25)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起