Mask R-CNN论文导读

版权声明:欢迎大家转载分享,转载请注明出处,有需要请留言联系我~~~ https://blog.csdn.net/crazyice521/article/details/65448935

文章链接:Mask R-CNN

看到文章出来的第一个感觉就是,哇塞,大神们不光甩大招,还在一起甩~~~让我们这些小虾米们怎么玩呢~废话不多说,介绍重点。

一、文章思想

文章的主要思路就是把原有的Faster-RCNN进行扩展,添加一个分支使用现有的检测对目标进行并行预测。同时,这个网络结构比较容易实现和训练,速度5fps也算比较快点,可以很方便的应用到其他的领域,像目标检测,分割,和人物关键点检测等。并且比着现有的算法效果都要好,在后面的实验结果部分有展示出来。

二、简介

实例分割的难度在于要先对一张图片所有的目标进行正确的检测同时还要对每个示例进行分割。检测的目的是把每一个单个目标分类然后用bounding box标定出来,而实例分割的目的是区分每一个像素为不同的分类而不用区别不同的目标。
可能这段话有点生硬难懂,大概意思就是目标检测就是只要检测到一张图像中有什么目标同时使用标定框表示出来;而实例分割就是要在每一个像素上都表示出来目标所属的具体类别。
这里写图片描述
如图中所示,本文框架为在原有的基础上对ROI进行一个分支,预测ROI当中元素所属分类,使用FCN进行预测。

下面这张图片能更好的理解检测和分割的区别。在同一个检测框中的目标并不属于同一个类别,可能会有不同的像素被区分出来。
这里写图片描述

三、主要思想

理解了大致的区别和作者所做的工作之后,这个主要思想就算是比较好理解了。首先对图片做检测,找出图像中的ROI,对每一个ROI使用ROIAlign进行像素校正,然后对每一个ROI使用设计的FCN框架进行预测不同的实例所属分类,最终得到图像实例分割结果。
介绍一下网络使用的损失函数为分类误差+检测误差+分割误差
这里写图片描述

分类误差和检测误差在farster R-CNN当中已经介绍过了,可以去文献当中查找。分割误差为新的东西,对于每一个ROI,mask分支定义一个Km2维的矩阵表示K个不同的分类对于每一个m*m的区域,对于每一个类都有一个。对于每一个像素,都是用sigmod函数进行求相对熵,得到平均相对熵误差Lmask。对于每一个ROI,如果检测得到ROI属于哪一个分类,就只使用哪一个分支的相对熵误差作为误差值进行计算。(举例说明:分类有3类(猫,狗,人),检测得到当前ROI属于“人”这一类,那么所使用的Lmask为“人”这一分支的mask。)这样的定义使得我们的网络不需要去区分每一个像素属于哪一类,只需要去区别在这个类当中的不同分别小类。

Faster R-CNN:包含两个部分,提出RPN区域,找到目标框,对ROI进行分类。核心思想就是把图片区域内容送给深度网络,然后提取出深度网络某层的特征,并用这个特征来判断是什么物体(文章把背景也当成一种类别,故如果是判断是不是20个物体时,实际上在实现是判断21个类。),最后再对是物体的区域进行微微调整。

Mask Representation:mask 对输入目标的空间布局进行编码。使用m*m的矩阵对每一个ROI进行预测而不是使用向量去进行预测,这样可以保证ROI当中的空间信息不会损失。

ROIAlign:RoI Pooling就是实现从原图区域映射到卷积区域最后pooling到固定大小的功能,把该区域的尺寸归一化成卷积网络输入的尺寸。在归一化的过程当中,会存在ROI和提取的特征不重合现象出现,作者就提出了这个概念ROIAlign,使用ROIAlign层对提取的特征和输入之间进行校准。
改变:我们避免对每一个ROI边界或者块进行数字化。使用双线性内插法计算在ROI 块当中固定的四个采样位置得到的输入特征值并对结果进行融合。

Network Architecture
分成三个部分进行介绍,第一个是主干网络用来进行特征提取,第二个是头结构用来做边界框识别(分类和回归),第三个就是mask预测用来对每一个ROI进行区分。

主干网络使用的是50层的深度残差网络ResNet50。
Head Architecture:
这里写图片描述

Mask网络使用的是如图中个所示的简单的结构,作者指出可能更为复杂的结构能够有更好的表现吧,这个需要以后验证。留给未来的你了~~~

接下来就是一些参数的设置和实验部分,这部分还是比较好理解的,看看参数,瞅瞅结果(肯定是最好的),这部分比较好理解,不多篇幅在这浪费时间了

四、扩展到行人姿势预测

作者在最后提了一下扩展的方法,就是使用原有的mask分支进行关键点的检测,然后对姿势进行预测。可以看看

总体来说这篇文章想法是很好的,虽然东西都是使用的原有的,但是把检测和分割弄到一起来实现,这样可以省去很多事,不用分割的时候还要去找不一样的分类什么的怎么分割啊,只需要对检测得到的目标框中的区域进行分割,同时使用一个简单的网络分支就完成了这个任务,还是很有想法的,不过目前代码没放出来,只能分析这么多了,有什么不到的地方希望能指出~~~~~~~~~~

相关参考文献:
R-CNN
Fast R-CNN
Faster R-CNN

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页