级联Cascade
是一种强有力的架构,在许多任务上增加了模型性能,比如Cascade RCNN,但是怎么将它融入在实例分割领域,目前还没有很好的方案。如果简单地将Cascade RCNN
和Mask RCNN
融合带来的mask AP增益有限,只有1.8%,而bbox AP有3.5%。
作者认为造成这种巨大差距的一个重要原因在于Cascade RCNN在不同阶段的mask分支之间的信息流(information flow)欠佳,在后期阶段,mask分支只能受益更精确的边界框,与信息流没有直接连接,如下图所示。
为了解决这个问题,本文针对实例分割提出了HTC(Hybrid Task Cascade
)模型,其核心思想为:在每个阶段整合级联cascade
和多任务multi-tasking
来处理来改善信息流,并利用空间上下文saptial context
进一步提高准确性。如下图所示,HTC在每个阶段,以多任务方式将bbox回归和mask预测组合在一起。 此外,为不同阶段的mask分支间构建直接联系:编码每个阶段的mask特征,并送到下一个阶段。
对于目标检测而言,上下文信息对于物体的定位和分类提供了非常重要的线索,因此HTC还额外采用了一个全卷积分支执行分割。此分支不仅对来自前景实例的上下文信息进行编码,还对来自背景区域的信息进行编码,进一步提升边界框和实例掩码的预测精度。
最后,在结合更好的backbone和一些trick之后,作者依靠HTC获得2018年的COCO目标检测任务的冠军。
上图展示了如何由Cascade Mask R-CNN演变到HTC网络:a)原生的Mask R-CNN;b)抛弃平行结构,而是交替地进行bbox回归和mask预测;c)在mask分支之间构造联系【前一个阶段的mask特征将送入后一个阶段】增强信息流;d)添加额外的语义分割分支并将其与bbox和mask分支融合,捕获更多的上下文信息。接下来将更加详细地介绍每个模块的演进:
图a):直接融合出来的Cascade Mask R-CNN
可以直接由以下公式表示,每个阶段并行地进行box和mask预测,用前一阶段的box用作下一阶段的候选框。
其中, t t t表示第t个阶段, P P P表示池化操作(RoI Align或者ROI pooling), x t b o x x^{box}_t xtbox表示第t个阶段经过池化操作提取到的box分支特征, B t B_t Bt表示第t个阶段的bbox分支, r t r_t rt表示第t个阶段box分支的预测结果; x t m a s k x^{mask}_t xtmask表示第t个阶段经过池化操作提取到的mask分支特征, M t M_t Mt表示第t个阶段的mask分支, m t m_t mt表示第t阶段box分支的预测结果。
图b):a)的缺点就在于box和mask两条分支都只接受前一阶段的box输出,在同一阶段内没有进行直接相互作用。因此引入交替结构
,由下式表示,每个阶段先进行box预测,再根据box预测结果进行mask分割。
图c):b)仍然没有在不同阶段的mask分支间引入信息流动。作者先分析了Cascade RCNN成功的一个重要因素,就是在于每个阶段的box分支的输入特征是由前一阶段的box输出和backbone输出共同决定的,根据这种设计理念,在mask分支间引入信息流,公式如下所示。
其中, m t − 1 − m^{-}_{t-1} mt−1−表示 M t − 1 M_{t-1} Mt−1的中层特征, F F F表示融合当前阶段和前一阶段输出的函数。
具体实现结构如下所示, m t − 1 − m^{-}_{t-1} mt−1−为前一阶段的mask分支 M t M_t Mt中4层convlayer后,deconv layer前的输出,将其经过一个1x1 conv
后与 x t m a s k x^{mask}_t xtmask相结合【像素加法】,进行4层conv + deconv进行分割预测;同样,当前阶段的 m t − m^{-}_{t} mt−也要类似地继续用于下一阶段。
通过这种设计,相邻的mask分支产生了直接的相互作用,不同阶段的mask特征不再孤立,都会受到loss监督回传。
图d):级联训练强相关的任务能够提升特征表达,并且给最终的任务带来收益。因此,作者额外采用了一条全卷积分支进行语义分割。利用语义分割分支的特征可以作为box和mask分支中的强互补特征,有助于进一步区分前背景。加了这条分支后,在box和mask分支中不仅只在backbone输出的特征上使用池化操作,还对语义分割分支的特征进行相同的池化操作,将其结合【像素加】作为box和mask分支的输入特征。公式如下所示:
S ( x ) S(x) S(x)表示语义分割分支特征
语义分割分支的具体结构实现如下,首先结合FPN中不同层级的特征,将其进行1x1 conv + 上采样/下采样
到相同分辨率后进行结合【像素加】。然后经过4层卷积操作,然后使用一个简单的1x1 conv
进行语义分割,同时使用一个1x1 conv
作为上式提到的语义分割特征。
损失函数:HTC直接进行端到端训练,其中box分支为所有ROI
进行目标分类和检测框回归,mask分支为每个正类ROI
预测像素级掩码,语义分割分支预测整张图像的语义分割信息。整体损失如下所示:
其中 L b b o x t L^{t}_{bbox} Lbboxt表示第t个阶段的box分支损失,主要包括分类loss和回归loss,这一部分和cascade rcnn保持一致; L m a s k t L^{t}_{mask} Lmaskt表示第t个阶段的mask分支损失,主要为二元交叉熵损失;最后的 L s e g L_{seg} Lseg为语义分割分支损失,主要为交叉熵损失。α和β为平衡参数,其中α在实验中取值为[1,0.5,0.25],β为1。
更多实验和细节请参考原文
下图展示了HTC和当前SOTA方法的对比,可以看到HTC能够显著提升性能
下图展示了HTC不同模块带来的增益,其中交替预测提升了0.2,mask信息流和semantic信息融合分别提升了0.6个点。
下表展示了作者如何在COCO比赛中逐步提升自身方案的准确率:
作者还对当时检测和分割的常用模块进行了性能报告,包括ASPP,PAFPN,GCN,PrRoIPool和softNMS
HTC是一篇针对实例分割提出来的基于Cascade RCNN
改进的工作,原始的Cascade RCNN
主要针对目标检测任务设计,因此对于mask AP
的增益有限。HTC在三个方面上做了改进,一个是取消并行地预测box和mask,改为先检测出box再根据修正后的box去进行mask预测;其次是为不同阶段的mask分支构造信息流;最后是添加额外的语义分割分支,提供额外的互补特征。
并且本文还提供了一些提点的trick以及对比实验,可以给类似的比赛和工业应用提供思路。
不过,我在某个实例分割比赛中尝试过HTC模型,但其效果比Mask RCNN
要差,目前还不清楚具体原因。不过时间和资源有限,没有怎么调参。