前言
我们在上篇聊了FCOS这个方法,指出了anchor-free方法的可能性与有效性,今天聊的这个方法算是对FCOS的一个补丁。这个方法是为了解决类似SSD、FCOS、RetinaNet这些用点特征进行检测的模型对特征表示不完备而导致位置信息缺失的问题而提出的。原论文题目为《BorderDet: Border Feature for Dense Object Detection》。
思路
我们之前在研究目标检测时,都没有提过“特征表示”这个问题,也就是说,怎么样选特征、怎么样增强特征能让特征发挥最大的作用?
这篇文章给了一个思路,我们不仅仅选择单点作为特征进行检测,而是加上其他部分的特征,对原来提取出的单点特征进行增强。那么选择哪些特征呢,本文首先做了实验:
如上图(a)所示,很多one-stage方法如SSD、RetinaNet、FCOS都采用这种特征表示方式,即用单个点的特征来表达这个目标的特征,而R-CNN类的two-stage往往都采用(b)所示方式去进行特征表达,因此很多two-stage方法由于特征提取的充分,往往比one-stage方法精度要好,但是这种方法的开销太大了。那么我们很自然的想到,既然区域内特征提出的充分会导致精度变高,那么我们可以寻找一种折中的方法,一方面加上一些区域内的其他特征,另一方面又让这些特征不那么多。
由于很多one-stage方法往往定位精度不高,因而一个很自然的想法是提取边框特征加进去,来改善定位精度进而提高整体精度。在上面的表格中,我们也可以看出,加入border边框特征后,AP提高了一个点,因此加入边框特征作特征增强是可行的。但是边框特征所包含的点还是很多,需要4n+1个点来对特征进行特征的表达。
因此我们想到对边框进行抽样,也就是取每条边上的一部分点来代表这条边,最自然的想法是取中点。我们把四个中点作为特征取作增强,发现AP的提升竟然比采用border还要好。这简直是一箭双雕,即减少了增加的特征,又提升了效果。
这样我们又不禁思考,我们这只是简单的选择了中点作为边框的代表,对于边框来说,是不是还有其他更好的可以描述其特征的点?就像下面这个飞机,在这个目标边框中,肯定是我们标出的这几个落在框上且带有尖端等形状的特殊点更能反应该物体的边框特征。
于是我们的问题就转换为了如何找到这几个边框上的特殊点,并将其作为特征增强到原有特征上?这也就是我们的BorderDet所做的工作了。
BorderAlign与BorderDet
受R-FCN的启发,BorderDet以(4+1)C个通道的边界敏感特征图作为输入,特征图的4C个通道分别对应4条边界(上、下、左、右),另外的C个通道对应于原本的单点特征。然后每个边界被均匀地分为N个点,经最大池化进行聚合。BorderAlign能够自适应地利用边界极值点中具有代表性的边界特征。其大体架构如下图所示,图中π表示相乘,δ表示两个边界框位置的一个结合。:
首先采用正常的单阶目标检测器(选择FCOS作为baseline)来生成分类分数和边界框位置的粗糙预测。其中上面的分支是分类分支,下面的是回归分支。
然后边界对齐模块BAM根据上面BorderAlign获得的边界特征对粗糙预测进行微调。
BorderAlign采用的基于通道的最大池化机制,四个边界分别在输入特征图的C个通道内进行最大池化。假设输入的特征图的顺序为(单个点、左边界、上边界、右边界、下边界),则输出的特征图F可以表示为:
下图是作者对边界敏感特征图各自C个通道上的最大值做了可视化。可以看到(4+1)C个通道的特征图会被引导激活至目标对应位置。比如第一个C个通道会在整个目标上显示强烈的响应。第二个C个通道会在左边界上显示强烈的响应。这些对边界敏感的特征图会更有利于边界特征的提取。
对BorderAlign,一言以蔽之,就是:
首先生成通道数为5C的边界敏感特征图,对应4个方向的边界特征和单点特征,最后每条边只会选出一个采样点作为输出。
而对BorderDet,可以概括为:
将FCOS作为baseline。输入特征金字塔预测出粗糙的分类分数和边界框位置,然后将粗边界框位置和BorderAlign输出的特征图输入到BAM生成包含显式边界信息的特征图,并形成最终的预测。
损失函数
BorderDet的损失函数长这样:
第一项为粗糙分类损失,就是focal loss,超参和FCOS完全一致;第二项为粗糙回归损失,采用了IOU loss;后两项是对分类和回归的精修。
总结
这次主要是把目光放在了目标检测的特征表示与特征增强上,这篇文章通过提出一种非常简单且通用BorderAlign操作,显式的提取物体边界极限点的特征,而且即插即用、高效且不会引入很多冗余的背景信息,解决了很多目标检测方法特征表示不充分的问题。