解读《Bridging the Gap Between Anchor-based and Anchor-free Detection》
张士峰大佬近期发了一篇论文解读Anchor-base和Anchor-free方法间的差别,其本质在于正负样本的选取方式不同。
论文:《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection》
链接:https://arxiv.org/abs/1912.02424
知乎解读(作者本人出没):https://www.zhihu.com/question/359595879
Anchor-base和Center-base的区别?
有读过FCOS的朋友还记得, FCOS是先判定正负样本的中心点,然后以中心点来回归boundingbox的:
其实这种方式和RetinaNet这种anchor-base的方法本质上大同小异,只不过一个是在Anchor的基础上做回归,另一个把Anchor换成了中心点而已。文章中首先探究了FCOS相比RetinaNet有一些improvements,包括:
- GroupNorm
- GIoU
- GT Box
- Centerness
- Scalar
把这些improvements用在RetinaNet上:
也能够使RetinaNet从AP32.5提升到37,这样二者之间的gap只有0.8了,而这0.8的gap可能来自于两点:
- Classification的方式不同,即正负样本的选取方式不同
- Regression的方式不同,一个基于anchor,一个基于point
作者通过试验证明了,anchor-base和anchor-free的gap主要来自于第一点:classification,及核心区别在于二者正负样本的选取方式不同。具体有什么样的不同,如下图:
第一行是RetinaNet,第二行是FCOS。
对于RetinaNet,其回归的基点是anchor,首先要判定哪些anchor是正样本,哪些anchor是负样本,然后在正样本anchor的基础上再做位置的回归。而判定anchor是否是正样本,是通过计算anchor和groundtruth的IoU来完成的,这样做的缺陷很明显,anchor是正样本还是负样本非常受限于anchor的设计,比如第一行RetinaNet中可以看到,蓝色的groundtruth包含了6个anchors,但是受限于anchor的大小,他们的IoU没有达到阈值要求,因此这些anchor都被判定成了负样本,显然这样是不太合理的。
而对于FCOS,作为center-base的方式,是通过判定feature上的每个点是否落入到groundtruth中来判定正负样本的,很显然这样就摆脱了类似于anchor这种受限于hard-craft的缺陷, 这也是FCOS效果优于RetinaNet的原因:基于center的方式,能够更有效的选取正样本。
一种“自适应”的训练样本选取方式ATSS
既然我们已经知道,Center-base和Anchor-base的区别在于正负样本的选取上,那怎样去弥补这种缺陷呢?作者提出了一种Anchor-base的基础上,自适应选取正负样本的方式,ATSS。
ATSS的伪代码:
流程大概是:
- 对于每个groundtruth,计算每个anchor到groundtruth的L2 distance,保留距离较近的anchor作为备选正样本anchor集合
- 对于备选正样本anchor
中的每个anchor, 计算和其对应groudtruth的IoU
,然后计算
的均值
和标准差
- 选取
作为IoU的阈值,只有
中与groundtruth IoU大于阈值
的anchor被选为正样本anchor
- 保持正负anchor的总数一定
作者还证明了算法对于ATSS中anchor的大小这个超参数设计不敏感,达到了自适应。
几点思考
- 在本博客开头的链接里面很多大佬都对这篇论文发表了看法,ATSS仍旧有硬伤,本质上仍旧有设计上的超参数存在,hard-craft的痕迹很重,实际上我也觉得离"adaptive"这个目标还有一定距离。
- 文章的实验和分析还是很清晰的,读完这篇文章我们应该能体会到,anchor的这种方式本质上还是存在着label-assign的问题,能解决这个问题,也许能使得performance显著的提升。