当前位置: 首页 > news >正文

目标检测中的解耦和耦合、anchor-free和anchor-base

 解耦和耦合

写在前面

在目标检测中,objectness(或 objectness score)指的是一个评分,用来表示某个预测框(bounding box)中是否包含一个目标物体。

具体来说,YOLO等目标检测算法需要在每个候选区域(anchor box 或 grid cell)上进行多个任务的预测,比如:

  1. 类别分数:该区域是否属于某个特定类别(例如车、人、狗等)。
  2. 边界框回归参数:用于调整预测的边界框,使其更加贴合目标物体。
  3. objectness:表示该预测框中是否包含物体的概率(即,不关心它是什么物体,只关心是否有物体存在)。

YOLO(You Only Look Once)中的“耦合头”和“解耦头”主要与模型的输出层结构以及任务的分离程度有关,尤其是在分类和回归任务上的处理方式。它们的主要区别在于如何处理不同任务(如分类和边界框回归)之间的耦合程度。具体来说:

1. 耦合头(Coupled Head)

在耦合头中,分类和回归任务使用共享的特征图,并通过一个单一的网络层来同时预测类别和边界框。这意味着分类和回归是耦合在一起的,由同一个网络结构同时进行。这种设计通常能够简化模型的结构和计算量,并且在一定程度上能够让分类和回归任务共享特征,可能在简单任务上具有较好的表现。

  • 优点:
    • 计算效率更高,因为分类和回归任务共享特征和计算资源。
    • 网络结构相对简单,参数更少。
  • 缺点:
    • 分类和回归任务可能相互影响,尤其是在处理复杂目标时,分类和回归的精度可能受到影响。

2. 解耦头(Decoupled Head)

在解耦头中,分类和回归任务被分离为两个不同的分支。通常,会有两个独立的网络分支来分别处理分类和回归任务。每个任务有自己专门的特征提取和预测层,这种设计可以减少分类和回归之间的相互影响,从而在任务上达到更高的精度,尤其是在处理复杂场景时。

  • 优点:
    • 分类和回归的任务相对独立,减少相互干扰。
    • 通常可以提高分类和边界框预测的精度,尤其是对于更复杂的目标检测任务。
  • 缺点:
    • 由于需要两个独立的分支,计算量和参数量增加。
    • 计算效率比耦合头低。

总结

  • 耦合头适合轻量化模型和计算资源有限的情况,追求更高的效率。
  • 解耦头适合更复杂的目标检测任务,追求更高的精度。

anchor-free和anchor-base

Anchor-free 是一种目标检测方法,区别于传统的 Anchor-based 检测方法。Anchor-free 方法不依赖于预设的 Anchor box,而是直接预测目标物体的关键点或中心点来生成边界框。这种方法近年来在目标检测中变得越来越流行,尤其是在 YOLOv4, CenterNet, FCOS 等模型中都有应用。

Anchor-based 方法

在传统的 Anchor-based 方法中,目标检测器会在图像的每个位置放置多个预定义的 Anchor boxes。这些 Anchor boxes 是一组具有不同大小、纵横比的候选框,用于检测不同尺寸的物体。模型通过回归预测来调整这些 Anchor boxes,以拟合目标物体。

缺点:

  • 需要设计和设置 Anchor box 的尺寸、比例,这通常需要根据数据集进行大量的调参。
  • Anchor boxes 数量多,计算成本高。
  • 小物体或大物体可能无法很好地与预定义的 Anchor 匹配,导致检测精度下降。

Anchor-free 方法

Anchor-free 方法的关键思想是摆脱对预定义的 Anchor boxes 的依赖,而是直接从图像的像素、特征图上推断目标的位置和大小。主要有以下几种常见策略:

 

  1. 关键点检测:通过检测物体的关键点或中心点,然后利用这些关键点回归出边界框的参数。例如,CenterNet 就是基于物体的中心点进行检测。

关键点检测Anchor-free 目标检测的一种实现方式,具体通过检测物体的某些关键点(如中心点或角点),从而确定物体的位置和边界框。这与传统的 Anchor-based 方法有显著区别,因为它不依赖预先定义的 Anchor box,而是直接在特征图上推断出物体的几何信息。

让我们逐步解析它的工作原理,尤其是以 CenterNet 为例:

1. 关键点检测的核心思想

传统的 Anchor-based 方法是通过大量的预设框(Anchor box)去拟合物体位置,而关键点检测方法直接通过检测物体的关键点,比如:

  • 中心点(CenterNet):直接预测物体的中心点。
  • 角点(CornerNet):预测物体的左上角和右下角。

物体的这些关键点是目标检测的核心,用来确定物体的位置和边界框。

2. 以 CenterNet 为例:基于中心点的检测

CenterNet 中,检测器会学习每个物体的 中心点。具体步骤如下:

  • 中心点的检测:CenterNet 的输入是图片,它通过卷积神经网络(CNN)生成一个特征图。对于每个物体,网络会预测一个特征点,表示物体的中心点。这个中心点用于回归物体的位置和大小。
  • 边界框的回归:一旦确定了物体的中心点,网络还会预测该中心点到物体的边界的距离。这些距离可以直接用来构造物体的边界框(bounding box)。
    • 具体来说,对于每个中心点,网络会输出该点到边界框四个边界的距离值(即左、右、上、下距离)。
    • 这些距离可以用来计算边界框的大小,从而直接得到物体的完整位置。

3. 关键点检测的优势

  • 不需要 Anchor box:相比于传统的 Anchor-based 方法,关键点检测完全不依赖预定义的 Anchor box,这避免了 Anchor box 尺寸和比例设置的不匹配问题。对于不同大小、形状的物体,关键点检测更加灵活。
  • 减少了计算复杂度:传统 Anchor-based 方法通常需要生成大量的 Anchor boxes,这会带来计算的额外开销。而关键点检测只需要检测图像中的少数几个关键点,大大减少了冗余的候选框数量。
  • 更好的小物体检测:由于关键点检测方法不依赖特定尺寸的框,它在检测非常小的物体时有优势,不需要通过 Anchor box 来匹配大小。

4. 具体例子:CenterNet 如何工作

  • 输入:一张图片。
  • 特征提取:通过卷积神经网络(如 ResNet 或 Hourglass)提取高维特征。
  • 中心点预测:在特征图上,每个像素都会预测是否为物体的中心点,这个任务可以看作是一个分类问题,输出是一个热图(heatmap),每个像素的值表示它是物体中心的概率。
  • 回归边界框:对于每个预测到的中心点,回归出到物体边界的四个距离(即边框的 left、right、top、bottom)。
  • 生成边界框:根据回归的距离值生成最终的边界框。

5. 关键点检测的常见模型

  • CenterNet:通过检测物体的中心点,并回归边界框的尺寸。
  • CornerNet:通过检测物体的角点(左上角和右下角),然后将这些角点连接生成边界框。
  1. 边界框中心点回归:模型直接预测每个像素点相对于目标物体边界的偏移量和尺寸。这是像 FCOS(Fully Convolutional One-Stage Object Detection)这类方法的核心思想。

FCOS 的工作原理

1. 特征提取
  • 输入图像:首先,FCOS 接收一张输入图像。
  • 特征图生成:通过一个卷积神经网络(CNN),如 ResNet 或 VGG,提取图像的高维特征,并生成一个特征图。
2. 像素级别的回归
  • 每个像素点的预测:FCOS 不依赖预定义的 Anchor boxes,而是对特征图上的每个像素进行回归,预测该像素点到目标边界框的四个边界的距离(即左、右、上、下的距离)。
    • 左边界:每个像素点预测到目标的左边界的距离。
    • 右边界:每个像素点预测到目标的右边界的距离。
    • 上边界:每个像素点预测到目标的上边界的距离。
    • 下边界:每个像素点预测到目标的下边界的距离。
  • 目标中心点:除了预测边界框的四个边界距离外,FCOS 还会预测该像素点是否是目标的中心点。对于每个像素点,FCOS 生成一个热图(heatmap),表示该像素点是否为目标中心点的概率。这个热图帮助模型判断目标的存在位置。
3. 生成边界框
  • 从回归值计算边界框:根据每个像素点预测的距离值,FCOS 可以直接计算目标物体的边界框。具体步骤如下:
    • 左边界:通过预测的距离值从像素点向左推算得到目标的左边界。
    • 右边界:通过预测的距离值从像素点向右推算得到目标的右边界。
    • 上边界:通过预测的距离值从像素点向上推算得到目标的上边界。
    • 下边界:通过预测的距离值从像素点向下推算得到目标的下边界。
4. 后处理
  • 去除背景和重叠:FCOS 生成的边界框通过非极大值抑制(NMS)去除冗余的框,确保最终的检测结果准确且唯一。

FCOS 的优点

  1. 不需要 Anchor boxes:FCOS 不依赖于 Anchor boxes,简化了模型的设计和训练过程。无需预定义和调节 Anchor box 的尺寸和比例。
  2. 更高效的计算:由于不需要生成大量的 Anchor boxes,FCOS 在计算上更加高效,减少了冗余计算。
  3. 处理不同尺度的物体:通过回归每个像素点的边界框,FCOS 更加灵活地处理各种尺寸的物体,适应性强。

 

Anchor-free 方法的优点

  1. 无需设计 Anchor boxes:省去了手动设计和调参的工作,简化了模型的设置流程。
  2. 更高的计算效率:由于不需要生成大量的 Anchor boxes,减少了计算开销。
  3. 更自然的目标表示:直接回归关键点、中心点或边界框参数,使得模型更贴近图像本身的几何特性,特别是在处理不同尺寸的物体时,表现得更好。

典型的 Anchor-free 模型

  • CenterNet:通过回归目标物体的中心点,然后预测宽高,从而生成边界框。
  • FCOS:使用每个像素点相对于目标的距离(即边界框的四个边界到当前像素点的距离)来直接回归边界框。
  • CornerNet:通过回归目标物体的左上角和右下角来确定边界框。

 

Anchor-based vs Anchor-free

  • Anchor-based 方法:通过预定义的 Anchor boxes 提供了目标物体的粗略位置和大小,然后通过回归优化这些候选框。
  • Anchor-free 方法:直接预测物体的特征(如中心点、边界)来回归边界框,不依赖预定义的框。

 

相关文章:

目标检测中的解耦和耦合、anchor-free和anchor-base

解耦和耦合 写在前面 在目标检测中,objectness(或 objectness score)指的是一个评分,用来表示某个预测框(bounding box)中是否包含一个目标物体。 具体来说,YOLO等目标检测算法需要在每个候选区…...

git rev-parse

git rev-parse 是 Git 中一个非常有用的命令,用于解析并返回与 Git 对象(如提交、分支、标签等)相关的信息。它可以帮助我们从给定的引用(ref)中解析出 SHA-1 哈希值、路径信息等。这个命令在编写 Git 脚本时尤其有用&…...

【Unity】在Unity 3D中使用Spine开发2D动画

文章目录 内容概括前言下载安装 Spine Pro导入Unity插件Spine动画导入Unity使用展现动画效果展现 内容概括 本文主要讲解 Spine Pro 免(破)费(解)版的安装,以及如何将动画导入到Unity中使用。 前言 通常要用 Spine …...

考试:软件工程(01)

软件开发生命周期 ◆软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标, 具体可分成问题定义、可行性研究、需求分析等。 ◆软件开发时期:就是软件的设计与实现,可分成概要设计…...

数据结构应用实例(三)——赫夫曼编码

Content: 一、问题描述二、算法思想三、代码实现四、小结 一、问题描述 对一篇英文文章,统计各字符(仅限于26个小写字母)出现的次数,并据此进行 Huffman 编码。 二、算法思想 首先,打开文本文件&#xff0…...

关于Spring Cloud Gateway中 Filters的理解

Spring Cloud Gateway中 Filters的理解 Filters Filters拦截器的作用是,对请求进行处理 可以进行流量染色 ⭐增加请求头 例子 spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path/api/**filters:- AddR…...

【实践】应用访问Redis突然超时怎么处理?

目录标题 问题描述分析过程查看监控数据系统监控指标JVM监控指标Redis监控指标分析应用异常单机异常规律集群异常规律统计超时的key 初步结论验证结论访问Redis链路slowlogRedis单节点info all定位redis节点定位异常keybigkeystcpdump定位大key影响 经验总结 问题描述 某产品线…...

Spring Cloud Alibaba核心组件Nacos/Seata/Sentinel

文章目录 Spring Cloud Alibaba介绍Spring Cloud 微服务体系Spring Cloud Alibaba 定位 注册配置中心--Nacos服务治理架构注册中心原理 Nacos介绍Nacos 的关键特性1.服务注册和发现2.动态配置服务3.实时健康监控4.动态DNS服务5.易于集成: Nacos入门示例服务注册与发…...

Ubuntu搭建FTP服务器

1. 首先,我们需要安装和配置xinetd,安装的具体命令如下: sudo apt-get install xinetd 2. 新建tftp工作目录,并添加读、写、执行权限(没有权限后面无法正常访问该文件夹),如下图所示。 3. 安装…...

Redis在单线程下删除大Key会发生什么?怎么删除大Key?

大Key的定义 大Key是指在缓存系统(如Redis)或分布式存储中,单个键(Key)对应的数据量非常大,通常存储的是大块数据结构,例如包含大量数据的哈希表、列表、集合或有序集合。这种大Key往往会对系统…...

《Exploit temporal cues in multi-camera 3D object detection》论文泛读

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4666749915775385601eId2491528568128599808 针对单帧数据含有的信息太少的问题,提出了一种新的方法,BEVDet4D,这种方法可以访问时间线索,并且取得了较好的表现&#xff…...

十四、centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

🌻🌻目录🌻🌻 一、 centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64二、分析错误三、解决方案3.1 检查网络连接3.2 检查DNS设置3.3 检查YUM仓库配置3.3.1 使用官方CentOS镜像配置3.3.2 使用阿里云…...

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件:ThinkPad T15 系统:win10 专业版 qt版本:Qt 5.14.1 , QtCreator 4.11.1 软件界面放了一个QPushButton,一个QVBoxLayout,如下: 主要代码如下,我添加了两条曲线,…...

Python 爬虫入门 - 爬虫 requests 请求

在当今互联网时代,数据的获取变得尤为重要,而网络爬虫作为自动化获取数据的一种方式,受到了越来越多编程爱好者和数据分析人员的青睐。Python 语言以其简洁的语法和丰富的库,成为了实现网络爬虫的首选工具。其中,requests库是一个非常流行且强大的工具,用于发送 HTTP 请求…...

flink中startNewChain() 的详解

在 Apache Flink 中,startNewChain() 是一个与算子链(operator chaining)相关的方法。与 disableChaining() 类似,它允许开发者控制算子链的创建方式,但 startNewChain() 的作用是从当前算子开始创建一个新的算子链&am…...

uniapp 苹果安全域适配

一、使用原生占位(仅App端支持) //在manifest.json 文件中 app-plus 中配置 "safearea": { "background": "#FFFFFF", "bottom": { "offset": "auto" } } 二、不使用原生占位 //&…...

linux使用命令行编译qt.cpp

步骤&#xff1a; mkdir qttestcd qttestvim hello.cpp #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc,char* argv[]) {QApplication a(argc,argv);QLabel label("aaa");label.resize(100,100);label.show()…...

Ubuntu 22.04 LTS 上安装 Docker

单台机器安装docker环境&#xff0c;是为了后面安装open-webui&#xff0c;环境安装比较简单&#xff0c;没有难点&#xff0c;但一定要按步骤走&#xff0c;否则还是会遇到一些问题的。 第 1 步&#xff1a;更新软件包并安装必要软件 运行以下命令&#xff0c;更新软件包索引…...

2024秋季云曦开学考

web ezezssrf 打开环境&#xff0c;代码审计 看起来有点多&#xff0c;要绕过五层 第一层&#xff1a;存在弱比较&#xff0c;使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层&#xff1a;存在强比较&#xff0c;此处使用string限制…...

基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程

一、项目概述 目标和用途 本项目旨在开发一款基于 STM32 控制的自动平衡机器人&#xff0c;结合步进电机和陀螺仪传感器&#xff0c;实现对平衡机器人的精确控制。该机器人可以用于教育、科研、娱乐等多个领域&#xff0c;帮助用户了解自动控制、机器人运动学等相关知识。 技…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...