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调整到统一大小。步骤如下:
将proposal映射到feature map对应位置
将映射后的区域划分为相同大小的sections
对每个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,可以得到(图四)
前言:
Mask
R-CNN是一个非常灵活的框架,它来源于faster-
RCNN
和全卷积网络FCN,但是又提出了很多的改进措施,
Mask
-
RCNN
非常灵活,我们可以可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、语义分割、
实例分割
、人体姿势识别等多种任务,与其说
Mask
-
RCNN
是一个
实例分割
算法,倒不如说
Mask
-
RCNN
是一个灵活的框架。
一、
Mask
-
RCNN
概览
注意:本课程已从
mask
rcnn
-benchmark更新到了Detectron2
Mask
R-CNN是一种基于深度学习的图像
实例分割
方法,可对物体进行目标检测和像素级分割。本课程将手把手地教大家使用Labelme图像标注工具制作自己的数据集,并使用PyTorch版本的
Mask
R-CNN(Facebook 官方Detectron2/
mask
rcnn
-benchmark)训练自己的数据集,从而能开展自己的图像分割应用。本课程的具体项目实战案例是:对汽车行驶场景中的路坑、车、车道线等多类物体进行检测和分割 。本课程在Ubuntu系统上进行项目全过程的演示。本课程提供项目标注的数据集和相关Python程序文件。相关课程:
Mask
R-CNN图像
实例分割
实战:训练自己的数据集 (Keras版本 )https://edu.csdn.net/course/detail/25128
扩展而来的。
目前实现的转换包括
ColorJitter、RandomErasing、Expand、Scale、Resize、Crop、ElasticTransform、Rotate、Shift
Flip。
如果你需要更多的图像增强类型,你可以看看
,它是一个非常全面的库。
图像变换可以分为两类:
几何变换改变图像的几何形状,目的是使算法在位置/方向的变化和图像变形中保持不变。
光度变换修改颜色通道,目的是使算法对光照和颜色的变化保持不变。
对于图像分类以外的计算机视觉问题,仅变换图像通常是不够的。
比如说,对于物体检测,我们应该同时变换图像和边界框,对于图像分割,我们还应该变换分割掩码(掩码不应与图像相同,因为对于图像几何变换,我们经常使用插值进行变换图像在视觉上很满意,但掩码的插值毫无意义)。
本项目集中解决这些问题。
RandomState
transform
Compose
本文提出了一个概念上简单且灵活通用的目标分割框架——
Mask
R-CNN
Mask
R-CNN能有效地检测图像中的目标,同时能为每个实例生成高质量的分割掩码
Mask
R-CNN训练简单,相对于Faster R-CNN,只需增加一个较小的开销,运行速度可达5 FPS,且很容易推广到其他任务中
二、模型与方法
2.1 设计思路
由于Fast/Faster R-CNN和FCN的出现,使得目标检测和语义分割的效果在短时间得到了很大改善
目标分割它需要正确检测图像中的所有目标,同时也要精确地分割每个目标
目标检测的目的是对目标进行分类,并使用边界框定位每个目标,既是语义分割,又是另一种形式的
Mask
R-CNN的模型结构
Mask
R-CNN是在Faster R-CNN的基础上添加了一个预测分割
mask
的分支,如上图所示。其中黑色部分为原来的Faster-
RCNN
,红色部分为在Faster-
RCNN
网络上的修改。将
RoI
Pooling层替换成了
RoI
Align
层;添加了并列的FCN层(
mask
层)。
此外,
Mask
R-CNN还引入FPN(图像金字塔结构)。
Mask
RCNN
沿用了Faster
RCNN
(https://blog.csdn.net/YOULANSHENGMENG/article/details/121850364)的思想,特征提取采用ResNet-FPN的架构,另外多加了一个
Mask
(用于生成物体的掩模)预测分割分支。如下图1所示。其中黑色部分为原来的Faster-
RCNN
,红色部分为在Faster-
RCNN
网络上的修改。将
RoI
Pooling 层替换成了
RoI
Align
层;添加了并列的FCN层(
mask
层)。
DCT-
Mask
是一种将掩码编码成DCT向量表示的方法。在使用DCT-
Mask
时,首先将原始掩码转换为大小为[
mask
_size,
mask
_size]的矩阵。然后,通过对该矩阵进行二维DCT编码,将掩码转换为DCT系数矩阵。最后,通过选择DCT系数矩阵中的一些特定系数,将掩码编码成DCT向量表示。
Mask
RCNN
是一种基于Faster
RCNN
的目标检测算法,它不仅可以检测物体的边界框,还可以对每个边界框内的物体进行分割。在
Mask
RCNN
中,通过添加额外的分割分支,可以生成物体的掩码。这些掩码可以用来对物体进行精确的像素级分割。