anchor_based-anchor_free object detectors

Posted ranjiewen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了anchor_based-anchor_free object detectors相关的知识,希望对你有一定的参考价值。

  • 同步到知乎anchor_based-anchor_free object detectors
  • 前言:最近关注了大量目标检测的论文,比较火的就是anchor based和anchor free两类问题;阅读了很多知乎大佬的文章,记录一些,方便以后学习,若有版权问题,可以删除,谢谢!

anchor based 和 anchor free的问题

  • Anchor-based 方法处理的尺度范围虽小,但更精准;Anchor-free 方法覆盖的尺度范围较大,但检测微小尺度的能力低下。
  • Anchor-based 和 Anchor-free 方法的输出在定位方式和置信度得分方面差异显著,直接合并两个输出困难很大,具体原因如下:
    • 其一,对于 Anchor-based 方法,ground truth IoU ≥ 0.5 的锚点将被视为正训练样本。可以发现,正负样本的定义与边界框回归结果无关,这就导致 Anchor-based 分支每个锚点输出的分类置信度实质上表示的是「锚点框住的区域是人脸」的置信度,而不是「网络预测的回归框内是人脸」的置信度。故而分类置信度很难评估网络实际的定位精度。
    • 其二,对于 Anchor-free 方法,网络训练方式类似于目标分割任务。输出的特征图以边界框中心为圆心,半径与边界框尺度成比例的椭圆区域被定义为正样本区域,特征图其它位置(像素)被视为背景。通过这种方式,Anchor-free 分支的分类置信度得分实质为「该像素落在人脸上」的置信度,而且该分类置信度与定位的准确度的关联同样很弱。
  • 总而言之,Anchor-based 方法和 Anchor-free 方法的分类置信度都与回归定位精度关联甚微,其置信度得分也分别代表着不同的含义。
  • reference: 人脸检测江湖的那些事儿——从旷视说起: 将两个分支融合。
  • anchor-based的算法的缺点
    • 对于每个预选框我们都要根据不同的任务去设置其参数,如长宽比,尺度大小,以及anchor的数量,这就造成了不同参数所导致的AP有很大的不同,同时调参耗时耗力。
    • 产生的预选框在训练阶段要和真实框进行IOU的计算,这会占用很大的运行内存空间和时间。对于单阶段算法来说,为了使其更为有效的检测小目标,通常进行FPN结构以及使用更低的特征图,这样来说产生预选框的数量就会增加很多很多。
    • 针对不同的任务,比如人脸识别和通用物体检测,所有的参数都需要重新调节,这样一个模型的迁移能力就体现不出来了

anchor based 和 anchor free方法

  • anchor based
    • SSD
    • RetinaNet
    • Faster R-CNN
    • 首先预设一组不同尺度不同位置的固定参考框,覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,anchor技术将问题转换为"这个固定参考框中有没有认识的目标,目标框偏离参考框多远",不再需要多尺度遍历滑窗,真正实现了又好又快。
    • anchor设计:anchor的密度,anchor的大小,anchor的形状数量,检测层Pn的数量,检测层Pn的感受野
    • 目标检测中的Anchor: Faster RCNN+SSD+FPN+RetinaNet
    • 锚框:Anchor box综述
  • anchor free
    • DenseBox
    • UnitBox
    • Yolov1
    • CornerNet
    • FSAF for Single-Shot Object Detection: 在RetinaNet基础上添加了anchor free分支,然后根据instance监督,在FPN每一层学习anchor大小,根据IoU loss最小分配选择对应anchor的特征;然后进行anchor based联合训练;GA-RPN方法直接学习特征图上每个位置的anchor大小,没有监督信息,思路上很insight,个人感觉是不是只在最后又监督信息,训练难度是否要大些。参考:Guided Anchoring 可以看做是 anchor-prior-free,但是整体框架保持与 anchor-based 一致,所以可以插入到现有的 anchor-based 的方法里面,性能提升也会稍微明显一点。类似于在首先进行 anchor-free 的预测,然后以预测结果作为 anchor 进行进一步地修正。
    • FoveaBox : 假设FPN中每一个层预测一定范围内的bounding box,而每个特征金字塔都有一个basic area,即32*32到512*512。但FoveaBox为了使每个层去响应特定的物体尺度,对每个金字塔层L 都计算一个有效范围如下,其中用来控制这个尺度范围。
      • 与DenseBox和UnitBox不同,FoveaBox并不是直接学习目标中心到四个边的距离,而是去学习一个预测坐标与真实坐标的映射关系,假如真实框为 (x_1, y_1, x_2, y_2) ,我们目标就是学习一个映射关系 (t_{x_1}, t_{y_1}, t_{x_2}, t_{y_2});
      • 接着使用简单的L1损失来进行优化,其中为 z=\sqrt{S_l} 一个归一化因子,将输出空间映射到中心为1的空间,使得训练稳定。最后使用log空间函数进行正则化。
      • FoveaBox整体设计思路为anchor-free,不需要人为的去定义anchor的参数,但仍然需要手工的去设置参数,比如每层的area的范围,以及正样本区域的缩放因子的参数。总的来说还是不错的,吸取了DenseBox的大量优点,也对其进行了优化。在预测坐标方面,不是单纯的去预测一个distance,而是去学习一个映射Transform。
      • 目标检测:FoveaBox(2019)
    • FCOS: FCNs的网络在密集检测例如语义分割任务都有很好的效果,那我们能不能用语义分割的思想逐像素点的来解决检测问题呢?
      • 存在一个问题,就是真实标签的区域交叠问题,如果那个分割区域交叠了,那么交叠区域到底算是那个问题的呢?
      • A.如果大尺度和小尺度的重叠,比如人和手中的苹果,作者使用了FPN结构来在每一层加以限定,因为这两者之间的尺度相差较大,文章中共有5个区间来限定[0,64][64,128]等等
      • B.如果一个像素点在同一层落到了多个GT区域,这样也会ambiguous。这是作者简单的会使用最小区域来作为回归目标
      • It is worth noting that FCOS can leverage as many foreground samples as possible to train the regressor.
      • Here l?, t?, r? and b? are the distances from the location to the four sides of the bounding box
    • 借鉴了人体关键点检测的思路来做detection:CornerNet,第一个贡献是设计了一个针对top-left和bottom-right的heatmap,找出那些最有可能是top-left和bottom-right的点,并使用一个分支输出embedding vector,帮助判断top-left与bottom-right之间的匹配关系。第二个贡献是提出了Corner Pooling,因为检测任务的变化,传统的Pooling方法并不是非常适用该网络框架。
    • ExtremeNet: 将角点检测改为极值点检测,更加稳定,最终在singe scale上是40.1%(不如CorNerNet),但是mult-scale上比CorNerNet高了1.1个点。
    • 如何评价最新的两篇基于point的目标检测模型CenterNet?
    • CenterNet: 精度高,核心思想是通过中心点抑制误检;使用Cascade Corner Pooling模块提取图像的Corner heatmaps,并采用与CornerNet中一样的方法,根据左上角和右下角点,得到物体的bounding box;使用Center Pooling模块,提取图像的Center heatmap,根据Center map的得到所有的物体中心点。使用物体中心点对提取到的bounding box进行进一步过滤,如果box的中间区域没有中心点存在,则认为此box不可靠。
    • Objects as Points(CenterNet):速度快,出发点是用中心点做尽可能多的任务,基本上把中心点玩出了花,通过检测中心点以及预测各种长宽和 offsets 不仅能做 2D detection,还能做 3D detection 还能做 pose estimation。不需要voting,也不需要nms。直接predict centers,然后(再)predict长宽。
    • CornerNet-Lite:CornerNet-Lite,基于关键点的目标检测算法;CornerNet-Saccade 是追求高准确率(mAP)的同时,尽可能提高速度(FPS);CornerNet-Squeeze 是追求高实时性(FPS)的同时,尽可能提高准确率(mAP)。
    • 浅谈Anchor-Free based目标检测(一)
    • 目标检测:Anchor-Free时代
  • 作者:MatthewHou;链接:https://www.zhihu.com/question/321205293/answer/662068880
  • 最近的CVPR object detection部分, anchor-free大火特火. 基本上都逃不过15年的Densebox和18的CornerNet这两篇文章的思路, 剩下的无非就是如何更高效的用点来表示一个box. Grid-RCNN用NxN个点来表示, ExtremeNet用四个极值点+一个中心点来表示, CenterNet用两个角点+一个中心点来表示, Objects as Points(提出的框架也叫CenterNet)用一个中心点+长宽值来表示, FCOS用点+到框的四个距离来表示....你看这些anchor-free的文章, 精度高的也有, CenterNet更是在coco-testdev上刷到了47的AP, 速度快的也有, Objects as Points可以在保证41.6AP值的情况下达到35ms一帧(GPU Titan V下, 而且输入是512*512). 所以感觉CornerNet-Lite出现的稍微晚了些, 基本上它能做的事情其它框架都可以做. (吐槽一下, 这几篇文章真的大同小异, 如果可以把每篇文章的优点都结合起来, 再优化下, 说不定accurate/speed真的可以都提上去).

cascade 方法

以上是关于anchor_based-anchor_free object detectors的主要内容,如果未能解决你的问题,请参考以下文章