作者:陈恺
论文:https://arxiv.org/abs/1901.07518
github: https://github.com/open-mmlab/mmdetection
陈恺知乎介绍:https://zhuanlan.zhihu.com/p/57629509
HTC(Hybrid Task Cascade)是基于Mask R-CNN和Casecade R-CNN、针对Object Detection和Instance Segmentation任务而设计的一种多阶段模型,并且该模型在COCO 2018 Challenge Object Detection Task中获得第一名。
-
研究背景:
Mask R-CNN通过为Faster R-CNN接入并联的mask分支,在目标检测和实例分割任务中都获得了很好的成绩;Cascade R-CNN则通过对Faster R-CNN引入级联结构而带来了检测指标的进一步提升。那么最朴素的思想是,若直接将Cascade思想应用在Mask R-CNN中则理应会带来进一步的提升。
事实确实如此,而作者并不满足于此,而是针对该结构的缺陷而一步步做改进(imporve the information flow & leverage spatial context),最终得到的便是HTC模型。 -
模型定位:
经典的目标检测器可以分为单阶段(single-stage,如YOLO、SSD、RetinaNet)和双阶段(two-stage,如Faster R-CNN、R-FCN、Mask R-CNN、Libra R-CNN),不过最近多阶段检测器也逐渐盛行(multi-stage,如Multi-region CNN、CRAFT、IoU-Net、CC-Net、Cascade R-CNN)。
对于实例分割任务,由于其与目标检测任务、语义分割任务息息相关,所以主流的实例分割方法可大致分为“基于检测的”(detection-based)和“基于分割的”(segmentation-based)。
基于以上的分类方法,我认为HTC可以定义为“Multi-stage and detection&segmentation-based Model for Intance Segmentation”。multi-stage是因为HTC借鉴了Cascade R-CNN的三阶段结构,detection-based是因为HTC中mask分支基于bbox分支的输出(而非Mask R-CNN中的并联结构),segmentation-based是因为HTC中引入了语义分割分支从而更好地获得前景信息。 -
HTC演进概述:
Figure 1(a~d)体现了HTC的演进过程,可以概括为:
(a)Cascade R-CNN和Mask R-CNN的简单结合;
(b)将box分支由并联改为串联(即在每个stage里先执行box分支,将回归过的 框再交由mask分支来预测mask);
(c)为Mask分支之间也引入信息流(类似Cascade R-CNN中Box分支间的信息 流);
(d)通过引入语义分割分支S来提供空间上下文信息(spatial context),从而帮助 模型区分前景和背景; -
HTC演进详述:
本部分介绍每个演进的细节,请结合上文中的Figure 1进行理解。另外,下文为了更清晰地描述会涉及模型的状态转移方程(原文的描述是“the pipeline is formulated as …”),这里先介绍方程中关键变量和函数的意义:
(a)Cascade Mask R-CNN
状态转移方程:
本结构就是直接借鉴Cascade R-CNN的方式,将相邻阶段的Mask R-CNN通过box分支进行连接,这可以为box AP带来显著提升,相较而言mask AP提升较小。作者正是基于此问题而设计了(b)和(c)中的演进结构。
(b)Interleaved execution
状态转移方程:
从方程上看,t阶段的mask预测不再基于rt-1而改为了rt,即在tth-stage时先执行box分支得到box预测结果rt, 并将rt经过pool结构后再作为mask分支的输入。这其实是将Mask R-CNN中的并联分支结构改为了串联分支结构(原文的描述是“interleaves the box and mask branches”),从而为mask分支提供更准确的ROI信息。
我的看法:这里将Mask R-CNN引以为傲的并联结构抛弃了,不过这种串联结构与Mask R-CNN中并联结构“可以将分割任务和类别预测任务解耦”的功能并不矛盾,因为串联结构中mask分支仍然只负责做分割而将分类任务交给box分支。不过,从效果上看,Interleaved execution为Mask R-CNN和Cascade Mask R-CNN的mask AP带来的提升效果很有限(35.1→35.6,36.5→36.7)。
(c)Mask Information flow
状态转移方程:
其中:
(gt指的是1×1 conv,为的是将mt-1-与xtmask进行对齐;“+”是element-wise sum)
这里才是HTC的重头戏,类比于Cascade R-CNN中box的信息流,作者为mask分支间也引入了信息流。从状态转移方程中可以看到,tth-stage中的mask预测不再仅基于mask feature(xtmask),而增加了新特征mt-1-,这里的指的mt-1-是t-1th-stage中mask分支的中间特征(见Figure 2中的红色部分,即mask分支中进行反卷积前的特征)
这种处理使得不同stage的mask features不再孤立而可以进行信息的传递,并且在训练时通过反向传播使得所有mask特征都得到监督。这种处理为mask AP带来了明显的提升(36.7→37.4)。
(d)Hybrid Task Cascade
状态转移方程:
(这里的S指的是语义分割分支)
Figure 1中对这个部分画的并不完整,用状态转移方程更好理解些。所谓的语义分割分支S,其实就是基于FPN输出的feature map进行全卷积(fully convolution)来提取语义特征。语义特征如同原FPN特征,作为每个stage中pool模块的输入特征,从而提取box特征和mask特征。(语义分割分支见Figure 3)
最终,语义分割分支为模型的box AP和mask AP都带来了明显的提升(42.5→43.2,37.4→38.0)。
我的看法:S分支的引入为模型带来了更丰富的空间信息,从而对检测和分割任务都有帮助。作者为了追求简单,S分支是建立在原模型FPN(backbone)之上的,训练也是和原模型同一训练。若更精心地设计更复杂的语义分支结构,理应可以带来更显著的提升(作为代价,可能需要分阶段训练、以及产生更高的计算负担等)。 -
实验结果
Table 1:HTC与其他SOTA的对比
Table 2:HTC演进过程
Table 3:Interleaved execution消融实验
-
总结
HTC是一种高性能的检测和实例分割模型,整体结构基于Mask R-CNN和Cascade R-CNN并进行改进。整个演进过程思路比较清晰,每次改进都有很强的针对性,可以说作者是在Cascade Mask R-CNN的多个方面进行了思考。
个人觉得,文章读下来并没有Mask R-CNN和Cascade R-CNN的那种惊艳感,倒是觉得是很朴素的优化。我认为值得借鉴的是,这种一步步对模型针对性演进的思路,以及在设计细节上的把握。(另外,作者也列出了他们在竞赛中对HTC进行改进trick的尝试,良心买卖!详见原文Section 4.5和4.6)