[Paper Share - 7]Learning to Seg
导读
本文是FAIR几位大神的最新作品。文章挺有意思地提出一种部分监督学习分割的方法。简单来说就是学习一个将检测参数迁移为分割参数的函数,从而实现在分割信息不完整的数据集上训练,并且测试阶段能对训练阶段没有分割信息的类别也能预测其实例分割掩膜。论文链接
1.Introduction
实例分割一般来说都需要强监督信息,但是强监督信息不好获取,标注分割信息成本太高。但是现有很多数据集都有Boxes信息,所以作者就像,能不能用起这些boxes信息来训练实例分割呢?于是,他们想到了这样一个部分监督实例分割任务(partially supervised instance segementation):
1)给定一个数据集,其中某些类别组成的子集包含完整的实例掩膜信息(instance mask annotation),而剩余类别组成的子集只包含bounding boxes信息。
2)然后实力分割算法需要利用这个数据集训练一个模型,能对所有的类别进行分割。
为了解决这个部分监督的问题,作者提出一个基于Mask R-CNN的新的迁移学习方法。(关于Mask R-CNN,后面我会补上这一篇论文的解读。)Mask R-CNN非常合适用于解决这个问题,因为它将实例分割问题分解为两个子任务:目标检测和mask预测。所以,通过学习一个从目标检测参数到实例分割的迁移函数来解决上述问题,所以在测试阶段,实例分割的参数并不是通过训练期间学习到的,而是通过迁移函数预测得到的。
作者接下来的工作主要包括两个方面,
1.首先在COCO数据集上进行模拟实验,将COCO数据集分成两部分,一部分有分割标注,另一部分丢弃分割标注。因为COCO数据集包含完整的分割标注。所以这部分实验能很好地量化实验的效果。
2.第二部分实验,作者还用上了VG数据集,VG数据集包含大量的boxes信息,但是没有分割标注,并且很多类别是同义词,作者选择了其中出现频率最大的3000类来进行大规模的实验。由于整数据及缺少分割标注信息,所以很难量化的评估模型的效果。
下图展示了实验的一些输出。其中红色框是在训练阶段是没有分割标注的ground truth信息的,但是模型一样较好的预测出了。
2.Related Work
这部分我们就快进吧,没什么干货。快进>>>
3.Learning to Segment Every Thing
这里先提一下一些标记:C是一些我们想要训练的类别的集合,A是其中一个子集,这个子集拥有完备的分割标注,而B是剩余的一个子集,B只包含Bounding Boxes,没有分割标注信息。C=AUB。
如下图2,是文章提出的Mask* R-CNN模型。Mask* R-CNN通过迁移函数T(·),从Wdet预测其对应类别的分割参数Wseg,在训练的时候,T只需要A的mask标注,和B的boxes信息,但是在测试时,可以在AUB上进行预测。同时,Mask Head还有个互补的MLP,这个MLP的参数与类别无关。
图2
如公式1所示,对于某个类别的object detection weights,注意这里的weight和类别相关的,mask weight与其关系由函数T表示,其中θ是要学习的参数。
T但是T这个函数和其对应的参数θ却是与类别无关的,也就是无论哪个类别,都可以用这个函数来预测分割参数。T在实验中可以是一个小的全连接网络。图2中的detection weights其实包含两种类型的,一个是ROI分类的参数Wcls,另一个是Bounding Boxes的回归参数Wbox,在实验中,可以使用Wdet=Wcls或者Wdet=Wbox,当然也可以是两个的concat,Wdet=[Wcls,Wdet]。
3.2 Trainning
训练过程中,目标检测部分,使用AUB的boxes的损失;但是,训练实例分割分支和T函数时,只是考虑A的mask损失。因此文章进行了两个驯良方法:1.分两阶段训练,2端到端的训练。
Stage-wise training在分两步训练的实验中,第一阶段,作者先用AUB的数据集训练好一个Faster RCNN;第二阶段,固定CNN主体网络和目标检测分支的参数,训练实例分割分支。这个方法的好处是,我们可以一次训练好目标检测分支,然后快速的评估T函数的选择方法。但是这个训练方法机械的分割了两部分的训练,影响效果。
End-to-End joint training端到端的联合训练,这种训练方法一般能提升效果。原则上,我们可以直接对AUB的boxes损失和A的mask损失进行反向传播,但是这会导致一个矛盾,Wdet通过T函数只能接收到来自A的mask损失的梯度。而,我们希望Wdet对于A和B应该是均衡的,这样的话,在A上学习到的函数T能很好地迁移到B。因此作者做出了一些改变,在A的mask损失进行梯度反向传播时,只对参数θ进行求导,不对Wdet进行求导。这样避免A的mask损失回传到Wdet。
3.4 Fused FCN+MLP Mask Head
Mask分支,作者考虑两种配置:1,一个全卷积网络,输出时MxM的mask。2,MLP,由全连接层组成。但是作者觉得两种类型的Mask Head应该结合互补,FCN能抓住细节比如物体边界,而MLP能抓住主体。在最后实现细节上,对于K类的mask prediction是KxMxM,而MLP的输出时1xMxM,所以MLP的输出将会平铺K次。并加到每个类别上。
4.Experiments on COCO
作者想在COCO数据集上做实验,将COCO上80个类别分成20和60,其中前面20个类别正式PASCAL VOC的20个类别,另外60个不包含在VOC中,分别用voc和non-voc表示。
Baseline and oracle本文的baseline是Mask RCNN,起中mask head是一个FCN,并且这个Mask RCNN的Wseg是类别无关的,也即使不管什么类别,Wseg都是相同的。而本文还用了一个Oracle(神级模型)来做对比,这个模型用了COCO所有的mask数据集来训练,所以,基本上是本文提出的方法的上限。
4.2 Ablation Experments
Input to T 这个实验探究T的输入是什么好。从图a可以看出,显然是Wcls+Wbox一块传入T函数会获得更好的效果。然后看到,虽然本文方法在B上测试不如oracle的效果好,毕竟训练时没用到B的mask信息,但是,在A上的测试却比oracle略好,说明,本文的方法没有牺牲了强监督的效果来换取在B上的表现。
aStructure of T 这部分比较了T函数去什么形式的性能。做了两种实验,1是简单的仿射变黄,2是一个2到3层的MLP。同时作者还测试了ReLU和LeakyReLU。结果表明2层的MLP+LeakyReLU效果最佳。
bImpact of the MLP Branch 这部分比较了MLP分支的作用,可以看到MLP能提升效果。
cEffect of end-to-end training 以上a,b,c的实验都是用两阶段训练法得到的结果,然后作者对比了end-to-end的训练方法的效果。从d可以看到,只有当停止T对Wdet的梯度传播才能带来效果的提升。
d4.3 Reault of Our Full Method
然后作者将前面的发现全部集合起来,组成Mask* R-CNN(Mask R-CNN +‘tansfer + MLP’ ,T是'cls+box,2-layer,LearkyReLU')。和baseline,oracle进行了对比。可以看到Mask* RCNN超越了baseline 20%(相对的),但是oracle显然是上限。
2然后下图展示了一些结果,上一行的baseline,下一行是Mask* RCNN。
45 Large Scale Instance Segmentation
接着作者进行了大规模实验,将COCO作为A数据集,然后另外2920个类的数据从VG数据集中取出,作为B数据集,A和B的类别没有交集。训练时采用两阶段训练方法。
定性结论 可以得到一些有趣的结论:
- Mask* RCNN 学习到了一些抽象的概念,比如阴影和小路,这些在分割中很难做到的。
- 能分割出独立的树,但是遇到树林时就失败了。
- 有时会做出一些合理的分割,比如将冰箱的把手分割出来。
下展示一些结果:
5好了,今晚的论文分享到这里,下次分享Non-local Neural Networks.晚安各位。
------少侠阿朱 2017.12.13 于深圳