热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SIoULoss的原理详解及代码实现分析

本文详细解析了SIoULoss的原理及其在边界框回归任务中的优势,并通过代码实现对其性能进行了深入分析。SIoULoss作为一种改进的损失函数,能够更有效地优化目标检测模型的边界框回归效果,提升模型的准确性和鲁棒性。文中还提供了具体的代码示例,帮助读者更好地理解和应用这一技术。

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 - 知乎


推荐阅读
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • Android 6.0 切换指定 Wi-Fi 的解决方案
    本文详细介绍了在 Android 6.0 系统中切换到指定 Wi-Fi 的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 优化使用Apache + Memcached-Session-Manager + Tomcat集群方案
    本文探讨了使用Apache、Memcached-Session-Manager和Tomcat集群构建高性能Web应用过程中遇到的问题及解决方案。通过重新设计物理架构,解决了单虚拟机环境无法真实模拟分布式环境的问题,并详细记录了性能测试结果。 ... [详细]
  • 对 manual_async_fn 进行了改进,确保其能够正确处理和捕获输入的生命周期。 ... [详细]
author-avatar
年少不轻易谈情
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有