目标检测中的anchor-based 和anchor free
1. anchor-free 和 anchor-based 区别
深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题。在单阶段检测器中,这些候选区域就是通过滑窗方式产生的 anchor;在两阶段检测器中,候选区域是 RPN 生成的 proposal,但是 RPN 本身仍然是对滑窗方式产生的 anchor 进行分类和回归。
anchor-free是通过另外一种手段来解决检测问题的。同样分为两个子问题,即确定物体中心和对四条边框的预测。预测物体中心时,将中心预测融入到类别预测的 target 里面,也可以预测一个 soft 的 centerness score。对于四条边框的预测,则比较一致,都是预测该像素点到 ground truth 框的四条边距离,不过会使用一些 trick 来限制 regress 的范围。
2. anchor-free类算法归纳
A.基于多关键点联合表达的方法
a.CornerNet/CornerNet-lite:左上角点+右下角点
b.ExtremeNet:上下左右4个极值点+中心点
c.CenterNet:Keypoint Triplets for Object Detection:左上角点+右下角点+中心点
d.RepPoints:9个学习到的自适应跳动的采样点
e.FoveaBox:中心点+左上角点+右下角点
f.PLN:4个角点+中心点
B.基于单中心点预测的方法
a.CenterNet:Objects as Points:中心点+宽度+高度
b.CSP:中心点+高度(作者预设了目标宽高比固定,根据高度计算出宽度)
c.FCOS:中心点+到框的2个距离
3. 为什么 anchor-free 能卷土重来
anchor-free 的方法能够在精度上媲美 anchor-based 的方法,最大的功劳我觉得应该归于 FPN,其次归于 Focal Loss。(内心OS:RetinaNet 赛高)。在每个位置只预测一个框的情况下,FPN 的结构对尺度起到了很好的弥补,FocalLoss 则是对中心区域的预测有很大帮助。当然把方法调 work 并不是这么容易的事情,相信有些细节会有很大影响,例如对重叠区域的处理,对回归范围的限制,如何将 target assign 给不同的 FPN level,head 是否 share 参数等等。
4. anchor-free 和 single anchor
上面提到的 anchor-free 和每个位置有一个正方形 anchor 在形式上可以是等价的,也就是利用 FCN 的结构对 feature map 的每个位置预测一个框(包括位置和类别)。但 anchor-free 仍然是有意义的,我们也可以称之为 anchor-prior-free。另外这两者虽然形式上等价,但是实际操作中还是有区别的。在 anchor-based 的方法中,虽然每个位置可能
只有一个 anchor,但预测的对象是基于这个 anchor 来匹配的,而在 anchor-free 的方法中,通常是基于这个点来匹配的。
3. anchor-free 的局限性
虽然上面几种方法的精度都能够与 RetinaNet 相媲美,但也没有明显优势(或许速度上有),离两阶段和级联方法相差仍然较远。和 anchor-based 的单阶段检测器一样,instance-level 的 feature representation 是不如两阶段检测器的,在 head 上面的花样也会比较少一些。顺便吐槽一下,上面的少数 paper 为了达到更好看的结果,在实验上隐藏了一些细节或者有一些不公平的比较。
6. 目标检测算法一般可分为anchor-based、anchor-free、两者融合类,区别就在于有没有利用anchor提取候选目标框。
A. anchor-based类算法代表是fasterRCNN、SSD、YoloV2/V3等。
fasterRCNN-设置了3种尺度3种宽高ratio一共9个anchor提取候选框
B. anchor-free类算法代表是CornerNet、ExtremeNet、CenterNet、FCOS等。
CornerNet-直接预测每个点是左上、右下角点的概率,通过左上右下角点配对提取目标框
C.融合anchor-based和anchor-free分支的方法:FSAF、SFace、GA-RPN等。
FSAF-既有根据先验设定的anchor-based分支,也有anchor-free分支增强对异常ratio目标的检测能力
7. anchor(也被称为anchor box)是在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标主要分布的长宽尺度。在推理时生成的特征图上由这些anchor滑动提取n个候选矩形框再做进一步的分类和回归(详细叙述请参考提出anchor思想的fasterRCNN一文)。也就是传统目标检测算法中,在图像金字塔上使用的那个m*n的滑窗。只不过传统方法中特征图是不同尺度的,滑窗一般是固定大小的;而类似于fasterRCNN算法中特征图是固定的,anchor是多尺度的。
三种典型的目标检测框架流程图
8. Yolo算法一共有三个版本,YoloV1可以算作anchor-free类;YoloV2开始引入anchor,YoloV3也使用了anchor。