点击上方“计算机视觉life”,选择“星标”
快速获得最新干货
本文来自知乎,仅作为学术分享,如果侵权,会删文处理。原文链接:
https://www.zhihu.com/question/356551927/answer/919612766
问题:最近再看关于object detection方面的文章,对于anchor-based 和anchor free是什么,他们之间的区别有什么有些不理解,感觉乱乱的,还有就是anchor-based和anchor box 是一回事吗,哪些算法属于anchor-based,哪些算法属于anchor free,自己去网上搜了半天,有人说YOLO是anchor free的,也有人说YOLO是基于边框的,都快晕了
作者:青青子衿
https://www.zhihu.com/question/356551927/answer/919612766
1.目标检测算法一般可分为anchor-based、anchor-free、两者融合类,区别就在于有没有利用anchor提取候选目标框。
A. anchor-based类算法代表是fasterRCNN、SSD、YoloV2/V3等
B. anchor-free类算法代表是CornerNet、ExtremeNet、CenterNet、FCOS等
C.融合anchor-based和anchor-free分支的方法:FSAF、SFace、GA-RPN等
2. anchor(也被称为anchor box)是在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标主要分布的长宽尺度。在推理时生成的特征图上由这些anchor滑动提取n个候选矩形框再做进一步的分类和回归(详细叙述请参考提出anchor思想的fasterRCNN一文)。也就是传统目标检测算法中,在图像金字塔上使用的那个m*n的滑窗。只不过传统方法中特征图是不同尺度的,滑窗一般是固定大小的;而类似于fasterRCNN算法中特征图是固定的,anchor是多尺度的。
3.Yolo算法一共有三个版本,YoloV1可以算作anchor-free类;YoloV2开始引入anchor,YoloV3也使用了anchor。
4.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个距离
作者:陈恺
https://zhuanlan.zhihu.com/p/62372897
1. Feature Selective Anchor-Free Module for Single-Shot Object Detection
2. FCOS: Fully Convolutional One-Stage Object Detection
3. FoveaBox: Beyond Anchor-based Object Detector
4. High-level Semantic Feature Detection: A New Perspective for Pedestrian Detection
这几篇论文不约而同地将矛头对准了 anchor 这个检测里面的基础模块,采用 anchor-free 的方法在单阶段检测器上达到了和 anchor-based 方法类似或者更好的效果。这里不打算详细讨论每一篇论文的方法,主要分享一下个人的想法。
我们首先看一下这几篇论文的框架图。
抛开 backbone 不说,可以发现这几种方法的 detection head 十分地相似。基本都是 2 个分支,一个预测类别,输出 HxWxK,另一个预测边框的相对坐标,输出大小为 HxWx4。方法 2 除了这两个分支之外,还增加了一个 regression branch 来预测每个点到 ground truth 中心的远近程度。方法 4 由于是二分类,所以类别预测分支只需要预测一个 heatmap 就可以。
这个问题首先需要回答为什么要有 anchor。在深度学习时代,物体检测问题通常都被建模成对一些候选区域进行分类和回归的问题。在单阶段检测器中,这些候选区域就是通过滑窗方式产生的 anchor;在两阶段检测器中,候选区域是 RPN 生成的 proposal,但是 RPN 本身仍然是对滑窗方式产生的 anchor 进行分类和回归。
而在上面几篇论文的 anchor-free 方法中,是通过另外一种手段来解决检测问题的。同样分为两个子问题,即确定物体中心和对四条边框的预测。预测物体中心时,具体实现既可以像 1、3 那样定义一个 hard 的中心区域,将中心预测融入到类别预测的 target 里面,也可以像 2、4 那样预测一个 soft 的 centerness score。对于四条边框的预测,则比较一致,都是预测该像素点到 ground truth 框的四条边距离,不过会使用一些 trick 来限制 regress 的范围。
anchor-free 的方法能够在精度上媲美 anchor-based 的方法,最大的功劳我觉得应该归于 FPN,其次归于 Focal Loss。(内心OS:RetinaNet 赛高)。在每个位置只预测一个框的情况下,FPN 的结构对尺度起到了很好的弥补,FocalLoss 则是对中心区域的预测有很大帮助。当然把方法调 work 并不是这么容易的事情,相信有些细节会有很大影响,例如对重叠区域的处理,对回归范围的限制,如何将 target assign 给不同的 FPN level,head 是否 share 参数等等。
上面提到的 anchor-free 和每个位置有一个正方形 anchor 在形式上可以是等价的,也就是利用 FCN 的结构对 feature map 的每个位置预测一个框(包括位置和类别)。但 anchor-free 仍然是有意义的,我们也可以称之为 anchor-prior-free。另外这两者虽然形式上等价,但是实际操作中还是有区别的。在 anchor-based 的方法中,虽然每个位置可能只有一个 anchor,但预测的对象是基于这个 anchor 来匹配的,而在 anchor-free 的方法中,通常是基于这个点来匹配的。
虽然上面几种方法的精度都能够与 RetinaNet 相媲美,但也没有明显优势(或许速度上有),离两阶段和级联方法相差仍然较远。和 anchor-based 的单阶段检测器一样,instance-level 的 feature representation 是不如两阶段检测器的,在 head 上面的花样也会比较少一些。顺便吐槽一下,上面的少数 paper 为了达到更好看的结果,在实验上隐藏了一些细节或者有一些不公平的比较。
anchor-free 除了上面说的分别确定中心点和边框之外,还有另一种 bottom-up 的套路,以 CornerNet 为代表。如果说上面的 anchor-free 的方法还残存着区域分类回归的思想的话,这种套路已经跳出了这个思路,转而解决关键点定位组合的问题。
这时候就要祭出(植入)Guided Anchoring 了。
这篇论文 release 稍微早一些,但也可以算同期工作。是不是感觉和上面的方法有些神似?如果只看 anchor 预测的部分,将其直接用于预测最终结果,同时不固定 anchor 的中心点,就和上述的一些方法比较像了。Guided Anchoring 可以看做是 anchor-prior-free,但是整体框架保持与 anchor-based 一致,所以可以插入到现有的 anchor-based 的方法里面,性能提升也会稍微明显一点。类似于在首先进行 anchor-free 的预测,然后以预测结果作为 anchor 进行进一步地修正。
anchor-free 的方法由于网络结构简单,对于工业应用来说可能更加友好。对于方法本身的发展,我感觉一个是新的 instance segmentation pipeline,因为 anchor-free 天生和 segmentation 更加接近。一个是向两阶段或者级联检测器靠拢,进一步提高性能,如果能在不使用 RoI Pooling 的情况下解决 feature align 问题的话,还是比较有看头的。另外还有一个是新的后处理方法,同时也期待看到 anchor-free 的灵活性带来新的方法和思路。
[1] Zhu, Chenchen, Yihui He, and Marios Savvides. "Feature Selective Anchor-Free Module for Single-Shot Object Detection."arXiv preprint arXiv:1903.00621(2019).
[2] Tian, Zhi, Chunhua Shen, Hao Chen, and Tong He. "FCOS: Fully Convolutional One-Stage Object Detection." arXiv preprint arXiv:1904.01355 (2019).
[3] Kong, Tao, Fuchun Sun, Huaping Liu, Yuning Jiang, and Jianbo Shi. "FoveaBox: Beyond Anchor-based Object Detector."arXiv preprint arXiv:1904.03797(2019).
[4] Liu, Wei, Shengcai Liao, Weiqiang Ren, Weidong Hu, and Yinan Yu. "High-level Semantic Feature Detection: A New Perspective for Pedestrian Detection."arXiv preprint arXiv:1904.02948(2019).
[5] Wang, Jiaqi, Kai Chen, Shuo Yang, Chen Change Loy, and Dahua Lin. "Region proposal by guided anchoring."arXiv preprint arXiv:1901.03278(2019).
欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿、合作也欢迎联系:simiter@126.com
长按关注计算机视觉life
最新AI干货,我在看