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

2023-05-16

深度学习系列之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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 记一次美团校招内推笔试经历

    2019年4月23日星期二晚上七点 这天刚好项目上生产我负责留守做远程技术支持 留下的还有个重要的原因就是今晚我有一个美团的笔试 七点笔试准时开始 信心满满打开网页地址 美团用的是赛码网来做的笔试题库 xff0c 再次之前收到了邀请码输入进
  • git 推送出现 "fatal: The remote end hung up unexpectedly" 解决方案

    在使用git更新或提交 项目时候出现 34 fatal The remote end hung up unexpectedly 34 原因是推送的文件太大 那就简单了 xff0c 要么是缓存不够 xff0c 要么是网络不行 xff0c 要么
  • 双色球规则及c++实现代码

    双色球规则 xff1a 第一章 总 则 第一条 本规则依据财政部 彩票发行与销售管理暂行规定 和 中国福利彩票 xff08 电脑型 xff09 联合发行与销售管理暂行办法 xff08 以下简称 管理办法 xff09 制定 第二条 中国福利彩
  • 卡尔曼滤波以及Matlab实现_参考书籍_核心剖析_经验分享_EKF(1)

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https mp csdn net mdeditor 1 前言 首先 xff0c 关于卡尔曼滤波理论的定义 种类 算法实现过程步骤以及相关例子方面 xff0c 博主
  • 用JAVA实现MapReduce

    这里的MapReduce实现的是分词计数 pom xml文件 版本号需要跟你自己安装的hadoop版本号一样 hadoop commonhadoop hdfshadoop authhadoop clienthadoop mapreduce
  • 高通导航器软件开发包使用指南(10)

    高通导航器软件开发包使用指南 xff08 10 xff09 8 9位置控制参数8 10状态 机器 进程8 11高度 估算器 图8 12最大加速度偏差8 13电压监控图8 14 att control params xff08 附件控制参数
  • VTK 多平面重建(MPR)及三维切片显示

    在此之前翻阅很多资料 爬过很多的坑 花费不少时间 xff0c 终于还是完成了 xff01 虽然实现地很简单 xff0c 但是大体功能是实现了 后面需要完善功能的话 xff0c 可以用qt与vtk结合开发 MPR MPR multi plan
  • 【实战】从零搭建SSO单点登录服务器 - CAS认证流程

    前言 因系统逐渐增多 xff0c 各个业务系统间无法共享用户状态 xff0c 每个系统都需要用户登录 这对于用户来说很不友好 xff0c 于是需要搭建一个SSO单点登录服务器 xff0c 来做统一的登录 注销 写这个系列的文章有两个目的 x
  • ubuntu18.04安装IntelRealsense D435的SDK及相机标定记录

    写在前面的话 早上去实验室临时被塞的活 xff0c 说让标一下D435这个相机 xff0c 那就做呗 xff01 相机认识 Intel RealSense深度摄像头 D435 xff0c 设备采用USB供电形式 xff0c usb3 0的口
  • PHPStorm 2018版本 破解教程

    破解步骤 1 前提 xff1a 下载好需要的文件 xff08 进入网址后 xff0c 点击download now xff09 PHPStorm xff1a https www jetbrains com phpstorm 点击downlo
  • centos7 安装vnc-server 与卸载

    安装vnc server 前题 Linux桌面程序已安装 安装 vnc server 以root用户运行以下命令来安装vncserver yum install tigervnc server tigervnc server module
  • Ubuntu16.04网络连接正常但是无法使用浏览器上网-浏览器代理设置

    chrome ubuntu16 04 之前使用win10 chrome的时候经常会出现这样的问题 xff0c 但也轻车熟路的解决问题 看下面的图 右上角 设置 高级设置 打开代理设置 选连接 局域网设置关闭代理 就ok了 xff01 ubu
  • 编译记录

    在anaconda中创建虚拟环境 conda create name tf gpu env2 python 61 3 6 查看所有的虚拟环境 conda info envs 连接环境 source activate tf gpu env2
  • 试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法

    对数组的倒置 void SeqList lt DataType gt inversion int i 61 0 j 61 length 1 DataType temp while i lt j temp 61 data i data i 4
  • 通过CentOS开机自启动脚本设置iptables

    背景 xff1a 因业务需求 xff0c 需要在CentOS服务器启动时通过自动执行脚本配置iptables过滤规则 方案 xff1a 1 在写好的自启动脚本set iptables sh的首行 bin bash 下面添加如下两条注释 xf
  • ROS下运行ORB-SLAM2的数据采集存储和提取

    ROS下运行ORB SLAM2的数据采集存储和提取 前提 xff1a 相机图像发布问题解决 目标 xff1a 一边进行SLAM xff0c 一边存储数据流 问题 xff1a 发布什么类型的数据内容 xff1f 如何提取rosbag中的图片和
  • BP神经网络数学推导

    一 前情提要 神经网络一种求解W权值的算法 xff0c 分为正向传播 FP 求损失 xff0c 反向传播 BP 回传误差 xff0c 根据误差值求解权值W梯度更新其权重 xff0c 反复迭代 xff0c 直到找到W最优解 不考虑局部最优 本
  • Nvidia TX2爬坑过程——1、入手刷机教程

    一 资源简介 TX2作为TX1的改进版 xff0c 资源配置相当强劲 1 模组配置 256 core NVIDIA Pascal GPU ARMv8 64 bit Multi Processor CPU Complex Advanced H
  • STM32 驱动开发模式 终极总结:

    1 C 语言编写 LED 灯驱动 的时候 xff0c 每个寄存器的 地址我们都需要写宏定义 xff0c 使用起来非常的不方便 我们在学习 STM32 的时候 xff0c 可以使用 GPIOB gt ODR 这种方式来给 GPIOB 的寄存器
  • 寄存器封装成结构体 终极总结

    1 编写外设结构体 先将同属于一个外设的所有寄存器编写到一个结构体里面 xff0c 如 IO 复用寄存器组的结构体 上述结构体 IOMUX SW MUX Type 就是 IO 复用寄存器组 xff0c 成员变量是每个 IO 对应的复 用寄存

随机推荐