聊聊Anchor的"前世今生"(下)

大家好,欢迎回来!我们继续上次的anchor之旅。从今年年初开始,整个detection领域掀起了“去anchor化”的潮流。由于有很多的解读都具体介绍过这些方法技术方面的细节了,所以这篇文章不会再重复,只做一个粗略的总结,更多讲讲我个人对这个潮流的一些想法。个人认为市面上现有的anchor free的方法基本可以分为真假anchor free两类(这个名字只是开个玩笑,不要当真,而且两者的界限也没有那么清晰 :-D):

“真”anchor free

这一类方法的鼻祖来自于ECCV18的工作CornetNet[8],一篇真的把detection当做了bounding box的corner keypoint detection,且第一次能和其他box based方法打成平手的文章。这一类方法的核心思想是没有直接instance的概念,独立预测框左上角和右下角的位置,然后通过associative embedding的办法聚起来对应的左上角和右上角从而得到一个instance。如果有了解human keypoint detection的同学就会知道,这个pipeline是和bottom up的multi-person keypoint detection一模一样的。

比较可喜的是,这类方法在性能上展示了非常强大的潜力,在ExtremeNet[9]和CenterNet[6]的不断改进下,甚至有超越传统one stage detector的趋势,而且方法本身也可以受益于各种SOTA的keypoint detection算法的研究。但就本质而言,框对于物体来说不是一个最好的表示。框的顶点可能甚至都不在物体上,离物体本身已经很远了。CornetNet为了缓解这个问题,使用了Corner Pooling的办法来聚集在边上的检测结果到顶点。不过就算使用了CornerPooling,只使用两个顶点会导致存在大量的误检。CenterNet[6]的想法很简单,既然这些虚无缥缈的顶点这么难预测,我们为什么不去预测更简单更容易的中心点呢? 所以CenterNet在CornerNet的基础上加入了一支中心点预测,能够组成一个物体的要求不仅仅是两个顶点能匹配,同时这两个顶点定义的框的中心也要有对应的中心点相应,这样就缓解了很多奇怪的误检。CenterNet同时还提出了Center Pooling和Cascade Corner Pooling来改善对于中心点和顶点预测的精度。这里就不再展开,有兴趣的读者可以参阅原文。

另外一个比较有意思的工作是RepPoints,这篇文章没有走CornerNet的老路,尝试去预测顶点,而是直接去预测9个representative points(这些顶点并没有明确的语义),然后找出包围这9个点的最紧框去和GT计算loss。然后loss只会回传给对生成这个框有贡献的那些点。整个的思路很清晰,而且方便实现,结果也相当不错。

总结下这类方法:follow up工作不是很多,但是性能不俗。但是个人觉得这不会是这一类方法的终点:直接预测顶点虽然效果也不错,但是总是不是很直观;RepPoints的思路独树一帜,个人比较喜欢。后续这个思路应该可以延伸出一些直接使用更准确的mask为监督的工作,这也有可能是一条可以做出更干净更漂亮的panoptic segmentation之路。

“假”anchor free

这一类方法最早的起源是15年的工作DenseBox[10]。(为了避免争议,这是第一篇在这个思想下我认为达到高质量完成度的工作)这一类方法的核心思想是改变one stage detector中对于:1)分类任务中assign正负样本的方式和 2)回归中target的设置。原本anchor based的方法,通过预先指定的anchor和GT的IoU来assign正负样本,回归的都是相对于anchor box的偏移量。在这一批工作中,由于没有anchor的存在,这个流程就简化成了:1) 对是不是某个物体的中心点附近进行分类。2) 对是中心点的位置,直接回归对应的scale(可以是长宽,也可以是到框四条边的距离等)。核心思想是改变了bounding box的编码方式。最早了解到类似的思想是在自然场景文字检测中,EAST之类的方法提出了这样简单干净的pipeline,这样的想法加上一些改进也最终被运用到了通用物体检测中。

核心思想是这样的论文有[1-5],但是在细节上每篇处理不甚相同。FSAF[1]在网络中同时使用anchor based分支和anchor free分支,两支起到互补的作用,并在线选择了每个物体应该被assign到FPN的哪一层中;FCOS[2]除预测上述提到的中心点和长宽之外,还额外预测了一支Centerness,在实验中证明对于抑制一些偏离中心很远的误检非常有作用;另一篇CenterNet[3]在这样的基础上更进一步,除了2D框的长宽之外,把其他各种任务所需要的信息(如3D框的大小和朝向,深度信息等等)都作为这个中心点要来预测的任务,大幅拓展了这样一个想法的适用范围。

上次说了这么多anchor的产生原因和好处,为什么突然在这个时间点anchor free的方法不约而同地火了起来呢?个人觉得,机缘巧合,这个原因恰恰在于RetinaNet中两个重要的元素FPN和Focal Loss。

首先说FPN,anchor free的做法相当于feature map的每个位置只能输出一个框,可以想象,如果没有FPN这种多层级的表示,如果最终的feature map downsample的倍数是8或者16,那么可能会有很多物体的中心点落在同一格子中。这样就会导致训练的时候有很大的歧义性。随着FPN的引入,不同scale的物体被分配到了不同的层级上,冲突的概率大大降低。在CenterNet中,作者还特意起计算了冲突的比例,实际不到0.1%,对于性能的影响实际上也是微乎其微的。回顾下在上一篇文章提到的引入anchor的一个motivation恰恰就是,在FPN中这样的问题被规避掉了,这是我认为anchor free方法回归的第一个重要原因。

再说Focal loss,由于物体的中心区域是远小于其他背景区域的,整个分类的正负样本和难易样本是极不均衡的。直接训练这样的分类问题很难收敛到一个满意的结果。这样的问题其实在传统的one stage detector中同样存在,解决方案就是OHEM或者focal loss这样的加权办法。实测中,focal loss的结果会更好一些,所以focal loss也基本上被所有这类的方法所采用。

不过个人觉得这些方法其实没有触及到one stage detector中的一个核心问题:框和对应feature的misalignment。这个问题有机会我会再和大家展开介绍。

总结

虽然现阶段anchor free的办法在性能和简洁性上都还没完全压倒anchor based的前辈,但是其中蕴含的一些思想还是比较值得深思的,比如前面提到的,在图像上一个物体的更好表示是什么?怎么去更好利用这样的表示?相信这次anchor free的潮流也势必会孕育这下一次物体识别和分析领域的革命。

[1] Zhu, C., He, Y., & Savvides, M. (2019). Feature Selective Anchor-Free Module for Single-Shot Object Detection. arXiv preprint arXiv:1903.00621.

[2] Tian, Z., Shen, C., Chen, H., & He, T. (2019). FCOS: Fully Convolutional One-Stage Object Detection. arXiv preprint arXiv:1904.01355.

[3] Zhou, X., Wang, D., & Krähenbühl, P. (2019). Objects as Points arXiv preprint arXiv:1904.07850

[4] Kong, T., Sun, F., Liu, H., Jiang, Y., & Shi, J. (2019). FoveaBox: Beyond Anchor-based Object Detector. arXiv preprint arXiv:1904.03797.

[5] Liu, W., Liao, S., Ren, W., Hu, W., & Yu, Y. (2019). High-level Semantic Feature Detection: A New Perspective for Pedestrian Detection. arXiv preprint arXiv:1904.02948.

[6] Duan, K., Bai, S., Xie, L., Qi, H., Huang, Q., & Tian, Q. (2019). CenterNet: Keypoint Triplets for Object Detection. arXiv preprint arXiv:1904.08189.

[7] Yang, Z., Liu, S., Hu, H., Wang, L., & Lin, S. (2019). RepPoints: Point Set Representation for Object Detection. arXiv preprint arXiv:1904.11490.

[8] Law, H., & Deng, J. (2018). Cornernet: Detecting objects as paired keypoints. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 734-750).

[9] Zhou, X., Zhuo, J., & Krähenbühl, P. (2019). Bottom-up Object Detection by Grouping Extreme and Center Points. arXiv preprint arXiv:1901.08043.

[10] Huang, L., Yang, Y., Deng, Y., & Yu, Y. (2015). Densebox: Unifying landmark localization with end to end object detection. arXiv preprint arXiv:1509.04874.

编辑于 2019-06-10

文章被以下专栏收录