针对anchor-point检测算法的优化问题,论文提出了SAPD方法,对不同位置的anchor point使用不同的损失权重,并且对不同的特征金字塔层进行加权共同训练,去除了大部分人为制定的规则,更加遵循网络本身的权值进行训练
来源:晓飞的算法工程笔记 公众号
论文: Soft Anchor-Point Object Detection
- 论文地址:https://arxiv.org/abs/1911.12448
- 论文代码:https://github.com/xuannianz/SAPD not official
Introduction
Anchor-free检测方法分为anchor-point类别和key-point类别两种,相对于key-point类别,anchor-point类别有以下有点:1) 更简单的网络结构 2) 更快的训练和推理速度 3) 更好地利用特征金字塔 4) 更灵活的特征金字塔选择,但anchor-point类别的准确率一般比key-point类别要低,所以论文着力于研究阻碍anchor-point类别准确率的因素,提出了SAPD(Soft Anchor-Point Detecto),主要有以下两个亮点:
- Soft-weighted anchor points。anchor-point算法在训练时一般将满足几何关系的点设置为正样本点,其损失值权重均为1,这造成定位较不准确的点偶尔分类置信度更高。实际上,不同位置的点的回归难度是不一样的,越靠近目标边缘的点的损失值权重应该越低,让网络集中于优质anchor point的学习。
- Soft-selectedpyramid levels。anchor-point算法每轮训练会选择特征金字塔的其中一层特征进行训练,其它层均忽略,这在一定程度上造成了浪费。因为其他层虽然响应不如被选择的层强,但其特征分布应该与被选择层是类似的,所以可以赋予多层不同权重同时训练。
Detection Formulation with Anchor Points
论文首先介绍了大致的anchor point目标检测方法的网络结构以及训练方法。
Network architecture
网络包含主干网络以及特征金字塔,特征金字塔每层包含一个detection head,特征金字塔层标记为 P l P_l Pl, l l l为层数,层的特征图大小为输入 W × H W\times H W×H的 1 / s l 1/s_l 1/sl倍, s l = 2 l s_l=2^l sl=2l为stride。一般, l l l的范围为3到7,detection head包含分类子网和回归子网,子网均以5个 3 × 3 3\times 3 3×3卷积层开头,然后每个位置分别预测 K K K个分类置信度以及4个偏移值,偏移值分别为当前位置到目标边界的距离。
Supervision targets
对于目标 B = ( c , x , y , w , h ) B=(c, x, y, w, h) B=(c,x,y,w,h),中心区域为 B v = ( c , x , y , ϵ w , ϵ h ) B_v=(c, x, y, \epsilon w, \epsilon h) Bv=(c,x,y,ϵw,ϵh), ϵ \epsilon ϵ为缩放因子。当目标 B B B被赋予金字塔层 P l P_l Pl且anchor point p l i j p_{lij} plij位于 B v B_v Bv内时,则认为 p l i j p_{lij} plij是正样本点,分类目标为 c c c,回归目标为归一化的距离 d = ( d l , d t , d r , d b ) d=(d^l, d^t, d^r, d^b) d=(dl,dt,dr,db),分别为当前位置到目标四个边界的距离:
z z z为归一化因子。对于负样本点,分类目标为背景( c = 0 c=0 c=0),定位目标为null,不需要学习。
Loss functions
网络输出每个点 p l i j p_{lij} plij的 K K K维分类输出 c ^ l i j \hat{c}_{lij} c^lij以及4维位置回归输出 d ^ l i j \hat{d}_{lij} d^lij,分别使用focal loss和IoU loss进行学习:
网络整体损失为正负样本点之和除以正样本点数:
Soft Anchor-Point Detector
SAPD的核心如图3所示,分别为Soft-Weighted Anchor Points以及Soft-Selected Pyramid Levels,用于调整anchor point权重以及使用特征金字塔的多层进行训练。
Soft-Weighted Anchor Points
基于传统的训练策略,论文观察到部分anchor point输出的定位准确率较差,但是其分类置信度很高,如图4a所示,这会造成NMS过后没有保留定位最准确的预测结果。可能的原因在于,训练策略平等地对待中心区域 B v B_v Bv内的anchor point。实际上,离目标边界越近的点,越难回归准确的目标位置,所以应该根据位置对不同的anchor point进行损失值的加权,让网络集中于优质的anchor point的学习,而不是勉强网络将那些较难回归的点也学习好。
为了解决上面提到的问题,论文提出soft-weighting的概念,为每个anchor point的损失值 L l i j L_{lij} Llij增加一个权重 w l i j w_{lij} wlij,权重由点位置和目标的边界决定,负样本点不参与位置回归的计算,所以直接设为1,完整的权值计算为:
f f f为反映点 p l i j p_{lij} plij与目标 B B B边界远近的函数,论文设置 f f f为centerness函数 f ( p l i j , B ) = [ m i n ( d l i j l , d l i j r ) m i n ( d l i j t , d l i j b ) m a x ( d l i j l , d l i j r ) m a x ( d l i j t , d l i j b ) ] η f(p_{lij}, B)=[\frac{min(d^l_{lij}, d^r_{lij})min(d^t_{lij}, d^b_{lij})}{max(d^l_{lij}, d^r_{lij})max(d^t_{lij}, d^b_{lij})}]^{\eta} f(plij,B)=[max(dlijl,dlijr)max(dlijt,dlijb)min(dlijl,dlijr)min(dlijt,dlijb)]η
η \eta η为降低的幅度,具体的效果可以看图3,经过Soft-Weighted后,anchor point的权值变成了山峰状。
Soft-Selected Pyramid Levels
anchor-free方法在每轮一般都会选择特征金字塔的其中一层进行训练,选择不同的层的效果完全不同。而论文通过可视化发现,不同层的激活区域实际上是类似的,如图5所示,这意味着不同层的特征可以协作预测。基于上面的发现,论文认为选择合适的金字塔层有两条准则:
为了满足上面两条准则,论文提出使用特征选择网络来预测每层对于目标的权重,整体流程如图6所示,使用RoIAlign提取每层对应区域的特征,合并后输入到特征选择网络,然后输出权重向量。效果可看图3,金字塔每层的权值的山峰形状相似,但高度不同。需要注意,特征选择网络仅在训练阶段使用。
特征选择网络的结构十分简单,如表1,与检测器一起训练,GT为one-hot向量,数值根据FSAF的最小损失值方法指定,具体可以看看之前发的关于FSAF文章。至此,目标 B B B通过权重 w l B w^B_l wlB与金字塔的每层进行了关联,结合前面的soft-weighting,anchor point的权值为:
完整的模型的损失为加权的anchor point损失加上特征选择网络的损失:
Experiment
各模块的对比实验。
与SOTA算法进行对比。
Conclusion
针对anchor-point检测算法的优化问题,论文提出了SAPD方法,对不同位置的anchor point使用不同的损失权重,并且对不同的特征金字塔层进行加权共同训练,去除了大部分人为制定的规则,更加遵循网络本身的权值进行训练。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】