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 方法

相关文章
相关标签/搜索