实例分割--Mask RCNN详解(ROI Align / Loss Fun)

本文详细介绍了实例分割任务的重要工具——Mask RCNN,包括其架构、ROI Align的主要思想和作用。重点讨论了ROI Align如何解决传统ROI Pooling的不匹配问题,以及网络采用的损失函数,包括分类、检测和分割误差。通过实例解释了如何避免类间竞争,优化网络性能。
摘要由CSDN通过智能技术生成

目标检测、语义分割与实例分割:

实例分割是一种在像素层面识别目标轮廓的任务,相比其他相关任务,实例分割是较难解决的计算机视觉任务之一:


分类:这张图像中有一个气球。

语义分割:这些全是气球像素。

目标检测:这张图像中的这些位置上有 7 个气球。

实例分割:这些位置上有 7 个气球,并且这些像素分别属于每个气球。


1 总结架构与主要思想

总体架构

Mask-RCNN 大体框架还是 Faster-RCNN 的框架,可以说在基础特征网络之后又加入了全连接的分割子网,由原来的两个任务(分类+回归)变为了三个任务(分类+回归+分割)。Mask R-CNN 是一个两阶段的框架,第一个阶段扫描图像并生成提议(proposals,即有可能包含一个目标的区域),第二阶段分类提议并生成边界框和掩码。

这里写图片描述

其中黑色部分为原来的 Faster-RCNN,红色部分为在 Faster网络上的修改,总体流程如下:

1)输入图像; 
2)将整张图片输入CNN,进行特征提取; 
3)用FPN生成建议窗口(proposals),每张图片生成N个建议窗口; 
4)把建议窗口映射到CNN的最后一层卷积feature map上; 
5)通过RoI Align层使每个RoI生成固定尺寸的feature map; 

6)最后利用全连接分类,边框,mask进行回归。

另一系统图:



首先对图片做检测,找出图像中的ROI,对每一个ROI使用ROIAlign进行像素校正,然后对每一个ROI使用设计的FCN框架进行预测不同的实例所属分类,最终得到图像实例分割结果。 

与faster RCNN的区别: 
1)使用ResNet101网络 
2)将 Roi Pooling 层替换成了 RoiAlign; 
3)添加并列的 Mask 层; 

4)由RPN网络转变成FPN网络 

主要改进点:

1. 基础网络的增强,ResNeXt-101+FPN的组合可以说是现在特征学习的王牌了;

2. 分割 loss 的改进,由原来的 FCIS 的 基于单像素softmax的多项式交叉熵变为了基于单像素sigmod二值交叉熵。softmax会产生FCIS的 ROI inside map与ROI outside map的竞争。但文章作者确实写到了类间的竞争, 二值交叉熵会使得每一类的 mask 不相互竞争,而不是和其他类别的 mask 比较 ;

3.  ROIAlign解决Misalignment 的问题,说白了就是对 feature map 的插值。直接的ROIPooling的那种量化操作会使得得到的mask与实际物体位置有一个微小偏移,个人感觉这个没什么 insight,就是工程上更好的实现方式。

说明:这么好的效果是由多个阶段的优化实现的,大头的提升还是由数据和基础网络的提升:多任务训练带来的好处其实可以看作是更多的数据带来的好处;FPN 的特征金字塔,ResNeXt更强大的特征表达能力都是基础网络。

其中:

残差网络ResNet参见:残差网络resnet详解

RPN网络参见:目标检测--FPN解析

 Mask-RCNN 的几个特点(来自于 Paper 的 Abstract):

1)在边框识别的基础上添加分支网络,用于语义Mask 识别;
2)训练简单,相对于 Faster 仅增加一个小的 Overhead,可以跑到 5FPS;
3)可以方便的扩展到其他任务,比如人的姿态估计等;
4)不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries,包括 COCO 2016 的Winners。

2 ROI Align

ROI Align 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。实验显示,在检测测任务中将 ROI Pooling 替换为 ROI Align 可以提升检测模型的准确性。

2.1 ROI Pooling

在faster rcnn中,anchors经过proposal layer升级为proposal,需要经过ROI Pooling进行size的归一化后才能进入全连接网络,也就是说ROI Pooling的主要作用是将proposal调整到统一大小。步骤如下:

  1. 将proposal映射到feature map对应位置
  2. 将映射后的区域划分为相同大小的sections
  3. 对每个sections进行max pooling/avg pooling操作

举例说明:

考虑一个8*8大小的feature map,经过一个ROI Pooling,以及输出大小为2*2. 
这里写图片描述

1)输入的固定大小的feature map (图一) 
2)region proposal 投影之后位置(左上角,右下角坐标):(0,4)?,(4,4)(图二) 
3)将其划分为(2*2)个sections(因为输出大小为2*2),我们可以得到(图三) ,不整除时错位对齐(Fast RCNN

4)对每个section做max pooling,可以得到(图四)

  • 61
    点赞
  • 390
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值