【极简笔记】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: wcseg=Γ(wcdet,θ) w s e g c = Γ ( w d e t c , θ )
公式中包含了与类别 c c 相关的det分支参数wcdet w d e t c 和mask分支参数 wcseg w s e g c (注意是网络参数而不是网络feature map),以及class-agnostic参数 θ θ 。利用 cA c ∈ A 的mask标注,训练得到函数 Γ Γ 之后,对于类别 cB c ∈ B ,就能够利用函数 Γ Γ 来求得带有类别语义信息的mask分支参数 wcseg w s e g c 。因为mask分支在训练时没有类别 cB c ∈ B 的mask标注,对于类别 cB c ∈ B 的instance segmentation性能会减弱,因此可利用类别相关的 wcseg w s e g c 进行一定的弥补。

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

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

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

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

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

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

你可能感兴趣的:(极简笔记)