前言 目前的anchor-free检测器可以分为两种类型:anchor-point检测器和key-point检测器。
anchor-point:比如DenseBox,UnitBox,FSAF,FCOS等。anchor points其实就是特征金字塔中每个特征图上的像素点,每个像素点所在的位置都有与它相对应的特征,也就是说将这些像素点当作是anchor box。然后根据这些points和这些points与相应的边界的距离,编码并解码出目标的bbox。 key-points:比如CornerNet和CenterNet。它预测出bbox一些关键点的位置,比如角点,中心点或极点,然后将这些关键点分组以形成bbox。 上面这两种anchor-free的方法都有各自的优点和缺点。
对于key-point检测器来说,它可以在输入图像的大小相对较小的情况下,达到相对较高的AP;但它依赖于单个高分辨率的特征图,以及重复的bottom-up和top-down推理,因此需要更高的FLOPs、更多的内存、更长的训练时间和测试时间,同时与一些热门的预训练的backbone的兼容性不是太好(CornerNet的backbone是hourglass)。 对于anchor-point检测器来说,它的网络结构简单,训练和inference的速度都更快,能更好的受益于FPN的增强,并且特征层级的选择也很灵活。但在测试时输入相同尺度的图像的情况下,它的检测精度没有key-point的好,尤其在定位精度上。 作者提出:一个简单的anchor-point检测器可以达到与key-point检测器相似的检测精度吗?
于是,本文提出SAPD(Soft Anchor-Point Detector),它是一种简单的单阶段anchor-point检测器,它的速度和精度都比key-point要好。作者认为,无效的训练是影响anchor-point检测器的精度的主要因素 。当前anchor-point检测器的训练策略存在两个被忽略的问题:注意力偏差 (attention bias)和特征选择 (feature selection):
注意力偏差:在训练时由于anchor-points特征没有对齐的影响,有着良好视野的目标会在检测器中得到更多的注意力,这使得其它目标容易被忽略; 特征选择:在启发式地将目标实例分配给某个特征层级,或者每个目标实例仅限于一个特征层级的情况下,会导致无法有效利用特征金字塔。 为了解决这两个问题,本文提出两种软优化技术(soften optimization techniques):soft-weighted anchor points和soft-selected pyramid levels 。首先设计了一个和检测器联合训练的meta-selection网络,它负责为每个目标实例预测每个特征金字塔层级的软选择权重(soft selection weights),然后对于正样本anchor-point,根据它到对应目标的中心点的距离,以及它所属的特征金字塔层级的软选择权重等两个因素,来调整该anchor-point对整个网络损失的影响权重。
Soft Anchor-Point Detector 1. anchor-point检测器 如上图所示,anchor-point检测器的网络包括backbone,特征金字塔和detection head,其中特征金字塔的每个层级都有一个detection head。用PlP_l P l 表示特征金字塔中层级数为ll l 的特征图,它对输入图片做2l2^l 2 l 倍的下采样。一个detection head包括分类子网和定位子网,每个子网都有5个3 ×\times × 3的卷积层。分类子网负责预测每个anchor point位置处的目标属于KK K 个类别的概率,定位子网预测与类别无关的bbox。
输入图像大小为W×HW \times H W × H ,设plijp_{lij} p l i j 是在特征层级PlP_l P l 上位于(i,j)(i,j) ( i , j ) 处的像素,其中i=0,1,...,W/sl−1i=0,1,...,W/s_l-1 i = 0 , 1 , . . . , W / s l − 1 ,j=0,1,...,H/sl−1j=0,1,...,H/s_l-1 j = 0 , 1 , . . . , H / s l − 1 ,sl=2ls_l=2^l s l = 2 l 。每个plijp_{lij} p l i j 在原图上对应的位置为(Xlij,Ylij)(X_{lij},Y_{lij}) ( X l i j , Y l i j ) ,其中Xlij=sl(i+0.5)X_{lij}=s_l(i+0.5) X l i j = s l ( i + 0 . 5 ) ,Ylij=sl(j+0.5)Y_{lij}=s_l(j+0.5) Y l i j = s l ( j + 0 . 5 ) 。设gt box B=(c,x,y,w,h)B=(c,x,y,w,h) B = ( c , x , y , w , h ) ,其中cc c 是类别,(x,y)(x,y) ( x , y ) 是中心点,ww w 和hh h 分别是宽和高,BvB_v B v 是有效框,它是BB B 的中心收缩框,即Bv=(c,x,y,ϵw,ϵh)B_v=(c,x,y,\epsilon w,\epsilon h) B v = ( c , x , y , ϵ w , ϵ h ) ,ϵ\epsilon ϵ 是收缩因子。当一个BB B 被分配到PlP_l P l 时,只有当plijp_{lij} p l i j 在原图上相应的位置位于BvB_v B v 内,这个anchor point才是正样本,否则就是负样本。
正样本的分类target是cc c ,定位target是一个归一化的距离d=(dl,dt,dr,db)d=(d^l,d^t,d^r,d^b) d = ( d l , d t , d r , d b ) ,分别表示anchor point到BB B 的左,上,右,下边界的距离: 其中zz z 是归一化因子。对于负样本anchor points来说,它们的分类target是背景,即c=0c=0 c = 0 ,并且不需要对它们进行定位target的计算。总的来说,对于每个anchor point plijp_{lij} p l i j ,都有一个分类target clijc_{lij} c l i j 和定位target dlijd_{lij} d l i j 。
在训练时,分类子网的损失函数是focal loss,以克服正负样本间极端不平衡的问题;定位子网的损失函数是IoU loss,因此每个anchor point的损失LlijL_{lij} L l i j 为: 其中p+p^+ p + 和p−p^- p − 分别表示正样本和负样本,整个网络的损失是所有anchor point的损失除以正样本anchor point的数量:
2. soft-weighted anchor points 首先来说一下什么是注意力偏差 (attention bias)。在一个图像中,目标可能会出现遮挡、背景混乱等问题。在原始的anchor-point检测器中,在处理遮挡、背景混乱等问题时,会产生注意力偏差,即有着清晰明亮的视野的目标会生成过高得分的区域,而这会抑制周围其它目标的的分区域。下图是对注意力偏差的可视化例子: 上图中有5个足球运动员,图(b)是分类输出的score map,可以看到,前景中的两个运动员生成了两个得分很高并且范围很大的dominant region,并且这个dominant region有朝着其他运动员的underrepresented region扩张的趋势,在更糟糕的情况下,dominant region会直接覆盖掉underrepresented region。这就使检测器产生了注意力偏差,即检测器只会把注意力放在前景的目标上,从而抑制了背景区域中目标的检测。
那么为什么会出现这种情况呢?作者认为问题出在特征的不对齐上,这会导致靠近目标边界的位置会得到不必要的高分 。靠近边界处的anchor point的特征并不能与目标很好的对齐,也就是说如果把该处anchor point所对应的特征映射回原图上,会与原图产生一定的偏差。由于这些anchor point的感受野包含了太多的背景信息,因此它们的特征会受到目标外围的背景信息的影响,从而导致了特征的表示能力变弱。因此不能给予那些靠近目标边界的anchor point与靠近目标中心的anchor point相同的信任权重。
如何解决这个问题呢? 本文提出soft-weighting机制来处理注意力偏差的问题。基本思想是为每个anchor poing plijp_{lij} p l i j 分配一个权重wlijw_{lij} w l i j 。对于正样本anchor point ,这个权重取决于它对应在原图上的位置与相对应的目标中心点的距离,距离越大,权重越低。因此,远离中心点的anchor point就会被抑制,检测就会更依赖于靠近目标中心点的anchor point。对于负样本anchor point ,它们的权重都被设为1,在训练中保持不变。下图是soft-weighted anchor points的实例,图中的黑色柱说明了正样本anchor point对整个网络损失的贡献的权重: 根据以上soft-weighting的思路,有多种设计方法,但只要权重是anchor point与目标中心点之间距离的单点递减函数就行。本文提出一个广义的中心点函数(cen- terness function): 其中η\eta η 控制递减幅度,权重值wligw_{lig} w l i g 在0和1之间,上式保证了在目标边界上的anchor point的权重为0,在目标中心处的anchor point的权重为1。
3. soft-selected pyramid levels 在anchor-free检测器中,在训练时可以将目标分配给任意一个/多个特征金字塔层级,选择正确的层级会带来很大的收益。在特征金字塔中,不同层级的特征图在某种程度上是相似的,尤其是相邻的层级。下图对特征金字塔中所有层级的响应进行了可视化,可以看到,如果一个特征层级中的某个区域被激活,那么相邻层级的相同区域也会以相同的方式被激活。但是也可以看到,层级相差的越远,这种相似性越弱。这意味着在检测一个特定的目标时,多个层级的特征可以共同为检测该目标做出贡献,但来自不同层级的特征所做的贡献应该有所不同。 通过以上分析,本文认为合适的金字塔特征层级的选择应该遵循以下两个原则:
金字塔特征层级的选择应该遵循特征响应的模式,而不是一些启发式的方式。与目标有关的损失可以很好的反映一个特征金字塔层级是否适合检测某些目标; 对每个目标来说,应该允许来自不同层级的特征参与到训练和测试中,当然每个层级做出的贡献是不同的。FoveaBox已经证明了将目标分配给不同的特征层级能够提升检测性能,但如果分配给太多的特征层级,反过来又会损失检测性能。作者认为这种限制是由金字塔层级的hard selection造成的。对每个目标来说,FoveaBox中的金字塔层级要么被选择,要么被丢弃,这种选择方式不考虑各层级特征响应的差别而一视同仁。 因此,本文的解决方法是,对于每个目标,重新加权各个金字塔层级。也就是说,根据特征响应,为每个金字塔层级分配不同的权重,也就是soft selection,这也可以被看作是将一个目标的一部分分配给某一层级。
那么对每个目标来说,如何确定每个金字塔层级的权重呢?本文提出了meta-selection网络来预测权重,以进行soft feature selection ,如下图所示。网络的输入是某个目标在所有特征层级上被提取出来的特征响应,如图中所选择的目标是instance B,一辆灰色的车。这一过程是怎么实现的呢? 其实就是对每个特征层级应用RoI Align层 ,然后将RoI Align之后的结果连结起来,这里的RoI是目标在每个特征层级上的gt box ;然后将提取的特征经过meta-selection网络,输出一个概率分布的向量,这个概率分布就作为soft feature selection的各层级的权重 。 meta-selection网络是一个轻量级的网络,它包括3个3×33 \times 3 3 × 3 的卷积层,没有零填充,每个卷积层后跟ReLU函数,和一个soft-max全连接层,下表说明了meta-selection网络的详细结构。meta-selection网络和检测器是联合训练的,训练时使用交叉熵损失函数,gt是一个one-hot向量,它说明了那个特征层级的损失最小。
到目前为止,每个目标BB B 通过meta-selection网络与一个层级权重wlBw^B_l w l B 相关联。如下图所示,与前面的soft-weighting机制结合起来,如果BB B 被分配给PlP_l P l ,并且anchor-point plijp_{lij} p l i j 位于BvB_v B v 之内,那么plijp_{lij} p l i j 要进一步down-weight,即该plijp_{lij} p l i j 需要被分配它所属的特征层级的权重。 为每个BB B 分配前kk k 个特征层级,这kk k 个是根据训练时最小的kk k 个与目标有关的损失确定的。因此,anchor point的权重可以被进一步表示为: 整个模型的损失是所有anchor point损失的加权和,加上meta-selection网络的分类损失:
Training 检测网络的初始化参照FSAF,但backbone是在ImageNet1k上进行预训练的。整个检测网络和meta-selection网络联合起来使用SGD来训练,除非另有说明,所有的模型都训练12个epochs,对于前6个epochs,不使用meta-selection网络的输出,而是使用FSAF中在线特征选择的策略来训练检测网络,比如直接将目标分配给损失最小的特征层级。在第二轮的6个epochs中,才使用soft selection weights来选择前kk k 个特征层级。这是为了先在前期稳定neta-selection网络,使得学习过程更加平滑。
Inference 在inference时,不再有meta-selection网络,因此运行速度不会受到影响。一个图像在网络中向前传播,为每个anchor point plijp_{lij} p l i j 生成分类预测clij^\hat{c_{lij}} c l i j ^ 和定位预测dlij^\hat{d_{lij}} d l i j ^ ,通过置信度阈值0.05在每个特征层级中选择前1000个anchor point,然后将来自所有特征层级的预测值融合,进行阈值为0.5的NMS操作,得到最终检测结果。
结论 感觉本文是FSAF的改进,FSAF里正负样本的选择是由有效区域和忽略区域确定的,而本文的SAPD对正样本加了一个权重,该权重与anchor point离中心点的距离成反比。两者之间相同的部分是,都是选择gt box内一定范围的点作为正样本,而SAPD又对这些正样本做了进一步处理。在特征层级选择方面,FSAF每个特征层级负责检测一个目标,SAPD中多个特征层级都可以为同一个目标的检测做出贡献。只是在训练时,前6个epochs还是采用的FSAF中在线特征选择的方式,后6个epochs才加上SAPD特有的soft selection weight