YOLO系列--Anchor Based Anchor Free

一、Anchor based

1.1 Anchor的定义

Anchor也被称为锚框,预先设置目标的大概位置,然后再在这些预设框的基础上进行精细化的调整。调整过程被包括分类 判断预设框是属于正样本+ or 负样本-和回归调整预测框的位置。

1.2 Anchor的产生

Anchor box是指在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标的主要分布+长款尺度。在训练时,由这些Anchor在特征图上滑动提取n个候选框,再做进一步的分类+回归。

Anchor based类的算法的主要步骤有:

  1. 生成Anchor box
  2. 确定正负样本
  3. 回归相对偏移量
  4. 分类目标类别

1.3 Anchor based的优缺点

优点:
可以产生密集的anchor box,使得网络可以直接进行目标分类和边界框回归。提高了目标的召回能力。
缺点:
预定义anchor box时,需要设定很多超参数(如尺度、长宽比等参数)。这些超参数的设定会影响检测性能。另外anchor based 的方法也会产生很多冗余的框,增加了计算量和内存消耗。

二、Anchor Free

Anchor Free即它不需要预设的anchor box, 它将目标检测转化为关键点检测的问题。不需要在训练之前对训练数据聚类出多个anchor box。基于Anchor Free的目标检测算法有两种方式:通过关键点检测的方法 & 通过目标物体中心定位的方法

2.1通过关键点检测方法

它是通过目标物体的几个关键点(如左上、右下)来限定它的搜索空间,然后通过角点组合预测中心到边界的距离,进而形成检测框。

应用举例:
CornerNet/CornerNet-lite:使用两个特征检测器检测左上角点+右下角点,然后对角点进行分类(角点匹配分类+角点类别分类),再通过Embedding将处于同一部分的点进行一个组合,从而形成检测框。

2.2 通过目标物体中心来定位

此类方法在构建模型时,将目标看做为一点点,即目标框的中心点。预测中心点到GT边界的距离。该方法将检测解耦为两个头。
通过目标物体中心来定位的方法会将中心点预测和分类任务结合在一起,就不需要进行关键点检测后的分组操作。

2.3 Anchor Free的优缺点

优点:
Anchor free的优点是不需要预设anchor, 只需要对不同尺度特征图的目标中心点和宽高进行回归,减少了计算量。

同时,anchor free也可以避免一些由于anchor设置不合理导致的漏检和重复检测的问题。

缺点:
由于每个位置只预测一个框,可能会导致一些重叠或遮挡区域无法被检测。另外,需要设置一些特殊的损失函数或结构来提高精度和稳定性。

三 Anchor Based和Anchor Free的区别

  1. 是否使用预定义的候选框
  2. 正负样本的选择方式不同:
    Anchor based通常通过将预测框与GT做IoU来确定正负样本。大于IoU阈值的被作为正样本,小于IoU阈值的作为负样本。其余的忽略不计。
    Anchor free通过判断特征图上的点是否落GT框来确定正负样本,即将落入GT框内的所有位置都定义为正样本;最后通过4个距离值和一个中心点来检测物体。
  3. 回归方式不同
    Anchor based是通过回归anchor box的4个偏移量(x,y,w,h)。
    Anchor free是通过回归中心点到目标框四条边的距离。

参考资料

深度学习系列之Anchor based 和 Anchor free 目标检测方法
Anchor based and Anchor free(无锚VS有锚)【总结】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长尾分布(Long-tailed Distribution)

长尾分布( L o n g − t a i l e d D i s t r i b u t i o n Long-tailed\ Distribution Long−tailed Distribution)是统计学和概率论中的一个重要概念,用于描述一组数据中尾部(即远离均值的部分)包含了相对较多极端值…

【Linux基础】SSH登录

SSH简介 安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…

LeetCode 算法:二叉树的最大深度 c++

原题链接🔗:二叉树的最大深度 难度:简单⭐️ 题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,…

【高考选专业 | 家长篇】2024,计算机何去何从?小P老师带你看

目录 2024年,计算机相关专业还值得选择吗?1.行业竞争现状2.专业前景分析 2024年,计算机相关专业还值得选择吗? 随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。有人欢喜&#x…

如何在Java中实现高效的缓存机制

如何在Java中实现高效的缓存机制 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 在大多数软件系统中,缓存机制是提高性能和响应速度的关键技…

操作系统真象还原:用户进程

第11章-用户进程 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 11.1 为什么要有任务状态TSS Linux 任务切换未采用 Intel 的做法,而是用了一套自己的方法,只是用了 TSS 的一小部分功能。 操作系统最直接控制的就是 CPU&…

ubuntu22.04笔记: 更换为阿里源

没有按照LTS 版本 会遇到下面问题: 参考:https://zhuanlan.zhihu.com/p/691625646 Ubuntu 22.04代号为:jammy Ubuntu 20.04代号为:focal Ubuntu 19.04代号为:disco Ubuntu 18.04代号为:bionic Ubuntu …

对于C++ 程序员来说,35岁魔咒是否存在?

大家常说程序员职业生涯会在35岁左右遇到所谓的“35岁魔咒”。这意味着在这个年龄段,程序员可能会面临就业不稳定或职业发展的挑战。对于C程序员来说,这个问题更加引人关注。 随着时间的推移,技术行业不断演进,新的编程语言层出不…

vue上传文件拿到File,下载文件到本地

vue中使用upload组件上传pdf文件,拿到File内容后,下载pdf文件到本地vue中根据url下载pdf文件到本地 File文件内容的格式 注意:如果使用iview的upload组件上,要获取File文件,需要在before-upload钩子上获取 async down…

Ubuntu iso 镜像下载 步骤截图说明

Ubuntu镜像下载,在这个网址: Enterprise Open Source and Linux | Ubuntu 步骤如下图所示: 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本&#xf…

风速预测 | 基于MATLAB的无迹卡尔曼滤波算法UKF、SVR-UKF、ANN-Kalman等时间序列风速预测模型

基本描述 基于MATLAB的无迹卡尔曼滤波算法UKF、SVR-UKF、ANN-Kalman等时间序列风速预测模型 模型步骤 时间序列风速预测模型基于MATLAB的无迹卡尔曼滤波算法(Unscented Kalman Filter, UKF)、SVR-UKF(Support Vector Regression - Unscent…

STM32学习之一:什么是STM32

目录 1.什么是STM32 2.STM32命名规则 3.STM32外设资源 4. STM32的系统架构 5. 从0到1搭建一个STM32工程 学习stm32已经很久了,因为种种原因,也有很久一段时间没接触过stm32了。等我捡起来的时候,发现很多都已经忘记了,重新捡…

【Java反射】getDeclaredField(String name) 和 getField(String name)区别

getDeclaredField(String name) 和 getField(String name) 都是Java反射API中用于获取类字段(成员变量)的方法,但它们之间存在一些关键的区别: getDeclaredField(String name) 功能:这个方法返回的是声明在该类中的指…

【驱动篇】龙芯LS2K0300之按键驱动

实验过程 实验目的: 在龙芯开发板上面验证GPIO按键的输入过程 ① 根据原理图连接按键板 ② 将4个i2c引脚的功能复用为GPIO ③ 注册input设备驱动,绑定中断处理函数,使用定时器消抖 原理图 4个按键引脚:CPU_I2C0_SCL -> G…

数据清洗过程

数据清洗是数据预处理的一个重要步骤,它涉及到识别和纠正(或删除)数据集中的错误、重复、不一致或缺失的信息。 数据清洗方法 根据清洗操作的层次分为基于模式层(Schema-Level)的方法和基于实例层(Instan…

transformer中的build_attention_mask

build_attention_mask 方法的作用是构建一个因果注意力掩码,用于屏蔽 Transformer 模型中的未来位置。 因果注意力掩码的工作原理 因果注意力掩码通过将未来位置的注意力权重设置为负无穷大,从而确保这些位置的注意力得分在 softmax 计算中接近于零。具…

sqlalchemy event监听

在 SQLAlchemy 中,event 系统允许你监听数据库引擎、会话、映射类等对象上的事件,并在这些事件发生时执行自定义的代码。这对于在 SQL 语句执行前后、对象加载、对象刷新等时刻执行特定的逻辑非常有用。 要使用 SQLAlchemy 的 event 系统,你…

爬虫经典案例之爬取豆瓣电影Top250(方法一)

简介:主要使用bs4、request、pandas等模块,实现数据的爬取和存储。 目前存在一点小问题,就是个别电影的导演、演员、上映年份和地区等信息与大部分电影的这些信息的格式有细微差别,导致正则表达式无法正常匹配到个别电影的信息&am…

解析cJSON数组

json串: { "list":[ "hello","world" ] } 代码 : int func(char *sn) { int ret 0; cJSON *root, *list; FILE *fp fopen("a.txt", "r"); if(!fp) { printf("open s…

并发的概念

并发是指在同一时间间隔内同时执行多个任务或处理多个事件的能力或现象。在计算机科学中,特别是在多任务处理系统中,"并发"通常用于描述系统能够在同一时间段内处理多个任务或操作的能力。 并发并不意味着同时执行多个任务,而是通…