ObjectBox一种基于中心点的无锚点目标检测方法

news2024/12/28 5:01:06

ObjectBox: From Centers to Boxes for Anchor-Free Object Detection

论文地址:https://arxiv.org/pdf/2207.06985.pdf
官方代码:https://github.com/MohsenZand/ObjectBox
基于中心点的无锚点目标检测方法是一种目标检测方法,其思路是将目标看作是由中心点和边界框组成的,通过预测目标中心点和边界框的偏移量来实现目标检测,而不需要使用传统目标检测方法中使用的锚点(anchor)。

传统的目标检测方法通常使用锚点来预测目标框的位置和大小,锚点是一组预设的框,覆盖了不同尺度和长宽比的目标,模型通过锚点和目标框之间的重叠程度来确定目标框的位置和大小。但是锚点的设计和选择通常需要大量的手动调整和实验,而且对各种尺度和长宽比的目标不够灵活。
基于中心点的无锚点目标检测方法则采用了一种不需要锚点的方法,模型首先预测出每个像素点是否包含目标中心点,然后根据中心点预测出目标边界框的位置和大小。具体来说,模型包括两个分支:中心预测分支和边界框预测分支。中心预测分支用于预测每个像素点是否包含目标中心点,边界框预测分支则用于预测目标边界框的位置和大小。

相比于传统的锚点方法,基于中心点的无锚点目标检测方法具有更加灵活、更加高效和更加准确等优点,近年来在目标检测领域得到了广泛的研究和应用
"ObjectBox: From Centers to Boxes for Anchor-Free Object Detection"是一篇发表在2021年的论文,提出了一种基于中心点的无锚点目标检测方法,即ObjectBox。

传统的目标检测方法通常使用锚框(anchor)来预测目标框的位置和大小,但是锚框的设计和选择通常需要大量的手动调整和实验,而且对各种尺度和长宽比的目标不够灵活。ObjectBox则采用了一种不需要锚框的方法,通过预测目标中心点和边界框的偏移量来实现目标检测。

ObjectBox的主要思路是将目标看作是由中心点和边界框组成的,其中中心点表示目标的位置,边界框表示目标的大小和形状。模型首先预测出每个像素点是否包含目标中心点,然后根据中心点预测出目标边界框的位置和大小。具体来说,ObjectBox模型包括两个分支:中心预测分支和边界框预测分支。中心预测分支用于预测每个像素点是否包含目标中心点,边界框预测分支则用于预测目标边界框的位置和大小。

相比于传统的锚框方法,ObjectBox具有以下优点:

更加灵活:ObjectBox不需要预定义锚框,可以自适应地检测各种尺度和长宽比的目标。

更加高效:ObjectBox的中心预测分支可以减少不必要的计算,从而提高检测速度。

更加准确:ObjectBox可以更准确地定位目标,从而提高检测精度。

实验证明,ObjectBox在多个目标检测数据集上的表现都优于传统的锚框方法,具有很好的应用前景。
在这里插入图片描述ObjectBox是一种基于中心点的无锚点目标检测方法,其算法思路如下:

  1. 输入:给定一张图像,需要检测其中的目标。目标的类别和数量是不确定的。
  2. 特征提取:首先使用卷积神经网络(CNN)对输入图像进行特征提取,生成图像特征图。
  3. 中心预测分支:在特征图上,使用一个卷积层和一个sigmoid激活函数,生成一个与特征图大小相同的2维矩阵,表示每个像素点是否包含目标中心点的概率。这个矩阵被称为中心热图(center
    heatmap)。
  4. 边界框预测分支:在特征图上,使用一个卷积层和一个线性激活函数,生成一个与特征图大小相同的4维张量,表示每个像素点对应的目标边界框的位置和大小偏移量(通常是相对于中心点的偏移量)。这个张量被称为边界框回归(bbox regression)张量。
  5. 检测:根据中心热图,找出所有的目标中心点,并结合边界框回归张量,计算出每个目标的边界框位置和大小。
  6. 后处理:对检测结果进行后处理,包括非极大值抑制(NMS)和分类器阈值等处理,以提高检测精度和减少误检率。

ObjectBox算法的主要优点是不需要预定义锚点,可以自适应地检测各种尺度和长宽比的目标,从而更加灵活、高效和准确。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在ObjectBox算法中,L、T、R分别表示目标边界框的左、上、右三个边界的位置,其真实值和预测值可以通过以下方式获取:

  1. 真实值:对于每个目标,在训练时可以通过标注框(ground truth
    box)来获取其真实的边界框位置和大小信息。标注框通常由左上角和右下角两个点的坐标表示,可以通过计算其左、上、右、下四个边界的位置来得到L、T、R、B的真实值。
  2. 预测值:在预测时,模型输出的边界框回归张量表示的是相对于中心点的位置和大小偏移量,需要结合中心点的位置和图像特征图的尺度等信息才能计算出绝对位置。具体来说,可以先在中心热图中找到中心点的位置,然后根据边界框回归张量计算得到目标边界框的位置和大小。最终可以得到目标边界框的左、上、右三个边界的位置,即L、T、R的预测值。

需要注意的是,在进行边界框回归时,需要对预测的位置和大小偏移量进行限制,以避免越界或生成不合理的边界框。同时,在进行后处理时,还需要对预测的边界框进行NMS等处理,以进一步提高检测精度和减少误检率。
在这里插入图片描述
在这里插入图片描述在训练目标检测模型时,正负样本的分配是非常关键的一步,通常采用的方法有两种:基于锚点的方式和基于中心点的方式。

基于锚点的正负样本分配方法是将锚点与真实目标框进行匹配,根据匹配程度分配正负样本。具体来说,对于每个锚点,可以计算它与所有真实目标框的IoU值,将IoU值最大的目标框与该锚点进行匹配。匹配成功的锚点被标记为正样本,如果IoU值小于一定阈值则被标记为负样本。该方法的优点是简单、快速,但是需要手动设置锚点的尺度和长宽比,不够灵活。

基于中心点的正负样本分配方法不需要使用锚点,而是以中心点为基础,根据中心点的位置和目标的大小,动态地生成正样本和负样本。具体来说,将每个目标的中心点作为正样本,计算与其IoU值大于一定阈值的边界框作为正样本,与其IoU值小于一定阈值的边界框作为负样本。这种方法的优点是不需要手动设置锚点,可以适应各种尺度和长宽比的目标,但是在计算时需要对中心点和边界框的位置和大小进行限制,以避免生成不合理的框。

无论是哪种方法,都需要注意正负样本的平衡,通常采用的方法是在训练时采用随机采样的方式,使得正负样本的比例接近1:1,以避免过度拟合或欠拟合。同时,还可以采用多尺度训练、数据增强等方法,以进一步提高模型的性能和鲁棒性

在这里插入图片描述ObjectBox和YOLOv5都是目标检测领域比较流行的算法,它们在目标检测的实现、性能和特点上都存在一些差异。

实现方式:
ObjectBox采用了无锚点的方式进行目标检测,不需要预定义锚点,可以自适应地检测各种尺度和长宽比的目标。而YOLOv5采用了锚点的方式进行目标检测,需要手动设置不同尺度和长宽比的锚点。

模型结构:
ObjectBox使用了中心热图和边界框回归张量来预测目标中心点和边界框,而YOLOv5则采用了卷积神经网络直接预测目标的中心点和边界框。

后处理方式:
ObjectBox在预测时使用了非极大值抑制(NMS)和类别置信度阈值等方法进行后处理,以减少误检率和提高检测精度。而YOLOv5则使用了类别置信度和框置信度的加权和来对检测结果进行筛选和排序。

性能表现:
ObjectBox在一些标准数据集上取得了较好的结果,比如COCO数据集上的mAP指标可以达到54.6%,相比于一些其他的目标检测算法有一定优势。而YOLOv5在速度和精度上表现都比较优秀,速度可以达到140 FPS,同时精度也比较高。

总的来说,ObjectBox和YOLOv5都是目标检测领域比较流行的算法,它们在实现方式、性能和特点上都有所不同,具体选择哪种算法应根据具体场景和需求来进行评估和选择。
在这里插入图片描述ObjectBox是一种基于中心点的目标检测算法,其损失函数包括中心点热图损失和边界框损失两部分。

中心点热图损失:
中心点热图损失用于预测目标的中心点位置。对于每个目标,算法会将其中心点位置映射到热图上,并用高斯分布来进行编码。具体地,对于每个目标,中心点热图损失可以通过以下公式计算:

L c e n t = 1 N ∑ i = 1 N ∑ j = 1 H × W × K ( y i , j c e n t log ⁡ ( p i , j c e n t ) + ( 1 − y i , j c e n t ) log ⁡ ( 1 − p i , j c e n t ) ) L_{cent} = \frac{1}{N}\sum_{i=1}^{N}\sum_{j=1}^{H\times W\times K}(y_{i,j}^{cent}\log(p_{i,j}^{cent}) + (1-y_{i,j}^{cent})\log(1-p_{i,j}^{cent})) Lcent=N1i=1Nj=1H×W×K(yi,jcentlog(pi,jcent)+(1yi,jcent)log(1pi,jcent))

其中, N N N是样本数量, H H H W W W是热图的高度和宽度, K K K是一个常数, y i , j c e n t y_{i,j}^{cent} yi,jcent p i , j c e n t p_{i,j}^{cent} pi,jcent分别是第 i i i个样本的第 j j j个位置的真实值和预测值。

边界框损失:
边界框损失用于预测目标的边界框位置。对于每个目标,算法会预测其左上角和右下角的坐标,并用平方根误差(Smooth L1 Loss)来计算损失。具体地,对于每个目标,边界框损失可以通过以下公式计算:

L b o x = 1 N ∑ i = 1 N ∑ j = 1 H × W × K [ y i , j o b j ( α L i , j b o x + β L i , j s i z e ) ] L_{box} = \frac{1}{N}\sum_{i=1}^{N}\sum_{j=1}^{H\times W\times K}[y_{i,j}^{obj}(\alpha L_{i,j}^{box} + \beta L_{i,j}^{size})] Lbox=N1i=1Nj=1H×W×K[yi,jobj(αLi,jbox+βLi,jsize)]

其中, y i , j o b j y_{i,j}^{obj} yi,jobj是第 i i i个样本的第 j j j个位置是否包含目标的标志位, L i , j b o x L_{i,j}^{box} Li,jbox L i , j s i z e L_{i,j}^{size} Li,jsize分别是预测的边界框位置和大小与真实值之间的平方根误差, α \alpha α β \beta β是常数。

最终的损失函数可以通过将中心点热图损失和边界框损失加权和来计算。

L = L c e n t + λ L b o x L = L_{cent} + \lambda L_{box} L=Lcent+λLbox

其中, λ \lambda λ是一个常数,用于平衡两部分损失。在训练过程中,可以使用反向传播算法来计算梯度,并使用优化器来更新模型参数。
在这里插入图片描述SDIoU(Soft D-IoU)是一种用于边界框回归的损失函数,它可以更好地反映目标之间的重叠情况,从而提高目标检测的精度。

SDIoU损失函数由两部分组成:D-IoU和Soft-IoU。其中,D-IoU是传统的IoU(Intersection over Union)损失,用于衡量预测框和真实框之间的重叠程度;Soft-IoU是一种平滑版本的IoU,用于衡量预测框和其他真实框之间的重叠程度。

具体地,SDIoU损失可以通过以下公式计算:

L S D I o U = 1 − I o U + 1 4 π 2 ∑ k = 1 K e − ( d k 2 / σ ) N k L_{SDIoU} = 1 - IoU + \frac{1}{4\pi^2}\sum_{k=1}^{K}\frac{e^{-(d_k^2/\sigma)}}{N_k} LSDIoU=1IoU+4π21k=1KNke(dk2/σ)

其中, I o U IoU IoU是预测框和真实框之间的IoU, d k d_k dk是预测框和第 k k k个真实框之间的距离, σ \sigma σ是一个常数, N k N_k Nk是第 k k k个真实框内部的像素数。

D-IoU可以通过以下公式计算:

D − I o U = 1 − I o U D-IoU = 1 - IoU DIoU=1IoU

其中, I o U IoU IoU是预测框和真实框之间的IoU。

Soft-IoU可以通过以下公式计算:

S o f t − I o U = 1 4 π 2 ∑ k = 1 K e − ( d k 2 / σ ) N k Soft-IoU = \frac{1}{4\pi^2}\sum_{k=1}^{K}\frac{e^{-(d_k^2/\sigma)}}{N_k} SoftIoU=4π21k=1KNke(dk2/σ)

其中, d k d_k dk是预测框和第 k k k个真实框之间的距离, σ \sigma σ是一个常数, N k N_k Nk是第 k k k个真实框内部的像素数。

最终的SDIoU损失函数可以通过将D-IoU和Soft-IoU加权和来计算:

L S D I o U = α D − I o U + ( 1 − α ) S o f t − I o U L_{SDIoU} = \alpha D-IoU + (1-\alpha)Soft-IoU LSDIoU=αDIoU+(1α)SoftIoU

其中, α \alpha α是一个常数,用于平衡两部分损失。在训练过程中,可以使用反向传播算法来计算梯度,并使用优化器来更新模型参数。
在这里插入图片描述

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

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

相关文章

DJ编曲用什么软件,DJ编曲教需要哪些步骤

随着现在人们的生活水平不断提高,我们的精神生活也越来越丰富,对于现在的年轻人来说,DJ舞曲是一个较受欢迎的领域,有许多年轻人对DJ这个职业感兴趣,想要深入了解DJ编曲这份工作,那么今天我们就来说一说DJ编…

300元买什么蓝牙耳机性价比高?300左右性价比高的蓝牙耳机推荐

TWS耳机已经成了很多人生活的必需品,如今的耳机在设计、功能、体验等方面都非常完善,拥有一副TWS耳机似乎已经成为时尚的标志,尤其是年轻群体,耳机既是听歌、娱乐的主力设备,也是穿搭风格、个性的体现,下面…

JDBC事务 Hibernate事务 EJB事务详解

🏆今日学习目标: 🍀JDBC事务 Hibernate事务 EJB事务详解 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你…

【学习笔记】Integral Human Pose Regression

【学习资料】一文总结Integral Pose Regression方法的方方面面 - 知乎(总结的很到位,一定要去看) 1.两种基本方法的对比 1.解码方式 softmax和argmax的区别: 由于深度神经网络中的下采样步骤,热图的分辨率低于输入…

如何在电脑本地下载镜像重装系统

现在网上随处可以下载操作系统,下载下来的是镜像系统,很多朋友都不知道电脑镜像重装系统是什么意思,怎么用镜像重装系统,今天小编就给大家带来了电脑镜像重装系统是什么意思的相关解答,一起往下看。 电脑镜像重装系统是…

从FPGA说起的深度学习(七)-循环并行化

这是新的系列教程,在本教程中,我们将介绍使用 FPGA 实现深度学习的技术,深度学习是近年来人工智能领域的热门话题。在本教程中,旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…

不良事件上报系统源码开发,不良事件上报系统源码

不良事件管理系统源码,有演示,支持二开,可正常上线运营。 相关技术:PHPvscodevue2elementlaravel8mysql5.7 文末获取联系! 医院安全不良事件上报系统,对患者安全(不良)事件实施全过…

微分方程的基本概念(通解、特解,线素场)

微分方程的基本概念(通解、特解,线素场)1 微分方程的定义 同学们大家好,今天我们来学习微分方程的基础概念。 微分方程就是含有导数的方程,例如: 它就含有导数 ,因此它就是一个微分方程。而我们知道导数的写法不止一…

androidstudio虚拟机运行react-native项目踩坑指南

androidstudio虚拟机运行react-native项目踩坑指南安装JDK安装android studio配置环境变量新建虚拟机新建RN项目运行项目本文详细的记录了照react-native官网文档运行项目踩到的所有坑,诚然,官网只介绍了每一步,最后确实是可以正常运行项目&a…

VS2022配置Opencv贴心教程

所用VS2022是官网Professional版本,OpenCV版本是4.7.0 一、下载OpenCV 官网下载地址:Releases - OpenCV 选择Windows版本下载并解压到本地磁盘,建议路径不带中文,我的解压安装地址是: C:\opencv 二、配置Windows环…

快速部署个人-ChatGPT Next Web

前提:要有梯子、谷歌账号。 目录 一、源码地址: 二、演示地址: 三、获取API密钥 四、 部署 五、重新部署 一、源码地址: GitHub - Yidadaa/ChatGPT-Next-Web: One-Click to deploy well-designed ChatGPT web UI on Verc…

1.Shell编程自动化之Shell编程基础

一、Shell可以用来做什么 1.自动化批量系统初始化程序; 2.自动化批量软件部署程序; 3.应用程序管理; 4.日志分析处理程序; 5.自动化备份恢复程序; 6.自动化信息采集及监控程序; 7.自动化管理程序&am…

Python数据结构-----leetcode232.用栈实现队列

目录 前言: 方法讲解 示例: 代码实现 232. 用栈实现队列 前言: 我们都知道队列的特征是先进先出,就跟排队一样先到先得,而栈的特征是后进后出,那这里我们怎么去通过两个栈来实现一个队列的功能呢&#xf…

GitHub和Gitee的源码下载

1.使用clone命令下载 如果本地安装了Git环境的话,可以直接在命令行中使用git clone命令把仓库中的文件全部下载到本地。 通过GitHub下载源码,执行如下命令: git clone https://github.com/******.git其中后面下载链接可以从项目下图处查看:…

excel动态获取sheet页单元格内容

1、问题描述 如下图所示,名称列可能是动态赋值的,名称列的内容有对应新的sheet页,如名称为PJ1及其PJ1的sheet页,最终需要获取PJ1的sheet页的B1单元格的内容。 如下图所示,是要获取PJ1的sheet页的B1的值。 2、解决办法…

Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决

一、前言 如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标指针居然变成了繁忙,但是当你将鼠标位置从句柄控件中移到外面的时…

瑟瑟发抖吧~OpenAI刚刚推出王炸——引入ChatGPT插件,开启AI新生态

5分钟学会使用ChatGPT 插件(ChatGPT plugins)——ChatGPT生态建设的开端ChatGPT插件是什么OpenAI最新官方blog资料表示,已经在ChatGPT中实现了对插件的初步支持。插件是专门为以安全为核心原则的语言模型设计的工具,可帮助ChatGPT…

电脑CPU/GPU处理器知识普及

处理器知识普及 处理器主要分为两种:CPU与GPU,二者针对不同的业务进行工作; CPU主要处理数量小、难度大的任务,能比较好的处理单线程任务; GPU主要处理数量达,难度小的任务,比如图形渲染、多线…

C语言实现三子棋教学

本篇博客会教你如何使用C语言实现三子棋。主要包含以下步骤: 初始化棋盘。打印棋盘。玩家下棋。电脑下棋。判断输赢 0.预备工作 先定义一些符号,后面会用到。主要是棋盘的大小(行数列数),以及棋子。 #define ROW …

skvideo.io.vread无法读取视频(九天毕生版)

Vread无法读取视频 使用九天GPU时遇到的错误以及解决方法: 、vread无法读取视频 需要下载ffmpeg的exe(从网上找) 下载ffmpeg.exe(一共三个)后将exe的上级目录(bin)文件路径添加到系统路径中(…