编辑推荐: |
本文来自于csdn,本文章主要通过实验来讲解深度学习Faster
RCNN框架的实例分割任务以及RoI Align操作,希望对您的学习有所帮助。
|
|
思想
![](images/201901051.png)
基于Faster RCNN框架,在最后同分类和回归层,增加了实例分割任务【a
small FCN applied to each RoI】
将Faster RCNN中的RoI Pooling替换成RoI Align操作
最终的特征层,采用FPN(Feature Pyramid Network)进行特征提取
采用ResNet101作为基础网络
RPN中的anchor采用5 scales和3 aspect ratios
注:
实例分割
Mask RCNN在FasterRCNN最后扩展了分类和回归任务,增加了一个针对每一个RoI区域的分割任务。该任务是一个简单的FCN网络。
RoIAlign操作
因为RoIPool操作,太过于粗暴,导致特征层与原始图像上的对应关系误差太大【这是Fast/Faster
R-CNN的主要问题】,所以提出了RoIAlign操作,可以保留空间位置的精度【preserves
exact spatial locations】
该操作,非常只是修改了一点点,但是作用非常大,能够提高大概10%~50%的分割精度
解耦合
将分割任务和分类任务解耦合
RoI classification分支进行分类预测
FCN进行像素级别的多类别分类预测【分割】,其包括分割和分类两方面任务。
最终FCN输出一个K层的mask,每一层为一类,Log输出,用0.5作为阈值进行二值化,产生背景和前景的分割Mask
灵活性
框架经过非常小的改动后,可以进行human pose estimation
将人体的每一个keypoint作为一个类别进行训练和检测
时间
该算法因为在Faster RCNN上增加一个非常小的任务,计算量增加的非常小,从而可以达到5fps的速度
Mask R-CNN
Faster
R-CNN has two outputs for each caniateobject,
a class label and a bounding-box offset; to
this we add a third branch that outputs the
object mask.
Mask R-CNN is thus a natural and intuitive idea.
But the additional mask output is distinct from
the class and box outputs, requiring extraction
of much finer spatial layout of an object.
|
RoI Loss:
![](images/201901052.png)
其中:
LclsLcls为分类损失
LboxLbox为bounding-box回归损失,同Fast R-CNN
LmaskLmask为实例分割损失
输出大小为:K?m2K?m2,其中KK为类别数量,mm表示RoI Align特征图的大小
对每一个像素应用sigmoid,然后取RoI上所有像素的交叉熵的平均值作为LmaskLmask
反向传播:Loss只对ground-truth那一层进行计算和反响传播。该操作有效避免了类别竞争,也使得分割和分类解耦合【作者实验也证明了这种解耦合有一定的作用[参考Table
2b],之前的分割任务如FCN,最终都是针对每一个像素点进行softmax输出,然后计算交叉熵Loss】
只对ground-truth k层上的m×mm×m个像素计算所有点的交叉熵,并求平均
For an Roi associated with ground-truth class k, LmaskLmask
is only defined on the k-th mask(other mask outputs
do not contributed to the loss)
Mask Representation
不同于其他的RoI特征提取,最后将RoI提取成一个固定长度的特征向量vector,Mask R-CNN最终将RoI区域预测称一个m×mm×m的mask
如SPPNet最终输出的是一个固定长度的特征向量,丢失了空间信息
该操作有效的保留了空间信息,但是需要更加精确的像素对齐操作
RoIAlign操作
为了满足Mask Representation的精度要求,提出了RoIAlign操作
标准的RoIPool操作,能够将RoI提取成一个小的特征层【7x7】
将floating-number的RoI量化,离散化成小网格,然后进行max pooling操作,生成一个固定大小的特征图
在离散化过程中,连续的坐标x被对应在特征层上的位置为[x16][x16]【取整】
这种操作,使得RoI【proposal】对应特征图像上的位置发生了偏移,导致误差
While this may not impact classification, which is
robust to small translations, it has a large negative
effect on predicting pixel-accurate masks.
RoIAlign操作
将feature层与input层精确对齐
使用x16x16代替[x16][x16]
使用双线性插值计算input对应RoI bin上的四个坐标值
该操作对网络的能力提升非常大【参考Table 2c】
Network Architecture
![](images/201901053.png)
共享基础网络【特征提取】
之后对每一个RoI进行多任务预测
bounding-box recognition(cls & reg)
mask prediction
基础网络
ResNet
ResNeXt
FPN(Feature Pyramid Network)
FPN uses a top-down architecture with lateral connections
to build an in-network feature pyramid from a single-scale
input
采用ResNet+FPN作为基础网络,最终的效果最好
Implementation Detail
训练
样本生成:
正样本:RoI(IoU>0.5)
负样本:其他
Mask Loss
只计算postive roi上的loss
mask的真值ground-truth:为RoI和ground-truth的交集
参数
mini-batch为2
每张图像产生N个RoI区域,其中正负样本的比例为1:3
N=64 for C4
N=256 for FPN
学习率:0.02/120k –> 0.002
迭代次数:160k
momentum:0.9
decay:0.0001
RPN参数:
5 scales
3 aspect ratios
测试
proposal
300 for C4
1000 for FPN
在这些候选区域上进行box reg,然后进行nms操作
mask只运行在最高的100个检测框中,输出K masks【只用第k-th mask】
这点和训练不同,但是可以有效提高运行效率
将m×xm×x的mask output缩放到RoI大小,并进行二值化【0.5阈值】
实验
实验一
![](images/201901054.png)
说明:
1.Mask RCNN效果明显
2.ResNeXt-101-FPN网络的表达能力最好
![](images/201901055.png)
![](images/201901056.png)
实验二
关键改进分析
![](images/201901057.png)
说明:
Backbone Architecture
网络越深,效果越好
Multinomial vs. Independent Masks
分割任务与分类任务解耦合后,效果更好
class-Specific vs. Class-Agnostic Masks:
输出K个m×mm×m个分割mask和输出1个m×mm×m个分割mask【不区分类别信息】进行对比,发现区别类别分割后,效果更好
AP从29.7升到了30.3
RoIAlign
通过上述的图c,d可以看出,该操作能提高大概3points
RoiWarp采用双线性插值,但是没有对input和feature层坐标进行对齐,从而效果比RoIAlign差很多
Mask Branch
进行分割的时候,FCN要好于MLP
实验三
![](images/201901058.png)
目标检测Bounding Box Detection
说明:
RoIAlgin作用:
单独使用Faster R-CNN和RoIAlign操作,检测效果提升了%1mAP
说明RoIAlign对目标检测效果又一定的帮助
多任务:
分割能使Faster RCNN检测提升1-2%mAP
基础网络:
ResNeXt网络使得Faster RCNN检测提升了1%mAP
实验四
时间测试
说明:
测试
ResNet-101-FPN共享RPN和Mask R-CNN stages特征,运行时间大概在195ms【Nvidia
Tesla M40 GPU】+ 15ms【resizing the outputs to the original
resolution】
因为ResNet101-C4基础网络大概需要~400ms,因此作者部推荐使用该网络
训练
ResNet-50-FPN: COCO trainval35k–> 32h
ResNet-101-FPN: COCO trainval35k–>44h
Mask R-CNN for Human Pose Estimation
Mask R-CNN框架经过简单的修改就可以进行Human Pose Estimation
类别数量:Human Pose中的keypoints个数
将m×mm×m分割mask的label/target变成one-hot形式
target:只有一个pixel标记为前景
对m×mm×m个输出计算交叉熵,作为loss【这样可以激励网络学习只检测单个点】
输出仍然是K个m×mm×m个mask
采用ResNet-FPN作为基础网络,
然后通过一系列的3x3 512-d的卷积进行特征融合,
之后,通过解卷积deconv进行上采样到56x56【原始的是28x28】
像素越高,效果越好
训练
数据集:COCO trainval35k
randomly scales from [640, 800]
测试的时候,固定为800
迭代次数:90K
学习率:0.02/60k–>0.002/8k–>0.0002
NMS:0.5
效果
![](images/201901059.png)
![](images/2019010510.png)
说明:
相比较其他方法,该方法简单有效,速度快5fps
More importantly, we have a unified model that can
simultaneously predict boxes, segments, and keypoints
while running at 5fps.
多任务效果更好
Adding a segment branch(for the person
category) improves the APkp to 63.1。
![](images/2019010511.png)
说明:
多任务效果好
Adding the mask branch to the box-only(i.e. Faster
R-CNN) or keypoint-only versions consistently improves
these tasks。
但是增加keypoint-only稍微影响了AP【仅限该实验,不能推广到其他任务】
![](images/2019010512.png)
说明:
对于Human Pose Estimation任务,RoIAlign依然其到很大的作用
Experiments on Cityscapes
![](images/2019010513.png)
![](images/2019010514.png)
|