深度学习系列之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.关键点检测方法

   通过定位目标物体的几个关键点来限定它的搜索空间,然后通过角点组合预测中心到边界的距离,形成检测框。
选择角点的原因:因为角点相比中心点更有利于训练的,比如说左上角的点,只会和两条边相关,而中心点要和四条边相关。

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

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

   此类方法在构建模型时将其看作一个点,即目标框的中心点。直接检测物体的中心区域和边界信息,将分类和回归解耦为两个子网格。
缺点:同一个类别中的某些物体的GT中心点,在下采样时会挤到一块,中心点重叠了,结果可能只能检测到一个目标了

   经典论文:
   (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: 如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做回归

   如图(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
12 种 Anchor-free 目标检测综述 – Keypoint-based 篇
Anchor-free目标检测 | 工业应用更友好的新网络(附大量相关论文下载)
awesome-anchor-free-object-detection

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

  1. 吴恩达 深度学习系列--卷积神经网络(Convolutional Neural Networks)-03(目标检测)

    目标检测 3.1 目标定位(Object localization) 3.1.1概念 3.1.2 监督学习任务定义目标标签y 3.2 特征点检测(Landmark detection) 3.3 基于滑 ...

  2. 深度学习(十四)——Softmax详解, 目标检测, RCNN

    https://antkillerfarm.github.io/ Softmax详解 首先给出Softmax function的定义: yc=ζ(z)c=ezc∑Cd=1ezd for c=1,-,C ...

  3. 【深度学习】卷积神经网络应用之双阶段目标检测|R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN

    文章目录 基本概念 一.R-CNN 1. 网络结构 2. 训练流程 3. 测试阶段 4. RNN存在的问题 二.SPP-Net 1. 网络结构 2. 基础知识 共享卷积计算 金字塔池化 Spatial ...

  4. 深度学习实战教程(1)--手机跑目标检测(YOLO,从DarkNet到Caffe再到NCNN完整打通)

    https://github.com/lwplw 这篇打算就直入主题了,YOLO是什么.DarkNet是什么.Caffe是什么.NCNN又是什么-等等这一系列的基础科普这里就完全不说了,牵扯实在太多, ...

  5. 【深度学习】ROI Pooling 和 ROI Align 计算机视觉 目标检测

    文章目录 ROI Pooling和ROI Align: 一篇好的文章 ROI Pooling 如何计算? AdaptiveMaxPool2d 在做啥 Fast RCNN或者Faster RCNN中都使 ...

  6. 自动驾驶采标系列四:基于激光雷达的目标检测方法

        标注猿的第55篇原创        一个用数据视角看AI世界的标注猿   上一篇文章我们讲了基于图像的目标检测技术,但对于标注人员来说这部分内容就相对比较难一些,只是作为一个了解就可以,但是如 ...

  7. Anchor Based和Anchor Free的相爱相杀与ATSS的诞生

    前言 我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anc ...

  8. 深度学习系列之Gaussian_YOLOv3 个人总结

    深度学习系列之Gaussian_YOLOv3 个人总结 https://github.com/jwchoi384/Gaussian_YOLOv3 ​ ICCV 2019会议上 Jiwoong Choi ...

  9. 【AI面试】Anchor based 、 Anchor free 和 no anchor 的辨析

    深度学习的目标检测算法,通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整(回归)区域边界,从而更准确地预测目标的真实边界框(ground-truth boundin ...

  10. 深度学习系列:深度学习在腾讯的平台化和应用实践

    深度学习系列:深度学习在腾讯的平台化和应用实践(一) 莫扎特 2015-01-04 6:05:13 大数据技术 评论(0) 深度学习是近年机器学习领域的重大突破,有着广泛的应用前景.随着Google公 ...

最新文章

  1. VmWare 与 宿主主机通信 STEP BY STEP (适用于刚開始学习的人)
  2. matlab与excel的交互
  3. 基于VLC的播放器开发
  4. 文件上传api——MultipartFile
  5. 设置双核浏览器的浏览模式meta name=“renderer” content=“webkit|ie-comp|ie-stand”
  6. activity(流程引擎)从零入门到实战学习
  7. 从入门到入土(三)RocketMQ 怎么保证的消息不丢失?
  8. 矩阵快速幂的学习(系统的学习)
  9. Java-发送邮件descriptor
  10. Docker 容器启动 查看容器状态 - 四
  11. Wannafly挑战赛25 A.因子
  12. 面试IT公司的时候,程序员的简历应该写多少个项目经验比较合适?
  13. 开机动画desc.txt描述文件的分析
  14. 抖音短视频标题什么样的容易火:国仁楠哥
  15. 切比雪夫插值多项式在非线性电路中的应用与比较
  16. 《喜欢你我也是》最精致程序员上线!
  17. 用python编写吃苹果小游戏
  18. 破解TCP为Windows7下的迅雷提速(图形方式修改)
  19. IDC发布中国企业网盘报告:市场保持高速增长 联想企业网盘蝉联第一
  20. 跟领导谈加薪,聪明的员工都这么说

热门文章

  1. 在robotstudio中使用smart组件喷绘七彩圆环
  2. 一款可以通过经度纬度精确查询天气的工具
  3. Qt添加分割线(很简单的方法)
  4. 【leetcode-贪心】加油站/柠檬水找零/分发糖果/跳跃游戏/分发饼干/种花问题/非递减数列
  5. 松翰单片机SN8P2711AD实现AD转换的C语言程序例子
  6. Windows强制关机之后,自动修复失败,无法开机的问题解决
  7. 房贷计算器移动端接口
  8. java protected 构造方法_java中子类调用父类构造方法注意事项
  9. 职高计算机专业毕业200字自我鉴定,职高计算机专业的自我鉴定
  10. 影子卫士 Shadow Defender 2011