Mask RCNN笔记
Posted 贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mask RCNN笔记相关的知识,希望对你有一定的参考价值。
Mask RCNN
一、核心要点
(1)RoIAlign
mask rcnn的关键 一是RoIAlign,是将RoIPooling的插值方式,从最近邻插值(INTER_NEAREST)方式变为双线性插值。
这里复习一下关于RoI,RoIPooling的知识
RoI是Region of Interests 特征图上感兴趣的区域(“框”)
RoIPooling的过程是将一个个大小不同的box框,都映射成固定大小(w*h)的矩形框
具体操作是:先把RoI中的坐标映射到feature map上,得到feature map上的坐标后,使用Pooling得到输出,在Pooling过程中需要计算Pooling后的结果对应到feature map上所占的范围,然后在那个范围中进行取max或average操作。使用RoIPooling会在RoI和extracted features之间对应位置产生偏移(introduce misalignments)。
所以使用RoIAlign 来解决这个问题。
论文中还和RoIWarp(J. Dai, K. He, and J. Sun. Instance-aware semantic segmentation via multi-task network cascades. In CVPR, 2016. 2, 3,4, 5, 6 )进行了比较,实验结果表明RoIAlign的效果要好于 RoIWarp。
(2)实例分割同检测并行进行
尝试了两种不同的faster rcnn的结构,ResNet C4和FPN结构。
从图中可以看到,ResNet C4共享RoI层,而FPN是两个任务分开做RoI。
mask Loss 只定义在了正例的RoIs上。
在该文章中RPN和 mask分支,训练时,不共享特征;对于前边的特征提取,RPN和mask共享基础网络结构。
(3)使用FCN对RoI进行实例分割
使用FCN对RoI生成的每一个mask进行pixel2pixel的预测。mask编码了输入目标的空间分布。
(4)类间无竞争的Lmask
对于每个RoI,其loss定义为L=Lcls +Lbox + Lmask
Lcls为分类损失,Lbox为bounding box回归,Lmask为实例分割损失
生成k个m*m的mask,Lmask只定义在 k-th mask上对于一个具体为k类的gt,其他mask对loss没有贡献,这样类间就没有竞争。
对每一个像素使用sigmod,然后取RoI上所有像素的交叉熵的平均值,作为Lmask,
反向传播的时候,Loss只对gt那一类进行计算和反向传播,有效的避免了类别竞争,也使得分割和分类解耦(之前的FCN,是针对每一个像素进行softmax输出,然后计算交叉熵)
实验
实验一
Instance Segmentation
- 说明 Mask RCNN效果好, ResNeXt-FPN网络的表达能力最好
实验二 剥离实验分析
表二(a) Backbone Architecture实验说明,ResNeXt-101-FPN的效果要最好
表二(b)说明计算loss时,使用sigmod要好于FCN的softmax
表二(c、d)说明RoIAlign的效果要好于RoIPool和RoIWarp
表二(e)说用使用FCN进行分割的效果要好于MLP(多层感知机)
实验三 目标检测
实验四 关键点检测
实验五 cityscapes 上的效果
以上是关于Mask RCNN笔记的主要内容,如果未能解决你的问题,请参考以下文章
mask rcnn onnxruntime c++ 学习笔记
「深度学习一遍过」必修27:基于Mask-RCNN的人体姿态估计的设计与实现
「深度学习一遍过」必修27:基于Mask-RCNN的人体姿态估计的设计与实现
「深度学习一遍过」必修27:基于Mask-RCNN的人体姿态估计的设计与实现
《RefineMask:Towards High-Quality Instance Segmentation with Fine-Grained Features》论文笔记