Mask RCNN学习笔记


Mask RCNN流程

1 Mask RCNN开篇前的几个问题

1.1 Mask RCNN 沿用思想&Faster RCNN中暴露的问题

Mask RCNN网络沿用了Faster RCNN的网络思想,网络整体可以分为三大部分:
(1)ResNet-FPN特征提取网络
(2)RPN建议框提取
(3)检测+分类的Faster RCNN原结构、新Mask分支分割图像

最后,Mask RCNN的网络损失函数Lmask由三部分构成:Lmask = Lcls + Lreg + Lmask

Faster RCNN 网络中暴露的问题:
(1)Faster RCNN 在RPN网络中得到的anchor坐标[x,y,w,h]一般是小数,但是anchor在proposal layer中最终都被整数化了,损失精度。

(2)RoI Pooling 层中又进行了一次整数化,做法是将每个proposal对应的feature map区域划分为7x7个大区域,之后在每个大区域中进行max pooling为7x7大小的特征图,这里举一个例子,如图所示为8x8的特征图,一个bbox坐标为[0,3,7,8],需要将它变成2x2大小的特征图:
在这里插入图片描述
可以看到,proposal的大小是5x7,是没法平均分配的,所以进行了区域取整,高被分割成为2x3,宽被分割为了3x4,最终得到了2x2的maxpooling结果:
在这里插入图片描述

如果遇到特征区域无法划分的时候,就需要四舍五入取整为7x7(别问我为啥是7x7,论文里说的是7x7)

1.2 FPN层

FPN层网络结构
FPN层的全名是特征金字塔网络(feature pyramid network)
(1)FPN解决的问题:解决了目标物体的多尺度问题,提升了小物体的检测性能。
(2)FPN中的核心关键词:上采样与下采样
(3)FPN的连接方式:自上而下(CNN)、自下而上(最邻近上采样)、横向连接(融合)

在CNN的下采样过程中,特征图中包含的细节信息随着网络深度加深而越来越少(得到的特征图结果记为Dn),之后,将下采样的结果直接使用「最邻近上采样」得到上采样结果(得到的特征图结果记为Um),最后,将Dn与Dm相融合,这样做的好处是可以让特征图同时具有强语义信息和强空间信息。

1.3 Mask分支

在这里插入图片描述
(1)如上所示为Mask RCNN的整体流程图,在ROI Align之后通过两层conv就是mask预测分割支路了,这条支路与上方的class分类、box再回归相互独立;

(2)mask支路分割的输出结果,假设图像数据集一共有K个类别,MxM是ROIAlign之后的特征图结果大小,最终的输出为KMM的二值掩码,为什么是二值掩码?是因为在proposal区域内,需要让网络区分前景与背景,所以假设了标注0为背景,1为前景目标;

(3)关于mask支路的loss计算,当分类分支完成了任务得到概率最大的类别分类之后(假设为第K个类别),之后将第K个类别的mask预测取出,作为最终的预测结果,通过sigmoid激活函数计算loss;在这之前,mask支路还是需要计算K个类别的mask分类,这部分的计算量并不能省略。

1.4 ROI Align

(1)ROI Align的目的:ROI Align 的目的是取消候选框取整操作,保留小数,解决了Faster RCNN网络中不匹配(mis-alignment)问题,如下图,为Faster RCNN的做法:
在这里插入图片描述

(2)ROI Align具体实现方式:采用双线性插值方式,求取采样点坐标(这个坐标通常包含着采样点周围四个点的权值),最后进行maxpooling操作,如下图所示
在这里插入图片描述

1.5 全卷积层(FCN)和CNN网络里的全连接层

(1)关于全联接层,大致是这样的,它把不同通道的特征图,例如3x3x5的输出,转化为1x4096的形式,怎么做呢,如下图:
在这里插入图片描述
做完多通道卷积之后,进行一个大求和,将所有通道内的图像高度浓缩为一个值,之后进行softmax分类,那它的意义到底在哪里嘛?下面看这张图:
在这里插入图片描述
卷积神经网络的神经元学习到了这是一只猫,对应的更新了神经元里的权重信息,之后,有一只猫被送入卷积神经网络后,对应识别猫的神经元就被激活了。
在这里插入图片描述
在这里插入图片描述
通过最后一层的softmax层,也是output layer 确定出很大的概率这是一只猫。

(2)全卷积FCN层是一种稀疏的全联接层,全卷积层是一种核很大的卷积层,他们最终得到的东西不同如下图,FCN得到了一张heatmap,全联接层得到了分类结果。在这里插入图片描述
可以参考这篇文章:使用全卷积代替全联接

1.6 语义分割与实例分割的区别

语义分割,如下图:在这里插入图片描述
实例分割:
在这里插入图片描述
总结:语义分割对同类物体的不同实例不需要区分,大家都是一个颜色;实例分割,对同类物体的不同实例进行分割。

1.7 Mask RCNN 数据集的标注问题

一般的目标检测直接使用标注工具labme对目标物体画出矩形,而Mask RCNN需要进行对检测物体进行多边形标注,如下图所示,和Faster RCNN并不相同:
在这里插入图片描述

2 网络整体结构

2.1 ResNet-FPN 处理流程说明

在这里插入图片描述

(1)首先,对于原始图片进行CNN常规卷积操作,在这个过程中,得到特征图尺寸不断减小(bottom-up),之后利用尺寸较小的特征图进行上采样(top-down)

(2)将bottom-up与top-down通过三种不同方式相连接(自上而下连接、自下而上连接、横向连接)得到预测[P2,P3,P4,P5]

(3)关于小尺寸图片与大尺寸图片的融合方式问题,一般会使用CNN卷积时不同尺度的特征图通过1x1卷积(用于降低通道数量)与top-down相结合,完成融合,融合结构如下图
在这里插入图片描述

(4)在融合之后通过3x3的卷积对融合特征进行处理,目的是消除混叠效应(aliasing effect)

2.2 ResNet-FPN + RPN

在这里插入图片描述
这部分的网络结构如图所示,FPN层最终得到了不同尺度的特征图,在经过RPN层之后,proposal区域经过判断函数,将选取到最适合的特征图上,这就做到了:
(1)大目标的语义信息在浓缩度高的小特征图上
(2)小目标的细节并没有丢失,出现在大特征图上
这样的好处是,自适应的解决了目标物体多尺度的问题,根据一个公式来决定ROI区域到底需要从哪张图切割,公式长这样:
在这里插入图片描述
k表示切割ROI时,最终特征图的选取编号,k0是一个常数4,表示面积为WxH=224x224的ROI所应在的层级。

2.3 ResNet-FPN + RPN + Faster RCNN + Mask分支

在这里插入图片描述
(1)在确定了ROI的提取之后,还需要将不同尺度的ROI 大小进行归一化,这里使用到的是ROI Ailgn,ROI Ailgn这种方式的栅格化,解决了Faster RCNN里直接粗暴的将小数取整的做法(毕竟Mask RCNN需要进行像素级语义分割,不把像素对齐怎么能行呢?你说是吧)

(2)经过ROI Align之后,proposal区域特征图大小变得一样了,这时候网络分为两只,「支路1」传统的Faster RCNN 检测与分类支路;「支路2」Mask网络独有的语义分割支路

(3)当分类网络将proposal区域内部的最大分类结果K传入mask分割网络后,分割网络就在所有分割好的掩膜中挑出第K个作为语义分割的结果,这时第K个sigmoid函数被激活并计算Mask分割的Loss。

2.4 以损失函数的角度观察网络

网络整体Loss分为三部分,
(1)Faster RCNN检测损失Lreg
(2)Faster RCNN分类损失Lcls
(3)Mask支路,分割损失Lmask
其中,检测损失又出现了两回,「第一次检测回归」在RPN层中初步检测回归;「第二次检测回归」在检测尾出现,是较为精细的回归。

3 总结

(1)Mask RCNN中添加了新颖的Mask支路,用于语义分割;
(2)改进了Faster RCNN网络的两次取整(第一次是proposal layer对anchor坐标进行取整,第二次是在ROI Pooling中进行的取整)
(3)Mask RCNN 在检测和回归的同时也进行了分割

4 资料参考

4.1 FCN的学习与理解

4.2 使用卷积代替全连接

4.3 Mask RCNN 知乎

4.4 CNN 入门讲解:什么是全连接层(Fully Connected Layer)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值