SIoU Loss 原理与代码解析

news2024/11/27 22:23:11

paper:SIoU Loss: More Powerful Learning for Bounding Box Regression

code:https://github.com/meituan/YOLOv6/blob/main/yolov6/utils/figure_iou.py#L75 

存在的问题

之前的目标检测模型的回归损失考虑到了预测的bounding box和gt box之间的distance、overlap area、aspect ratio等因素(如GIoU、CIoU等),但是都没有考虑到方向不匹配的问题,这可能会导致收敛速度较慢,因为训练过程中预测的bounding box可能会在gt box附近震荡,最终得到一个较差的模型。

创新点

本文提出了一种新的目标检测损失函数SIoU Loss,其中重新定义了penalty metrics并且考虑到了回归向量的角度。这会让预测的bounding box快速的先移动到最近的坐标轴,随后只需要沿一个方向X或Y回归坐标即可,简而言之,增加角度惩罚项减少了自由度的数量。

方法介绍

SIoU loss一共包括四个惩罚项:

  1. Angle cost
  2. Distance cost
  3. Shape cost
  4. IoU cost

Angle cost

如下图所示,定义gt box和predict box中心点连线的夹角 \(\alpha\),当 \(\alpha <\frac{\pi }{4}\) 时,目标是最小化 \(\alpha\),当 \(\alpha >\frac{\pi }{4}\) 时,目标是最小化 \(\beta=\frac{\pi}{2}-\alpha\)。

为此,作者提出下式

其中

Distance cost

distance cost也被重新设计,加入了上述的angle cost

其中

注意,这里的 \(c_w,c_h\) 和angle cost中的不一样,不然的话这里 \(\rho_x=\rho_y=1\) 了。angle cost中的是predict box和gt box中心点沿 \(x,y\) 方向的距离,这里的是两者最小外接矩形的宽和高,如下图所示

Shape cost

shape cost的定义如下

其中

其中 \(\theta\) 值定义了shape cost的权重并且不同的数据集 \(\theta\) 值也不同。

SIoU loss的最终形式如下

其中

代码

下面是YOLOv6中实现的SIoU loss,其中计算angle_cost是对论文中的式子进行了转换,如下

s_cw = (b2_x1 + b2_x2 - b1_x1 - b1_x2) * 0.5 + self.eps
s_ch = (b2_y1 + b2_y2 - b1_y1 - b1_y2) * 0.5 + self.eps
sigma = torch.pow(s_cw ** 2 + s_ch ** 2, 0.5)
sin_alpha_1 = torch.abs(s_cw) / sigma
sin_alpha_2 = torch.abs(s_ch) / sigma
threshold = pow(2, 0.5) / 2
sin_alpha = torch.where(sin_alpha_1 > threshold, sin_alpha_2, sin_alpha_1)
angle_cost = torch.cos(torch.arcsin(sin_alpha) * 2 - math.pi / 2)
rho_x = (s_cw / cw) ** 2
rho_y = (s_ch / ch) ** 2
gamma = angle_cost - 2
distance_cost = 2 - torch.exp(gamma * rho_x) - torch.exp(gamma * rho_y)
omiga_w = torch.abs(w1 - w2) / torch.max(w1, w2)
omiga_h = 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)
iou = iou - 0.5 * (distance_cost + shape_cost)
loss = 1.0 - iou

实验结果

下图是一个简单的实验用于比较anchor初始位置不同时SIoU和CIoU的收敛速度,其中蓝色box是anchor的初始位置,位于原点的绿色box是target box,可以看出,当anchor初始位置和目标box在同一轴上时,收敛速度要比不在同一轴上快的多。而两种情况下SIoU的收敛速度都比CIoU快。

作者又用了CIoU里设计的模拟实验来评估SIoU的效果,实验具体设计为:7个中心在坐标(10,10)处,面积为1,宽高比分别为1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1的box作为target box,如下图中(10,10)处的各色box所示。anchor box均匀的放置在以坐标(10,10)为中心半径为3的区域内的5000个点上,即下图中的蓝色点。每个点放置7种尺度7种宽高比共49个anchor,尺度分别为0.5, 0.67, 0.75, 1.33, 1.5, 2,宽高比和target box的一致。因此一共有5000x7x7=1715000个回归实例。

下图是实验结果,可以看出SIoU的最大误差要比CIoU小了两个数量级,并且SIoU的误差表面更加平滑,表明在模拟的所有情况下,SIoU的总误差都比CIoU小。

下图是误差随迭代次数的变化,可以看出SIoU比CIoU的收敛速度更快,最终的误差也更小。

参考

一文搞懂EIoU与SIoU - 知乎

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

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

相关文章

【头歌C语言程序与设计】选择结构程序设计进阶

目录 写在前面 正文 第1关&#xff1a;快递费用计算 第2关&#xff1a;计算一元二次方程的根 第3关&#xff1a;产品信息格式化 写在最后 写在前面 本文代码是我自己所作&#xff0c;本人水平有限&#xff0c;可能部分代码看着不够简练&#xff0c;运行效率不高,但都能运…

cmake笔记 编译与链接

文章目录概述编译最简单的hello world编译工程化的helloWorld更工程化的Hello World&#xff1a; 构建静态库与动态库如何使用外部共享库和头文件其他有用的cmake命令include_directoriesfind_package file(GLOB variable [RELATIVE path] [globbing expressions]...)windows 下…

【Maven基础】IDEA环境使用

第一节 创建父工程 1、创建 Project 2、开启自动导入 创建 Project 后&#xff0c;IDEA 会自动弹出下面提示&#xff0c;我们选择**『Enable Auto-Import』**&#xff0c;意思是启用自动导入。 这个自动导入一定要开启&#xff0c;因为 Project、Module 新创建或 pom.xml 每次…

微服务的相关概念及知识

微服务概念 微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出&#xff0c;他们定义了微服务是由单一应用程序构成的小服务&#xff0c;拥有自己的进程与轻量化处理&#xff0c;服务依业务功能设计&#xff0c;以全自动的方式部署&#xff0c;与其他服务使用HT…

6-zookeeper-hadoop-ha原理简述-fail

6-zookeeper-hadoop-ha故障转移机制&#xff0c;原理简述: HA概述&#xff08;2.X版本架构&#xff09;。 1&#xff09;、HA&#xff08;High available&#xff09;&#xff0c;即高可用&#xff08;7*24小时不间断服务。&#xff09; 1、zookeeper协调服务&#xff0c;通…

jsp+ssm计算机毕业设计毕业设计管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Qt扫盲-QScrollBar理论总结

QScrollBar理论总结1. 简述2. 滚动条组成3. 常用设置5. 信号6. 键盘功能1. 简述 QScrollBar其实就是一个滚动条控件&#xff0c;它使用户能够访问大于用于显示文档的小组件的文档部分。它提供了用户在文档中的当前位置以及可见的文档量的可视指示。滚动条通常配备其他控件&…

什么是MOS管的米勒效应

在说MOS管的米勒效应之前我们先看下示波器测量的这个波形: 这个波形其实就是这个MOS管开关电路的波形&#xff0c;探头1这个黄色的测量的是MOS管的栅极&#xff0c;探头2这个蓝色的测量的是MOS管漏极 大家有没有发现这个黄色的波形在上升的过程中出现了一个平台&#xff0c;其实…

一年半经验如何准备前端面试

typeof NaN 的结果是什么&#xff1f; NaN 指“不是一个数字”&#xff08;not a number&#xff09;&#xff0c;NaN 是一个“警戒值”&#xff08;sentinel value&#xff0c;有特殊用途的常规值&#xff09;&#xff0c;用于指出数字类型中的错误情况&#xff0c;即“执行数…

如何快速拥有好的测试idea

如果接手任意一个测试任务&#xff0c;如何开始测试以及怎么快速的形成测试点呢?其实也是有一套小套路的。大概整理了下&#xff0c;可以从6个方面来考虑入手。 1.项目 快速了解项目背景、信息对象、项目风险、测试资料、债务、交流、语境分析、交付品、工具。 项目的提出动机…

0~9岁|一文讲清楚精细动作有多重要

人都有两宝&#xff1a;“双手和大脑”。 在我们的脑中枢神经内&#xff0c;有一部分专门掌管手部动作&#xff0c;手部动作越精细&#xff0c;与之对应的大脑神经元也就越发达。作为儿童智能的重要组成部分&#xff0c;精细动作还是衡量儿童神经系统发育的一个重要指标。 一、…

C++:继承、模板、CRTP:谈谈C++多态设计模式(三):函数模板

1&#xff1a;模板的概念 C中不止有 面向对象编程思想&#xff0c;还要泛型编程思想。而泛型编程思想的核心就是 模板 模板的建立大大提搞了复用行&#xff0c;C中的模板包括 &#xff1a;函数模板和类模板。 2&#xff1a;函数模板基本语法 函数模板 概念&#xff1a; 建立…

细粒度图像分类论文研读-2018

文章目录Object-Part Attention Model for Fine-grained Image Classification&#xff08;by localization- classification subnetwork&#xff09;AbstractIntroductionObject- Part Attention ModelObject- Part Spatial Constraint ModelOur OPAM ApproachObject-level At…

Flink从入门到放弃—Stream API—clean()方法

文章目录导航clean()案例贴上源码导航 涉及到文章&#xff1a; Flink从入门到放弃—Stream API—Join实现&#xff08;即多流操作&#xff09; Flink从入门到放弃—Stream API—常用算子&#xff08;map和flatMap&#xff09; Flink从入门到放弃—Stream API—常用算子(filter…

讲解Redis的主从复制

Redis 主从复制1 主从复制2 作用3 主从复制架构图4 搭建主从复制5 使用规则1 主从复制 主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据 无法解决: 1.master节点出现故障的自动故障转移 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到…

数据挖掘的步骤有哪些?

所谓数据挖掘就是从海量的数据中&#xff0c;找到隐藏在数据里有价值的信息。因为这个数据是隐式的&#xff0c;因此想要挖掘出来并不简单。那么&#xff0c;如何进行数据挖掘呢&#xff1f;数据挖掘的步骤有哪些呢&#xff1f;一般来讲&#xff0c;数据挖掘需要经历数据收集、…

openEuler 倡议建立 eBPF 软件发布标准

eBPF 是一个能够在内核运行沙箱程序的技术&#xff0c;提供了一种在内核事件和用户程序事件发生时安全注入代码的机制&#xff0c;使得非内核开发人员也可以对内核进行控制。随着内核的发展&#xff0c;eBPF 逐步从最初的数据包过滤扩展到了网络、内核、安全、跟踪等&#xff0…

软件测试之测试用例评审

一、评审目的 一般来说&#xff0c;参加测试用例评审的人员包括对应项目的产品人员、设计人员、开发人员和测试人员。 图1-1 测试用例评审相关人员 测试用例评审会议的发起者一般是测试人员&#xff0c;既然我们是发起者&#xff0c;那我们发起这个会议的目的是什么呢&#x…

【Java开发】 Spring 11 :Spring Boot 配置 Web 运行参数并部署至服务器

Spring Boot 项目开发结束后的工作便是运维&#xff0c;简单来说需要配置 Web 运行参数和项目部署两大工作&#xff0c;本文将尽可能详细地给大家讲全&#xff01; 目录 1 定制 Web 容器运行参数 1.1 运行参数介绍 1.2 项目搭建 ① 通过 IDEA Spring Initializr 创建项目 …

使用nginx代理服务器上的docker容器接口

假如项目通过自动化部署在了docker容器里面&#xff1a;教程在这里vue使用dockernodenginxlinux自动化部署_1024小神的博客-CSDN博客 怎么将nginx通过域名绑定到这个容器呢&#xff1f; 例如我们将一个二级域名绑定second.1024shen.com/#/ 到我们的服务 我们需要先在域名解析…