【图像分割模型】实例分割模型—DeepMask
这是专栏《图像分割模型》的第11篇文章。在这里,我们将共同探索解决分割问题的主流网络结构和设计思想。
本文介绍了用于实例分割任务的模型结构——DeepMask。
作者 | 孙叔桥
编辑 | 言有三
本期论文
《Learning to Segment Object Candidates》
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天左右。
下表是分割结果比较:
欢迎大家加入图像分割星球
总结
本期我们一起了解了用于实例分割任务的DeepMask。然而,除了语义分割与实例分割,分割任务中还有一个“新来的”——全景分割。那么全景分割与它们有何不同,又该如何实现呢?我们下回见!
本周直播(点击图片跳转)
今日网络结构
有三AI生态