深度学习系列之Anchor based 和 Anchor free 目标检测方法

深度学习系列之Anchor based 和 Anchor free 的目标检测方法

  ——致敬各路网络无名大神
  (持续更新中…)


文章目录

  • 深度学习系列之Anchor based 和 Anchor free 的目标检测方法
  • 一、Anchor 概述
  • 二、基于Anchor based 的目标检测
  • 三、基于Anchor free 的目标检测
    • 1.关键点检测方法
    • 2.通过目标物体的中心点来定位
  • 四、Anchor free 和 Anchor base 的区别
  • 相关文献:
  • 推荐阅读


一、Anchor 概述

  目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。目标检测算法会判断这些区域是否有目标,是分类任务。调整这些区域到目标真实框是回归任务。
  1. anchor的定义
   anchor也叫做锚,预先设置目标可能存在的大概位置,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。

  2. anchor 的生成
   锚作为一系列先验框信息,其生成涉及以下几个部分:
   (1)用网络提取特征图的点来定位边框的位置;
   (2)用锚的尺寸来设定边框的大小;
   (3)用锚的长宽比来设定边框的形状。

  3.引入anchor的目的
   通过设置不同尺度,不同大小的先验框,就有更高的概率出现对于目标物体有良好匹配度的先验框约束,在锚框的约束下使模型的精准度和召回率都有了质的提升。

二、基于Anchor based 的目标检测

   在同一个像素点上,生成多个不同大小和比例的候选框,覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,然后通过anchor中有没有认识的目标和目标框偏离参考框的偏移量完成目标检测,不再需要多尺度遍历滑窗,极大的提升了速度。两阶段和单阶段目标检测算法均使用。
   二阶段目标检测算法: Faster RCNN、Mask RCNN、Cascade RCNN
  在特征图的每一个点生成大小比例不一的anchor,然后通过RPN对anchor进行筛选
  单阶段目标检测算法: YOLO V2—V4、SSD、RetinaNet
  把原图分为若干个网格,然后通过聚类的方法,每个网格当中得到不同尺寸的anchor,然后再和真实框做一个IOU的比较,得到训练目标
  后处理阶段: 即 NMS(非极大值抑制),通过计算Bbox间的IOU来删除同个目标的重复检测框。
  1.使用anchor的弊端:
  (1)anchor太多,每一个都进行IOU计算,导致运算复杂度增大,产生的参数较多
  (2)anchor的数量相比目标的个数多很多,只有很少部分成为正样本,导致训练正负样本不平衡问题,训练效率低下
  (3)预先设定的anchor尺寸需要根据数据集的不同做改变,预置的锚点大小、比例在检测差异较大物体时不够灵活
  (4)依赖太多的手动设计(长宽比,尺度大小,以及anchor的数量)
  小结:
  1.二阶段算法精度高的原因:
  由于两阶段方法对锚点的细化比一阶段方法多几倍,两阶段方法的结果更准确,而一阶段方法的计算效率更高
  2. 各阶段作用
  训练阶段: 用anchor和真实框做一个编码得到训练目标,预测阶段: 通过anchor和预测出来的偏移量,然后解码得到一个预测框

三、基于Anchor free 的目标检测

   将目标检测转化为关键点检测问题,不用在训练之前对当前训练数据聚类出多个宽高的anchor参数了,基于Anchor-Free的目标检测算法有两种方式:

1.关键点检测方法

   通过定位目标物体的几个关键点来限定它的搜索空间,然后通过角点组合预测中心到边界的距离,形成检测框。选择角点的原因:因为角点相比中心点更有利于训练的,比如说左上角的点,只会和两条边相关,而中心点要和四条边相关。
深度学习系列之Anchor based 和 Anchor free 目标检测方法_第1张图片

   经典论文:
   (1)CornerNet: 通过检测对角(左上、右下)代替anchor box 和 corner pooling layer更好的定位对角,然后组合。
   文章内容: 两个特征检测器,分别检测左上、右下角点,通过Heatmaps找到角点的位置,然后对角点进行分类,再通过Embeddings(同一目标的一对角点的相似度高,不同目标的一对角点的距离大)将这两部分的点处于相同部分的点进行一个组合,从而形成检测框。
   (2)ExtremeNet: 对CornerNet算法的改进,通过串联多个Hourglass模块对每个目标预测5个关键点(上、下、左、右四个极点和一个中心点),然后组合。

2.通过目标物体的中心点来定位

   此类方法在构建模型时将其看作一个点,即目标框的中心点。直接检测物体的中心区域和边界信息,将分类和回归解耦为两个子网格。
深度学习系列之Anchor based 和 Anchor free 目标检测方法_第2张图片

   经典论文:
   (1) CenterNet和FCOS: 通过预测物体中心点及其到边框的距离来表征目标框
  小结
   1.两种Anchor free 方法的区别:
   相同点: 建立在相同的鲁棒关键点估计网络上
   不同点: 不同于CornerNet和 ExtremeNet 在关键点检测后进行组合分组(降低了算法的速度),CenterNet 仅为每个对象提取一个中心点,不需要分组和后处理
   2.anchor free的方法能够在精度上媲美anchor based的方法的原因:
一是FPN,对尺度起到了很好的弥补,不需要用不同尺度的anchor来锁定目标尺寸再进行回归;二是FocalLoss,对中心区域的预测有很大帮助。
   3.使用anchor based和anchorfree算法使用时的选择
如果在训练过程中选择的正负样本保持一致,此时无论是采用基于anchor进行回归还是基于关键点进行回归,得到的检测结果是相近的

四、Anchor free 和 Anchor base 的区别

   1. 两种方式的本质区别在于分类方式不同(如何定义正负样本)以及回归的方式,即两个区别:
   (1)分类方式不同 : 正负样本的选择方式(核心区别)
深度学习系列之Anchor based 和 Anchor free 目标检测方法_第3张图片
   Anchor based: 如RetinaNet基于anchor的回归,首先计算来自不同尺度的anchor box与gt的IoU来确定正负样本;对于每个目标在所有IoU大于阈值k的anchor box中,选择最大的作为正样本,所有IoU小于阈值q的anchor box作为负样本,其余忽略不计;最后针对正样本的anchor回归相对偏移量
   Anchor free: 如FCOS基于center做回归,使用空间和尺度约束将anchor点分配到不同尺度上,通过判断特征图上的点是否落入gt中来确认正负样本,即将物体边框内的所有位置都定义为正样本;最后通过4个距离值和1个 中心点的分数来检测物体。
   (2)回归方式不同: 基于anchor还是point做回归
深度学习系列之Anchor based 和 Anchor free 目标检测方法_第4张图片
   如图(b)RetinaNet回归的是anchor box和gt的4个偏移量。
   如图(c)FCOS回归的是中心点到目标四条边的距离。

   2. 基于滑动窗口的目标检测器有点浪费,因为他们需要枚举出所有可能的对象位置和尺寸
  小结
   1. 基于anchor做位置回归,那么检测精度会受限于anchor的宽高设计,如上图第一行,如果anchor设计的过小,与gt计算IoU时会因为重叠率小于阈值而被作为负样本。造成的影响不仅包括了正样本个数的减少,还有负样本噪声的增加。


相关文献:

[1] CornerNet
[2] ExtremeNet
[3] Hourglass网络
[4] FCOS V1
[5] FCOS V2
[6] Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Sele

推荐阅读

Anchor-free目标检测综述 – Keypoint-based篇
基于密集点检测的anchor-free算法总结
目标检测中的anchor-base与anchor-free
目标检测算法——anchor free

你可能感兴趣的:(深度学习,目标检测,计算机视觉)