【极简笔记】Learning to Segment Every Thing

【极简笔记】Learning to Segment Every Thing

Learning to Segment Every Thing

现有训练集A,其中的类别都有对应的mask标注(bbox标注也就有了)。又有训练集B,其中的类别只有bounding box标注。文章的核心贡献是提出了一种迁移学习的方法,利用weight transfer function,在Mask-RCNN架构基础上训练一个模型,使得其能够预测数据集B中类别的mask。

weight transfer function:wsegc=Γ(wdetc,θ)
公式中包含了与类别c相关的det分支参数wdetc和mask分支参数wsegc(注意是网络参数而不是网络feature map),以及class-agnostic参数θ。利用cA的mask标注,训练得到函数Γ之后,对于类别cB,就能够利用函数Γ来求得带有类别语义信息的mask分支参数wsegc。因为mask分支在训练时没有类别cB的mask标注,对于类别cB的instance segmentation性能会减弱,因此可利用类别相关的wsegc进行一定的弥补。

【极简笔记】Learning to Segment Every Thing
上图是网络架构,取名Mask^X-RCNN,其中的weight transfer function(记作Γ)可以有多种实现方法,作者通过实验发现,拿det分支的cls和box的参数作为输入,2层全连接,LeakyReLU做**函数的weight transfer function结构效果最好(实验结果见表a、b)。多说一句,表a最后两行分别是性能的下界和上界。下界是所有类别都一样的wseg,即没有weight transfer function,而得到的模型性能;上界是AB所有类别都有mask标注进行训练得到的模型性能。

从mask features到mask predictions有两条线,一条通过MLP(多层感知机)得到1xMxM大小的class-agnostic结果,一条通过weight transfer function计算得到类别相关的wsegc,再按照FCN计算得到KxMxM大小的class-specific结果。(det分支过来的是class-specific因为检测已经包含了分类的信息,mask过来的是无类别标注的instance segmentation信息,因此是class-agnostic)作者实验分析这俩是互补的,把前者平铺K次然后与后者相加得到效果更好(实验结果见表c)。

该网络有两种训练方法:
stage-wise training,即拿AB训练Faster-RCNN部分,之后这部分参数固定,拿A训练mask分支和weight transfer function参数θ。因为Faster-RCNN部分在实验的时候可以复用,所以训练过程较快,但不是最优;
另一种方法end-to-end joint training效果更好,拿AB一起训det和mask分支。但是为了防止wdetc因为接收A中类别从mask分支来的梯度信息而导致A和B的类别冲突,必须让mask分支来的梯度不更新wdetc,只更新θ(实验结果见表d)。
【极简笔记】Learning to Segment Every Thing

表中作者尝试了COCO上两种数据集划分方式:1.随机划分;2.把20类VOC中也有的类别记作voc,另外60类记non-voc。这俩都行。同时作者分析认为,提高Γ的性能比增加每类的训练样本个数会更高效
【极简笔记】Learning to Segment Every Thing

对于实验结果作者发现三点:
1. 模型已学到检测抽象概念例如阴影和道路,但是很难分割
2. 对于独立的物体分割更好,比如能分割单棵树但是对于像森林的树分割不好
3. 对于物体的整体和物体的各个小部分分割效果都很好,例如冰箱和冰箱把手
【极简笔记】Learning to Segment Every Thing

从实验结果看离完美还有很大差距,但该论文为后续研究指明了一个十分具有潜力的方向。