阅读笔记:Instance-aware semantic segmentation via Multi-task Network Cascades
论文阅读:Instance-aware semantic segmentation via Multi-task Network Cascades
论文信息:CVPR2016, PASCAL VOC in VGG 63.5% mAP. COCO2015 in resnet101 won first prize
整体框架:对于传统的多任务方法,都是在共享特征的基础上,每个任务同时进行各不干扰,互相独立。这篇文章是在共享特征的基础上,上一个任务依赖于下一个任务,如此形成级联式的多任务结构(Multi-task Network Cascade,MNC)。
三个任务:(1)Differentiating instances;(2)Estimating masks;(3)Categorizing objects;
使用VGG16的第13层卷积层特征作为共享特征。每个阶段包含一个loss,下一阶段的loss依赖于前一阶段loss,故三个阶段的loss都不是独立的。
任务一:differentiating instance-->regressing box-level instances ,该阶段的主要任务找出所有可能的物体框,即使用Faster RCNN中的RPN网络,使用NMS得到 top-ranked 300个box;
这一阶段的主要实现就是在共享特征的基础上附加一个3*3的卷积层用于降维以及1*1的卷积用于目标框定位和目标分类。因此在这一阶段的loss,作者直接使用的是RPN的loss,即:
任务二:estimating masks-->regressing mask-level instances,该阶段的主要任务是以共享特征和上一阶段的得到的bounding box作为输入,输出基于box的pixel-level 的mask,不过此时的mask是class-agnostic,即无法对mask进行类别区分。
这一阶段的主要实现是在task1 输出的不同大小的box上使用ROI warping Pooling产生固定大小的特征:14*14大小的feature map,在此基础上为每个box附加两个fc层:fc1(256)+fc2(m*m,28*28),这里的28*28是预先设定的mask的分辨率。因此这一阶段的task不仅是依赖于mask还依赖于box,所以这一阶段的loss,即:
任务三:categorizing objects-->categorizing instances,该阶段的主要任务是以共享特征,task1的box,task2的mask作为输入,输出每个instance的categories scores。
这一阶段的主要实现是,一方面,在ROI warping pooling 的基础上连接两个fc层:fc1(4096)+fc2(4096);另一方面对task2得到的mask 也连接两个fc层:fc1(4096)+fc2(4096);然后再对这两个通道进行concat,最后得到每个instance的得分。因此这一阶段的计算量比较大,也是导致整个MNC模型巨大的原因。这一阶段的loss,如下:
End-to-end training
整个MNC网络结构的loss function如下:
MNC主要的技术挑战就是对上面的loss function 如何可以应用链式法则进行反向传播,实现end-to-end training。在fast R-CNN论文中使用的RoI pooling 的预测框是经过预训练的,是固定的,它的反向传播只考虑F(Θ) ,但我们现在必须同时考虑Bi(Θ),而在这里得到的预测框确实在不断变化。但是,实际上task2中的框是由task1给出的,那么task2的loss就不只是依赖mask,还依赖框。这导致了无法对这部分以end to end的方式来训练,因为无法同时对这两部分求导。
为了解决上述问题,作者把ROI pooling分为了两部分:ROI warping 与 pooling。ROI warping的具体实现可以看原文。