这是专栏《图像分割模型》的第11篇文章。在这里,我们将共同探索解决分割问题的主流网络结构和设计思想。

本文介绍了用于实例分割任务的模型结构——DeepMask。

作者 | 孙叔桥

编辑 | 言有三

本期论文

《Learning to Segment Object Candidates》

1 实例分割

区别于本系列之前介绍的语义分割任务,实例分割任务有其自己的任务需求与度量矩阵。简单来讲,语义分割只分割视野内目标的类型,而实例分割则不仅分割类型,同时还需要分割同类型的目标是否为同一个实例。

举个例子,下面图片中所有的目标都是“猫”,但只有蓝色的那只是你家的,其他都是借来拍照凑数的。那么,拍照结束回家时,只能分辨眼前的目标是否是“猫”已经不够了,还需要能够知道哪只是自己的。否则,别家的主人可能会请你喝茶。



实例分割常见做法 实例分割模型_图像分割

由此可以看出,在某些应用场景下,我们需要对视野内相同实例进行区别标注,比如cat1,cat2,等。这时就可以用到实例分割的网络,比如本文中会介绍的DeepMask。

2 DeepMask

DeepMask网络其实实现了三个任务:前背景分割、前景语义分割与前景实例分割。这三个任务是基于同一个网络结构进行的,只是各自有单独的分支。下图是DeepMask的网络模型概况:



实例分割常见做法 实例分割模型_图像分割_02

与大部分分割网络相同,DeepMask同样应用了VGG模型作为特征提取的主要模块,在训练中也用了ImageNet下训练得到的VGG参数初始化这一部分模型。

随后,DeepMask用两条分支来分别实现分割任务和前景目标识别任务。下面我们来具体看一下这两个分支:

(1) 分割部分

分割部分要实现的是对图块内场景的类别的识别,由一个1x1卷积层后接分类层实现。这里的分类是稠密的,也就是对每一个像素都有其对应的标注。

这里需要注意的是,为了实现实例分割,分割部分的分支必须能够看到输入图块的所有信息,从而在多个目标同时存在时判断是否属于同一个我们需要的目标。比如下图中有多头大象:



实例分割常见做法 实例分割模型_语义分割和实例分割_03

但是我们只希望标注出其中的一头:



实例分割常见做法 实例分割模型_深度学习_04

(2) 前景Score部分

网络的第二个分支要完成的任务是,判断一个图块是否满足下面两个要求:

  • 目标位于图块的正中心附近
  • 目标完整存在于图块中(在某一尺度范围内)

这一部分由一个2x2的最大池化层,后接两个全连接层组成。最终的输出是一个目标score,用来显示该目标是否满足上面的要求。

3 训练细节

DeepMask的训练过程对于分割任务是很有借鉴意义的。这里,网络的两个分支共同训练,损失函数如下:



实例分割常见做法 实例分割模型_图像分割_05

除了基本的分割要求,DeepMask还做了一个限定,使得在测试推理阶段,网络会尝试对所有的图块都进行分割,即使该图块中不存在目标。为了实现这个目的,其采用的策略是,对于不存在目标的图块,只训练分割分支。

下图是DeepMask的训练输入,包括图块(左图)、是否是目标(右图)和目标类型(颜色框)。



实例分割常见做法 实例分割模型_深度学习_06

网络与VGG-A相同,接收的RGB输入尺寸为3x224x224,生成的特征尺寸为512x14x14。由于网络结构导致输出尺寸小于原始尺寸(分割分支为1/16,目标分支为1/32),因此需要应用双线性插值将结果恢复成原始尺寸。这么做的原因是考虑到网络的体量和计算量。这个设定下,DeepMask约包含75M的参数。

4 实验结果

DeepMask在MS COCO数据集下进行了测试,下图是测试结果:



实例分割常见做法 实例分割模型_图像分割_07

这里选择的学习率为0.001,batch size为32,动量0.9,权重下降0.00005,训练需要5天左右。

下表是分割结果比较:



实例分割常见做法 实例分割模型_深度学习_08