早期目标检测研究以anchor-based为主,设定初始anchor,预测anchor的修正值,分为two-stage目标检测与one-stage目标检测,分别以Faster R-CNN和SSD作为代表。后来,有研究者觉得初始anchor的设定对准确率的影响很大,而且很难找到完美的预设anchor,于是开始不断得研究anchor-free目标检测算法,意在去掉预设anchor的环节,让网络自行学习anchor的位置与形状,在速度和准确率上面都有很不错的表现。anchor-free目标检测算法分为两种,一种是DenseBox为代表的Dense Prediction类型,密集地预测的框的相对位置,另一种则是以CornerNet为代表的Keypoint-bsaed Detection类型,以检测目标关键点为主。
本文主要列举几种Dense Prediction类型的网络,主要涉及以下网络:
YOLOv1是早期的anchor-free算法,后来的系列则转型成anchor-based算法。YOLO同时对多个物体进行分类和定位,没有proposal的概念,是one-stage实时检测网络的里程碑,标准版在TitanX达到45 fps,快速版达到150fps,但精度不及当时的SOTA网络。
将输入分为 S × S S\times S S×S的格子,如果GT的中心点在格子中,则格子负责该GT的预测:
DenseBox是早期的Anchor-free目标检测算法,当时R-CNN系列在小物体的检测上有明显的瓶颈,所以作者提出DenseBox,在小物体的检测也有不错的表现。在DenseBox提出的早些时间,著名的Faster R-CNN出现了,其强大的性能主导了目标检测算法往anchor-based的方向发展。直到FPN的出现,Anchor-free算法的性能才有了很大的提升,更多的工作开始涉及Anchor-free领域。目前很多Anchor-free目标检测研究都有DenseBox的影子,所以DenseBox的设计思路还是很超前的。
DenseBox的整体设计如图1所示,单个卷积网络同时输出多个预测框及其类别置信度,输出的特征图大小为 5 × m 4 × n 4 5\times \frac{m}{4}\times \frac{n}{4} 5×4m×4n。假设像素 i i i位于 ( x i , y i ) (x_i, y_i) (xi,yi),其期望的5维向量为 t ^ i = { s ^ , d x t ^ = x i − x t , d y t ^ = y i − y t , d x b ^ = x i − x b , d y b ^ = y i − y b } \hat{t}_i=\{\hat{s}, \hat{dx^t}=x_i - x_t, \hat{dy^t}=y_i - y_t, \hat{dx^b}=x_i - x_b, \hat{dy^b}=y_i - y_b \} t^i={s^,dxt^=xi−xt,dyt^=yi−yt,dxb^=xi−xb,dyb^=yi−yb},第一个为分类置信度,后四个为像素位置到目标边界的距离,最后,将所有像素的输出转化为预测框,经过NMS处理后进行最后的输出。
Guided Anchoring通过在线生成anchor的方式解决常规手工预设anchor存在的问题,能够根据生成的anchor自适应特征,在嵌入方面提供了两种实施方法,是一个很完整的解决方案。
Guided Anchoring首先判断目标可能出现的位置,然后学习不同位置上的目标的形状,可根据图片特征在线学习稀疏的候选anchor。然而,在线生成的anchor形状各异,固定的感受域可能不匹配其形状,所以Guided Anchoring根据anchor的形状进行自适应特征提取,然后再进行预测框精调与分类。
目标检测的首要问题就是尺寸变化,许多算法使用FPN以及anchor box来解决此问题。在正样本判断上面,一般先根据目标的尺寸决定预测用的FPN层,越大的目标则使用更高的FPN层,然后根据目标与anchor box的IoU进一步判断,但这样的设计会带来两个限制:拍脑袋式的特征选择以及基于IoU的anchor采样。
为了解决上述的问题,FSAF(feature selective anchor-free)在每轮迭代中选择最优的层进行训练优化。如图3所示,FSAF为FPN每层添加anchor-free分支,包含分类与回归,在训练时,根据anchor-free分支的预测结果选择最合适的FPN层用于训练,最终的网络输出可同时综合FSAF的anchor-free分支结果以及原网络的预测结果。
论文提出anchor-free和proposal-free的one-stage的目标检测算法FCOS,不再需要anchor相关的的超参数,在目前流行的逐像素(per-pixel)预测方法上进行目标检测。从实验结果来看,FCOS能够与主流的检测算法相比较,达到SOTA,为后面的大热的anchor-free方法提供了很好的参考。
目标检测由于anchor的存在,不能进行纯逐像素地快速预测,于是FCOS抛弃anchor,提出逐像素全卷积目标检测网络网络,总结如下:
FoveaBox同时预测每个有效位置为目标中心的可能性及其对应目标的尺寸,输出类别置信度以及用以转化目标区域的尺寸信息。作为与FCOS和FSAF同期的Anchor-free论文,FoveaBox在整体结构上也是基于DenseBox加FPN的策略,主要差别在于FoveaBox只使用目标中心区域进行预测且回归预测的是归一化后的偏移值,还有根据目标尺寸选择FPN的多层进行训练。由于FoveaBox的整体实现方案太纯粹了,与其它Anchor-free方法很像,所以一直投稿到现在才中了,作者也是相当不容易。
Anchor-free检测方法分为anchor-point类别和key-point类别两种,anchor-point类别虽然更快更灵活,但准确率一般比key-point类别要低,所以论文着力于研究阻碍anchor-point类别准确率的因素,提出了SAPD(Soft Anchor-Point Detecto)。
SAPD的核心如图3所示,分别为Soft-Weighted Anchor Points以及Soft-Selected Pyramid Levels:
在仔细比对了anchor-based和anchor-free目标检测方法后,结合实验结果,论文认为两者的性能差异主要来源于正负样本的定义,假如训练过程中使用相同的正负样本,两者的最终性能将会相差无几,于是论文提出ATSS( Adaptive Training Sample Selection)方法。
ATSS能够自动根据与GT的相关统计特征选择合适的anchor box作为正样本进行训练,在不带来额外计算量和参数的情况下,能够大幅提升模型的性能,十分有用。
图2为FCOSv2中的主干网络结构,主干网络依然采用FPN,每层特征使用共同的head预测类别信息、尺寸信息以及Center-ness,整体思想基本与FCOS一致。对FCOS的小修小改,最终性能达到了50.4AP,可谓相当强劲了,在工程上可以参考其中的改进以及提升方法。
作者认为当前anchor-free方法存在两个问题,中心关键点与目标的语义不一致以及局部特征的回归有局限性。为了解决上述两个问题,作者提出了十分大胆的方法DDBNet。
DDBNet包含box分解/组合模块以及语义一致模块,分别用于解决中心关键点的回归不准问题以及中心关键点与目标的语义不一致问题,结果如图2中的实线框。论文的主要贡献如下:
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】