yolo增加Shape-IoU,完美超越SIoU/EIoU/CIoU

论文地址:https://arxiv.org/pdf/2312.17663.pdf

代码地址:GitHub - malagoutou/Shape-IoU

摘要 作为检测定位分支的重要组成部分,边界框回归损失在目标检测任务中起着重要作用。现有的边界框回归方法通常考虑GT框和预测框之间的几何关系,通过相对位置和框形来计算损失,而忽略边界框的固有属性(如边界框的形状和尺寸)对边界框回归的影响。为了弥补现有研究的不足,本文提出了一种关注边界框自身形状和尺寸的边界框回归方法。首先,分析了边界框的回归特性,并发现边界框自身的形状和尺寸因素将对回归结果产生影响。基于上述结论提出了Shape IoU方法,该方法通过关注边界框自身的形状和尺寸来计算损失,从而使边界框回归更准确。最后,通过大量的比较实验验证了Shape-IoU方法,实验结果表明,Shape-IoU可以有效提高检测性能,并超越现有方法,在不同的检测任务中实现最先进的性能。

INTRODUCTION

        目标检测是计算机视觉的基本任务之一,其目标是在图像中定位和识别物体。根据是否生成 Anchor 点,可以将方法分为Anchor-based的方法和Anchor-free的方法。Anchor-based的方法包括Faster R-CNN, YOLO系列,SSD 和RetinaNet。Anchor-free的方法包括CornerNet,CenterNet和FCOS。在这些检测器中,边界框回归损失函数作为局部化分支的重要组件起着不可替代的作用。

        在目标检测领域,最常用的方法包括IoU,GIoU,CIoU,SIoU,等。IoU作为目标检测领域最广泛使用的损失函数,其优点在于更准确地描述了预测框和GT框之间的匹配程度。其缺点主要在于当两个框的交点为0时,无法准确描述预测框和GT框之间的位置关系。GIoU通过引入最小检测框来解决这个问题,从而提供了一个具体的改进。CIoU进一步提高了检测精度,通过在考虑预测框和GT框的中心点之间的归一化距离最小化的基础上,增加了一个形状损失项。在SIoU的工作中,提出将连接预测框中心点和GT框中心点的线的角大小作为新的损失项来考虑,以更准确地通过角的变化来判断预测框和GT框之间的匹配程度。

        总之,边界框回归的主要方法是通过在IoU的基础上添加新的几何约束来使回归更准确。上述方法考虑了GT框和 Anchor 框的距离、形状和角度对边界框回归的影响,但忽略了边界框自身的形状和尺寸也会对边界框回归产生影响的事实。为了进一步提高回归的准确性,作者分析了边界框自身形状和角度的影响,并提出了一个新的边界回归损失:Shape-IoU。

本文的主要贡献如下:

  1. 分析结果表明,在边界框回归过程中,边界框回归样本自身的形状和尺寸因素将对回归结果产生影响。

  2. 基于现有的边界框回归损失函数,考虑到边界框回归样本自身的形状和尺寸对边界框回归的影响,提出了Shape-IoU损失函数,并在微型目标检测任务中提出了Shape-dot-distance和Shape-nwd损失。

  3. 在各种检测任务上使用最先进的单阶段检测器进行了系列的比较实验,实验结果表明,本文提出的方法的检测效果优于现有方法,达到了最先进的水平。

RELATED WORK

A. IoU-based Metric in Object Detection

近年来,随着检测器的不断发展,边界框回归损失也得到了快速的发展。最初,IoU被提出用于评估边界框回归的状态,而基于IoU的DIoU, CIoU, EIoU, SIoU等方法则通过在IoU的基础上添加不同的约束来实现更好的检测。

1)IoU Metric:IoU是最流行的目标检测评估指标,定义如下:

其中,BB^{gt}分别表示预测框和GT框。

2) GIoU Metric:由于在边界框回归中,GT框和 Anchor 框之间没有重叠,导致IoU损失出现梯度消失的问题,因此提出了GIoU(广义IoU)来解决这个问题。其定义如下:

其中,C表示GT框和 Anchor 框之间的最小检测框。

3) DIoU Metric: 与GIoU相比,DIoU考虑了边界框之间的距离约束,并在IoU的基础上添加了中心点归一化距离损失项,从而使得回归结果更准确。其定义如下:

在这里,bb^{gt}分别表示 Anchor 框的中心点和GT框的中心点,\rho (\cdot )表示欧几里得距离,其中c表示bb^{gt}之间的最小检测框的斜边长度。

CIoU进一步考虑了GT和 Anchor 框之间的形状相似性,通过在DIoU的基础上添加一个新的形状损失项来减少 Anchor 框和GT框之间的宽高比差异。其定义如下:

 在这里,w^{gt}h^{gt}分别表示GT框的宽度和高度,wh分别表示 Anchor 框的宽度和高度。

4) EIoU Metric:EIoU根据CIoU重新定义了形状损失,并进一步通过直接减小GT框和 Anchor 框之间的宽高比来提高检测精度。其定义如下:

在这里,w^{c}h^{c}分别表示最小检测框覆盖GT框和 Anchor 框的宽度和高度。

5)SIoU Metric:在前人研究的基础上,SIoU进一步考虑了边界框之间的角度对边界框回归的影响,旨在通过减小 Anchor 框和GT框之间的角度(水平或垂直方向)来加速收敛过程。其定义如下:

B. Metric in Tiny Object Detection

基于IoU的指标适用于一般的目标检测任务,对于小目标的检测,点距离(Dot Distance)和Normalized Wasserstein Distance(NWD)被提出来以克服它们对IoU值的敏感性。

1) Dot Distance:

在这里,D表示GT框中心点与 Anchor 框中心点之间的欧几里得距离,S表示数据集中目标的平均大小,M表示图像的数量,N_{i}表示第i张图像中的标注边界框数量,w_{ij}h_{ij}分别表示第i张图像中第j个边界框的宽度和高度。

2)Normalized Gaussian Wasserstein Distance:

 在这里,权重w=2,C是与数据集相关的常数。

METHODS

A. Analysis of Bounding Box Regression Characteristics

如图2所示,边界框回归样本A和B中的GT框的尺寸相同,而C和D中的GT框的尺寸相同。A和D中的GT框的形状相同,而B和C中的GT框的形状相同。C和D中边界框的尺寸大于A和B中边界框的尺寸。在图2a中,所有边界框回归样本的偏差相同,形状偏差为0。图2a和图2b之间的区别在于,图2b中所有边界框回归样本的形状偏差相同,为0。

在图2a中,A和B之间的偏差相同,但是IoU值存在差异。

在图2a中,C和D之间的偏差相同,但是IoU值存在差异,与A和B相比,IoU值的差异并不显著。

在图2b中,A和B的形状偏差相同,但是IoU值存在差异。

在图2b中,C和D的形状偏差相同,但是IoU值存在差异,与图2a中的A和B相比,IoU值的差异并不显著。

在图2a中,A和B之间的IoU值差异的原因在于它们的GT框有不同的形状,偏差(deviation)方向分别对应长边和短边,对A来说,GT框长边方向的偏差对IoU值的影响较小,而对于B来说,短边方向的偏差对IoU值的影响较大。

与large scale边界框相比,smaller scale边界框对IoU值的变化更加敏感,GT框的形状对smaller scale边界框的IoU值有更大的影响。因为A和B的scale比C和D小,所以在形状和偏差相同时,IoU值的差异更加显著。

类似地,从形状偏差的视角分析边界框回归,可以发现回归样本中GT框的形状会影响其IoU值在回归过程中的变化。

根据以上的分析,可以得出以下结论:

1、假设GT框并非正方形,其GT框存在长边与短边,对于deviation与shape-deviation相同且不全为0的情况下,回归样本中边框形状与尺度的差异会导致其IoU值存在差异。

2、对于相同尺度的边框回归样本,当回归样本deviation与shape-deviation相同且不全为0,边框的形状会对回归样本的IoU值产生影响,沿着其边框短边方向的deviation和shape-deviation所对应IoU值变化更为显著。

3、对于形状相同边框回归样本,当回归样本deviation与shape-deviation相同且不全为0,相较于较大尺度回归样本,较小尺度边框回归样本IoU值受GT框形状影响更为显著。

B. Shape-IoU

shape-iou如图3所示

 

其中,scale是缩放因子,与数据集中目标的大小相关,wwhh分别表示水平方向和垂直方向上的权重系数,其值与GT框的形状有关。相应的边界框回归损失如下: 

C. Shape-IoU in Small Target

1) Shape-Dot Distance:将Shape-IoU的思想融入到点距离(Dot Distance)中,得到Shape-Dot Distance,其定义如下:

 2) Shape-NWD:同样地,将Shape-IoU的思想融入到归一化Normalized Wasserstein Distance(NWD)中,得到Shape-NWD,其定义如下:

EXPERIMENTS

A. PASCAL VOC on YOLOv8 and YOLOv7

PASCAL VOC数据集是目标检测领域最流行的数据集之一。在本篇文章中使用VOC2007和VOC2012的训练集(包括16551张图像)和测试集(包括4952张图像),来对YOLOv8和YOLOv7-tiny进行比较实验,并选择SIoU作为实验的比较方法。

实验结果如表I所示:

B. VisDrone2019 on YOLOv8

VisDrone2019是目标检测领域最流行的无人机航空图像数据集,其中包含比一般数据集更多的较小目标。在本实验中,选择YOLOv8作为检测器,并采用SIoU作为比较方法。

实验结果如下:

C. AI-TOD on YOLOv5

AI-TOD是一个遥感图像数据集,与一般数据集不同,它包含大量微小目标,且目标平均大小为12.8像素。在本实验中,选择YOLOv5s作为检测器,并采用SIoU作为比较方法。

实验结果如下:

Code

def shape_iou(box1, box2, xywh=True, scale=0  eps=1e-7):
    (x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, -1), box2.chunk(4, -1)
    w1_, h1_, w2_, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2
    b1_x1, b1_x2, b1_y1, b1_y2 = x1 - w1_, x1 + w1_, y1 - h1_, y1 + h1_
    b2_x1, b2_x2, b2_y1, b2_y2 = x2 - w2_, x2 + w2_, y2 - h2_, y2 + h2_

    # Intersection area
    inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \
            (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)

    # Union Area
    union = w1 * h1 + w2 * h2 - inter + eps

    # IoU
    iou = inter / union

    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance  
    ww = 2 * torch.pow(w2, scale) / (torch.pow(w2, scale) + torch.pow(h2, scale))
    hh = 2 * torch.pow(h2, scale) / (torch.pow(w2, scale) + torch.pow(h2, scale))
    cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex width
    ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex height
    c2 = cw ** 2 + ch ** 2 + eps                            # convex diagonal squared
    center_distance_x = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2) / 4
    center_distance_y = ((b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4
    center_distance = hh * center_distance_x + ww * center_distance_y
    distance = center_distance / c2

    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    
    omiga_w = hh * torch.abs(w1 - w2) / torch.max(w1, w2)
    omiga_h = ww * torch.abs(h1 - h2) / torch.max(h1, h2)
    shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4)
    
    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU
    iou = iou - distance - 0.5 * ( shape_cost)
    return iou  # IoU

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言实例_math.h库函数功能及其用法详解

一、前言 数学在计算机编程中扮演着至关重要的角色,C语言的math.h头文件提供了一系列的函数和工具,用于数学计算和常用数学函数的实现。这些函数包括数值运算、三角函数、指数对数函数等,为开发人员提供了强大的数学处理能力。本文将对math.…

从零开始了解大数据(七):总结

系列文章目录 从零开始了解大数据(一):数据分析入门篇-CSDN博客 从零开始了解大数据(二):Hadoop篇-CSDN博客 从零开始了解大数据(三):HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四):MapReduce篇-CSDN博客 从零开始了解大…

多模态大模型Vary:扩充视觉Vocabulary,实现更细粒度的视觉感知

前言 现代大型视觉语言模型(LVLMs)具有相同的视觉词汇- CLIP,它可以涵盖大多数常见的视觉任务。然而,对于一些需要密集和细粒度视觉感知的特殊视觉任务,例如文档级OCR或图表理解,特别是在非英语场景下,clip风格的词汇…

电子电路快速入门

参考: 电子电路设计入门篇一 https://www.bilibili.com/video/BV18C4y1p7p9Proteus与protel的区别 https://www.zhihu.com/question/385796380数字集成电路的设计流程简介 https://zhuanlan.zhihu.com/p/24476011?tt_fromweixin硬件电路设计的基本流程、作用和注意…

StratifiedGroupKFold解释和代码实现

StratifiedGroupKFold解释和代码实现 文章目录 一、StratifiedGroupKFold解释和代码实现是什么?二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释 四、样本类别类别不平衡 一、StratifiedGroupKFold解释和代码…

简单Diff算法

简单Diff算法 渲染器的核心 Diff算法 解决的问题 比较新旧虚拟节点的子节点,实现最小化更新。 虚拟节点key属性的作用 就像虚拟节点的“身份证号”,在更新时,渲染器会通过key属性找到可复用的节点,然后尽可能地通过DOM移动操…

Hexo 部署 Github Pages, Github Actions自动部署

想整个静态的博客部署在github pages 历经两天的折磨终于是摸索成功了,官网的文档太简陋了,很多东西没说清楚。 欢迎大家访问我的博客! CanyueThis is Canyues blog.https://mobeicanyue.github.io/ 最终实现的效果,一个项目仓库…

polar CTF 简单rce

一、题目 <?php /*PolarD&N CTF*/ highlight_file(__FILE__); function no($txt){if(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|proc_open|shell_exec|popen| /i", $txt)){return $txt;}else{ die("whats up");}} $yyds(…

【openGauss服务器端工具的使用】

【openGauss服务器端工具的使用】 gs_checkperf openGauss 不仅提供了gs_checkperf工具来帮助用户了解openGauss的负载情况。 使用数据库安装用户登录服务器&#xff0c;执行如下命令进行查看数据库性能&#xff1a; 简要信息展示&#xff1a;[ommopengauss03 ~]$ gs_checkperf…

Ubuntu Server 22.04 连接Wifi并配置静态IP

Ubuntu Server 22.04 连接Wifi并配置静态IP 前言&#xff1a;我家最近好几台电脑&#xff0c;我都想跑着Ubuntu Server做服务器&#xff0c;但是近几年的超级本已经不自带网口了&#xff0c;所以我就考虑用Wifi来联网&#xff0c;速度也还可以&#xff0c;但是既然是跑服务&…

《算法导论》复习——CHP1、CHP2 算法基础

基本定义&#xff1a; 算法是一组有穷的规则&#xff0c;规定了解决某一特定类型问题的一系列运算。 关心算法的正确性和效率。 算法的五个重要特性&#xff1a;确定性、能行性、输入、输出、有穷性。 基础方法&#xff1a; 伪代码&#xff08;Pseudocode&#xff09;&#xff…

Springboot集成RabbitMq二

接上一篇&#xff1a;Springboot集成RabbitMq一-CSDN博客 1、搭建项目-消费者 与之前一样 2、创建配置类 package com.wym.rabbitmqconsumer.utils;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.spring…

11.盛水最多的容器(双指针,C解法)

题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;…

床垫选得好孩子睡得香!康姿百德学生床垫让孩子拥有甜美梦乡

睡眠与健康密切相关,而床垫的选购则直接关系到人们睡眠质量的好坏。而孩子的床垫选择更是重中之重,青少年儿童正处于生长发育的重要时期,床垫选不好很容易导致孩子睡眠不足,影响孩子的学习,甚至会影响孩子的脊椎发育。所以,给孩子挑张好用又合适的床垫十分重要,现在让我们来看看…

SpringMVC-域对象共享数据

一、request域对象共享数据 1.1 通过ServletAPI共享数据 RequestMapping("/servletAPI")public String servletAPI(HttpServletRequest request){request.setAttribute("requestAttribute","helloworld");return "servletAPI";}<!…

(学习打卡1)重学Java设计模式之设计模式介绍

前言&#xff1a;听说有本很牛的关于Java设计模式的书——重学Java设计模式&#xff0c;然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧&#xff0c;本文主要记录笔者的学习笔记和心得。 打卡&#xff01;打卡&#xff01; 设计模式介绍 一、设计模式是什么&#xff1f; …

学习JavaEE的日子 day08 方法的重载,递归,万年历

day08 1.方法的重载 >理解&#xff1a;方法与方法之间的关系> 条件&#xff1a;> 1.方法必须在同一个类中> 2.方法名必须一致> 3.参数列表的个数或者类型不一致> 4.与返回值无关> 好处&#xff1a;系统会根据具体实参类型自动匹配到对应的方法…

React(2): 使用 html2canvas 生成图片

使用 html2canvas 生成图片 需求 将所需的内容生成图片div 中包括 svg 等 前置准备 "react": "^18.2.0","react-dom": "^18.2.0","html2canvas": "^1.4.1",实现 <div ref{payRef}></div>const pa…

阿里云性能测评ESSD Entry云盘、SSD云盘、ESSD和高效云盘

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

循环与基础函数

循环与函数 1.循环的三种方式2.循环的中断与空语句3.函数的定义与使用4.参数的作用域5.指针6.总结 1.循环的三种方式 我们最熟悉的循环为for和while&#xff0c;这两种循环方式在Python系列介绍过。在C中&#xff0c;循环的基本逻辑同Python是类似的。c中while循环的语法如下&…