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

news/2025/2/7 6:30:03/

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是一种基于中心点的目标检测算法,其损失函数包括中心点热图损失和边界框损失两部分。

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

Lcent=1N∑i=1N∑j=1H×W×K(yi,jcentlog⁡(pi,jcent)+(1−yi,jcent)log⁡(1−pi,jcent))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))

其中,NNN是样本数量,HHHWWW是热图的高度和宽度,KKK是一个常数,yi,jcenty_{i,j}^{cent}yi,jcentpi,jcentp_{i,j}^{cent}pi,jcent分别是第iii个样本的第jjj个位置的真实值和预测值。

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

Lbox=1N∑i=1N∑j=1H×W×K[yi,jobj(αLi,jbox+βLi,jsize)]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)]

其中,yi,jobjy_{i,j}^{obj}yi,jobj是第iii个样本的第jjj个位置是否包含目标的标志位,Li,jboxL_{i,j}^{box}Li,jboxLi,jsizeL_{i,j}^{size}Li,jsize分别是预测的边界框位置和大小与真实值之间的平方根误差,α\alphaαβ\betaβ是常数。

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

L=Lcent+λLboxL = 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损失可以通过以下公式计算:

LSDIoU=1−IoU+14π2∑k=1Ke−(dk2/σ)NkL_{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/σ)

其中,IoUIoUIoU是预测框和真实框之间的IoU,dkd_kdk是预测框和第kkk个真实框之间的距离,σ\sigmaσ是一个常数,NkN_kNk是第kkk个真实框内部的像素数。

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

D−IoU=1−IoUD-IoU = 1 - IoUDIoU=1IoU

其中,IoUIoUIoU是预测框和真实框之间的IoU。

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

Soft−IoU=14π2∑k=1Ke−(dk2/σ)NkSoft-IoU = \frac{1}{4\pi^2}\sum_{k=1}^{K}\frac{e^{-(d_k^2/\sigma)}}{N_k}SoftIoU=4π21k=1KNke(dk2/σ)

其中,dkd_kdk是预测框和第kkk个真实框之间的距离,σ\sigmaσ是一个常数,NkN_kNk是第kkk个真实框内部的像素数。

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

LSDIoU=αD−IoU+(1−α)Soft−IoUL_{SDIoU} = \alpha D-IoU + (1-\alpha)Soft-IoULSDIoU=αDIoU+(1α)SoftIoU

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


http://www.ppmy.cn/news/44768.html

相关文章

代码随想录训练营第56天|583.两个字符串的删除操作、72.编辑距离

583.两个字符串的删除操作、72.编辑距离 583.两个字符串的删除操作 思路1–最长公共子序列 对于该题,也许我们可以先求出两个字符串的最长公共子序列,让这两个序列变成这个最长公共子序列即可,这样直接用两个字符串的长度之和减去最长公共…

Vue学习笔记(4. 生命周期)

1. 生命周期写法(vue2与vue3比对) 创建前:vue3 setup, vue2 beforeCreate //组件创建前执行的函数 创建后:vue3 setup, vue2 created //组件创建后执行的函数 挂载前:vue3 onBeforeMount, vue2 beforeMount //挂…

算法时间复杂度计算

目录 1.时间复杂度计算 1.1 时间复杂度例题 1.1.1例题 1.1.2例题 1.1.3例题 1.1.4例题 1.2时间复杂度leetcode例题 1.时间复杂度计算 首先,我们需要了解时间复杂度是什么:算法的时间复杂度是指算法在编写成可执行程序后,运行时需要耗费…

Java Menu

基本数据类型 Read More 【待重构】java,ruby,mysql 数据类型 运算符 对照学习笔记 和 equals 区别是什么? hashCode() 和 equals() 的关系List.equals和CollectionUtils.isEqualCollection的区别equals、Objects.equals、Objects.deepEquals区别和联系 Java三大特性…

MATLAB 不同格式点云文件的读取与显示(1)

不同格式的点云文件读取与显示(1) 一、背景介绍1.点云数据结构2.文件格式介绍2.1.ply文件2.2.pcd文件2.3.las文件2.4.txt文件二、不同格式文件读取与显示1.ply格式文件2.pcd格式文件3.txt格式文件三、其他操作1.修改显示背景色2.添加图例的显示3.improtdata(teapot.txt)报错一…

联诚发携多款创新产品及解决方案惊艳亮相ISLE 2023展!

这里写自定义目录标题4月7日-9日,ISLE 2023国际智慧显示及系统集成展览会在深圳国际会展中心(宝安新馆)隆重举行。来自全球各地1000余家企业参与展出,展出面积达8万㎡,吸引了众多业内专家、企业家以及广大观众前来观看…

API 接口应该如何设计?如何保证安全?如何签名?如何防重?

说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢&am…

电子招标采购系统:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…