图像分割看这个就够了
1 实例分割
区别于本系列之前介绍的语义分割任务,实例分割任务有其自己的任务需求与度量矩阵。简单来讲,语义分割只分割视野内目标的类型,而实例分割则不仅分割类型,同时还需要分割同类型的目标是否为同一个实例。
举个例子,下面图片中所有的目标都是“猫”,但只有蓝色的那只是你家的,其他都是借来拍照凑数的。那么,拍照结束回家时,只能分辨眼前的目标是否是“猫”已经不够了,还需要能够知道哪只是自己的。否则,别家的主人可能会请你喝茶。
由此可以看出,在某些应用场景下,我们需要对视野内相同实例进行区别标注,比如cat1,cat2,等。这时就可以用到实例分割的网络,比如本文中会介绍的DeepMask。
2 DeepMask
DeepMask网络其实实现了三个任务:前背景分割、前景语义分割与前景实例分割。这三个任务是基于同一个网络结构进行的,只是各自有单独的分支。下图是DeepMask的网络模型概况:
与大部分分割网络相同,DeepMask同样应用了VGG模型作为特征提取的主要模块,在训练中也用了ImageNet下训练得到的VGG参数初始化这一部分模型。
随后,DeepMask用两条分支来分别实现分割任务和前景目标识别任务。下面我们来具体看一下这两个分支:
(1) 分割部分
分割部分要实现的是对图块内场景的类别的识别,由一个1x1卷积层后接分类层实现。这里的分类是稠密的,也就是对每一个像素都有其对应的标注。
这里需要注意的是,为了实现实例分割,分割部分的分支必须能够看到输入图块的所有信息,从而在多个目标同时存在时判断是否属于同一个我们需要的目标。比如下图中有多头大象:
但是我们只希望标注出其中的一头:
(2) 前景Score部分
网络的第二个分支要完成的任务是,判断一个图块是否满足下面两个要求:
- 目标位于图块的正中心附近
- 目标完整存在于图块中(在某一尺度范围内)
这一部分由一个2x2的最大池化层,后接两个全连接层组成。最终的输出是一个目标score,用来显示该目标是否满足上面的要求。
3 训练细节
DeepMask的训练过程对于分割任务是很有借鉴意义的。这里,网络的两个分支共同训练,损失函数如下:
除了基本的分割要求,DeepMask还做了一个限定,使得在测试推理阶段,网络会尝试对所有的图块都进行分割,即使该图块中不存在目标。为了实现这个目的,其采用的策略是,对于不存在目标的图块,只训练分割分支。
下图是DeepMask的训练输入,包括图块(左图)、是否是目标(右图)和目标类型(颜色框)。
网络与VGG-A相同,接收的RGB输入尺寸为3x224x224,生成的特征尺寸为512x14x14。由于网络结构导致输出尺寸小于原始尺寸(分割分支为1/16,目标分支为1/32),因此需要应用双线性插值将结果恢复成原始尺寸。这么做的原因是考虑到网络的体量和计算量。这个设定下,DeepMask约包含75M的参数。
4 实验结果
DeepMask在MS COCO数据集下进行了测试,下图是测试结果:
这里选择的学习率为0.001,batch size为32,动量0.9,权重下降0.00005,训练需要5天左右。
下表是分割结果比较:
本专栏文章:
第一期:【图像分割模型】从FCN说起
第五期:【图像分割模型】以RNN形式做CRF后处理—CRFasRNN
第七期:【图像分割模型】全局特征与局部特征的交响曲—ParseNet
第八期:【图像分割模型】多分辨率特征融合—RefineNet
第十期:【图像分割模型】BRNN下的RGB-D分割—LSTM-CF
第十二期:【图像分割模型】全景分割是什么?