一、背景:
目标检测存在的一个比较重要的问题是目标尺度的变化。针对这个问题当前存在的解决方案主要包括两种:图像金字塔和特征金字塔。
特征金字塔是当前深度学习方法采用的主流做法,但是目前的做法还存在一些问题:利用经验启发式的方法,根据anchor和bbox的大小来决定目标属于特征金字塔的哪一层,如下图所示,我们可以看到,同样都是汽车,因为在图片中所占的尺寸不同被分配到了不同的特征层,而这应该是不合理的。
本文提出FSAF模块来解决上述问题,我们根据bbox的内容而不是大小去选择特征层,示意图如下所示。
二、FSAF Module
1、FSAF的结构图如下所示,从图中可以看出,直接在原来的两个subnet的基础上多加两个分支,非常简单。两个分支的维度分别为:和(其中K为分类的类别数)。
2、定义:
3、Ground-truth和loss:
(1)分类分支:focal loss,而且只计算effectivede的区域,即:,其中为归一化系数,为effective区域所包含的像素点个数.
(2)定位分支:,这里使用的是IoU loss,因为当时GIoU loss的文章还没有发出来,这里我们可以使用GIoU loss来改进。
4、基于anchor-free分支的特征层选择:
5、实验结果:
可以看出,FSAF对小目标或者是细长的目标提升效果明显。造成这种结果的原因:可能是利用anchor-based方法在分配feature map之后,由于anchor的设置是人为设定的,只有1:1,1:2,2:1三种,它们对这些目标的覆盖度不高。而且,仅仅按照尺寸分配,可能也会对网络的学习造成一定的困惑和干扰。
6、其他的注意点:
(1)关于effective box和ignoring box的使用,它们的次数分别为0.2和0.5。作者的解释是:这样可以使函数的连续性更好,更利于网络的学习。
我认为这样做还有另外一种好处,我们知道网络的学习时贪婪的,这样会导致网络给出的结果往往过于自信,而这样的结果对于边缘的处理会有些影响。它会扩大显著目标的边缘区域,这也是小目标效果提升显著的一个原因。
另外一个好处:如果两个目标有很小程度的交叉,这样也可以避免,因为交叉的区域被忽略掉了。
(2)如果出现物体之间的遮挡问题,也即是我们上述说的目标的交叉问题。
①如果两个目标被分配到了不同的特征层,这个问题就不需要考虑了。
②如果被分配在了同一个特征层,那么在使用anchor-based分配anchor的时候,我们优先分配给较小的物体。
③对于作者采取的方法,我觉得可以先判断effective区域是否互相遮挡,如果没遮挡,那么问题解决。如果effective区域也遮挡了,然后可以按照作者提供的方法优先考虑小目标。(不知道作者是不是这样做的,论文中没有提到,需要去看一下源码)
(3)FSAF可以作为一个单独的模块直接插入到FPN中,替代启发式的方法来选择特征层。也可以替换掉原来的两个子网络直接用来检测。
(4)在推理阶段,我们不再需要使用FSAF来选择特征层。我们直接把所有特征层的所有anchor拿过来用就可以了,对于那些合适层的anchor得分必然会高,而那些不合适的文anchor得分一定会低。因为网络已经学会了根据内容来选择合适的特征层和合适的anchor。
网友评论