最近大致梳理了下最近一些Anchor Free方法的发展脉络,不考虑早期的YOLO和DenseBox等算法的话,SOTA的应该是18年CVPR提出的CornerNet,而进入2019年之后,Anchor Free方法颇有点井喷的感觉。今天将总结一下CornerNet/CenterNet/ExtremeNet这一基于keypoint启发的Anchor Free思路,而FCOS/FSAF/FoveaBox这一完全不同的Anchor Free会放在下次,总结不会涉及太多细节,主要介绍一些Motivation和整体网络思想,细节将在之后具体谈论文的时候给出介绍。
1. 从Anchor Based方法谈起
目前主流的目标检测算法,包括多阶段的各种RCNN和单阶段的SSD、RetinaNet上都是基于Anchor来做的。Anchor的本质是候选框,在设计了不同尺度和比例的候选框后,DNN学习如何将这些候选框进行分类:是否包含object和包含什么类别的object,对于postive的anchor会学习如何将其回归到正确的位置。它扮演的角色和传统检测算法中的滑动窗口等机制比较类似。但是,这种设计思路有很多问题:
大部分object是不规则的,所以Bounding Box涵盖了大量非object的区域,从而引入比较多的干扰
Anchor的设置需要手动去设计,对不同数据集也需要不同的设计,相当麻烦,也不符合DNN的设计思想
Anchor的匹配机制使得极端尺度(特别大和特别小的object)被匹配到的频率相对于大小适中的object被匹配到的频率更低,DNN在学习的时候不太容易学习好这些极端样本
Anchor的庞大数量使得存在严重的不平衡问题,这里就涉及到一个采样的过程,实际上,