Single-Shot Object Detection with Enriched Semantics 论文笔记
前言
在SSD中,小目标由较浅的层来检测,大目标由较深的层来检测。SSD虽然能够检测不同尺度的目标,但由于浅层特征只能捕获一些基础的视觉模式,语义信息不充足,因此在检测小目标时的性能不是太好;而浅层特征的不理想也会因此影响高级特征的检测性能。
为了解决上述问题,本文设计了一种新的检测网络,称为DES(Detection with Enriched Semantics) ,它主要包含两个分支:
- 检测分支 :就是目标检测网络中经典的检测器,以VGG16作为backbone,在不同层的特征图上进行检测;
- 分割分支 :主要用于增强低级特征的语义信息 。它以低级特征作为输入,通过bbox-level segmentation gt作为监督来学习语义分割的信息,然后利用该分支中的语义特征来增强低级特征。下图说明了分割分支进行语义增强的过程。A是输入图像,B是原始低级特征,C是分割分支中的语义特征,D是增强后的低级特征。B被C激活(增强)之后得到D,D能够同时捕获目标的基础视觉模式和语义信息。这可以看作是attention过程。

除此之外,本文还提出全局激活模块(global activation module) ,它主要用于增强高级特征 。它主要由几个全局激活块(global activation block)组成,全局激活块能够以一种自监督的方式学习特征通道与目标类别之间的关系,从而增强高级特征的语义信息。
网络结构
DES的整体结构如下图所示:

- 检测分支 :如图的上半部分,采用SSD作为检测分支;
- 分割分支 :如图的左下部分,分割分支被添加到第一个预测层conv4conv4_33中,采用bbox-level segmentation label对分割任务进行监督。图中黑色的箭头是输入流,即以conv4conv4 _33作为输入,然后生成经过增强的低级特征conv4conv4 _3′3^{'},替代原始特征图进行后续的检测,也就是图中的红色箭头,表示输出流。
- 全局激活模块 :如图的右下部分,由于高级特征的分辨率较低,因此很难在它们上面进行分割任务,全局激活模块就是为了增强高级特征的语义信息。
1. 低级特征的语义增强
低级特征的语义增强是通过分割分支实现的,这里的语义分割采用的是弱监督的形式,即不再是pixel-level annotation,而是bbox-level annotation,使用bbox-level segmentation gt作为监督。
设X∈RC×H×WX \in \Bbb R^{C \times H \times W}是低级特征图conv4conv4 _33,G∈{0,1,2,...,N}H×WG \in \lbrace 0,1,2,...,N \rbrace ^{H \times W}是segmentation gt,那么预测的分割结果YY就为:

YY满足:

通过以上两个式子可以得到中间结果g(X)∈RC′×H×Wg(X)\in \Bbb R{C{'} \times H \times W},它可以用于生成语义特征图ZZ:

这个ZZ用于激活原始低级特征图XX:X′=X⨀ZX^{'}=X \bigodot Z,X′X^{'}就是增强后的低级特征图,它会取代检测分支中的XX进行后续的检测。
分割分支的处理过程如下图所示:

从中间特征图g(X)g(X)开始,出现两条分路:
- 第一条FF路径用于生成分割预测YY,它采用1×1×(N+1)1 \times 1 \times (N+1)的卷积层,后跟softmax层;
- 第二条HH路径用于生成语义特征图ZZ,采用1×11 \times 1的卷积,通道数与XX相同,生成的ZZ以element-wise相乘对XX进行激活。
然后说一下分割模块中gt的生成 。如果某个像素点GhwG_{hw}位于某bbox内,就将该bbox的标签分配给GhwG_{hw};如果GhwG_{hw}位于多个bbox内,哪个bbox最小,就把该bbox的标签分配给GhwG_{hw};如果GhwG_{hw}没有位于任何bbox内,就认为它是背景。这样可以保证GG中的每个像素只会被分配一个标签。

如上图所示,如果某个像素点同时落入person和horse的bbox中,那么该像素点会被分配person的标签
2. 高级特征的语义增强
全局激活模块主要包含三个阶段的操作:
空间池化:给定输入X∈RC×H×WX \in \Bbb R^{C \times H \times W},空间池化操作能够得到ZZ,其维度是CC:

channel-wise learning:生成激活图(activation map),其中W2∈RC×C′,W1∈RC′×CW_2 \in \Bbb R^{C \times C^{'}},W_1 \in \Bbb R{C{'} \times C},默认C′=14CC^{'}=\frac{1}{4}C:

broadcasted multiplying:用SS和XX相乘得到X′X{'},Xihw′=Xihw⋅SiX{'}{ihw}=X{ihw} \cdot S_i,最终X′X^{'}会替换检测分支中的XX以进行后续的检测。
3. 多任务训练
在训练时,分割任务使用的是交叉熵损失,原始的目标检测损失为Ldet(I,B)L_{det}(I,B),将这两个结合起来,可以得到新的损失函数为:

最终需要优化的目标函数为:

结论
本文是对SSD的改进,分割分支采用弱监督语义分割来为浅层特征提供丰富的语义信息,全局激活模块用于为高级特征提供全局上下文信息,提高高级特征的检测能力。
