YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

本文深入探讨YOLOv8的改进,重点介绍二十多种损失函数,包括EIoU、SIoU、GIoU等,详述其原理、应用场景和代码实现,以提升目标检测的精度和模型性能。文章还讨论了如何将这些损失函数集成到模型中,并提供了相关代码示例。

一、本文介绍

这篇文章介绍了YOLOv8的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的损失函数超过了二十余种,每种都针对特定的目标检测挑战进行优化。文章会详细探讨这些损失函数如何提高YOLOv8在各种检测任务中的性能,包括提升精度、加快收敛速度和增强模型对复杂场景的适应性。本文章主要是为了发最近新出的Inner思想改进的各种EIoU的文章服务,其中我经过实验在绝大多数下的效果都要比本文中提到的各种损失效果要好。 

专栏目录:YOLOv8改进有效系列目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

InnerIoU: YOLOv8改进 | 2023 | InnerIoU、InnerSIoU、InnerWIoU、Foucs等损失函数

专栏回顾: YOLOv8改进有效涨点专栏->持续复现各种最新机制

本位代码地址: 文末提供完整代码块-包括EIoU、CIoU、DIoU等七种损失和其Focus变种

目录

一、本文介绍

二、各种损失函数的基本原理 

2.1 交集面积和并集面积

2.2 IoU

2.3 SIoU

2.4 WioU

2.5 GIoU

2.6 DIoU

2.7 EIoU

2.8 CIoU

2.9 FocusLoss 

三、EIoU、SIoU、EIoU、FocusIoU等损失函数代码块

3.1 代码一

3.2 代码二 

四、添加EIoU、SIoU、EIoU、FocusIoU等损失函数到模型中

五、总结


 二、各种损失函数的基本原理 

2.1 交集面积和并集面积

在理解各种损失函数之前我们需要先来理解一下交集面积和并集面积,在数学中我们都学习过集合的概念,这里的交集和并集的概念和数学集合中的含义是一样的。


2.2 IoU

论文地址:

### 各种改进型 IoU 损失函数解释 #### 1. MPDIoU (Modified Point Distance Intersection over Union) MPDIoU 是一种基于点距离的交并比损失函数,旨在解决传统 IoU 对边界框中心位置敏感度不足的问题。通过引入预测框和真实框之间的几何关系,提高了模型对于目标定位精度的要求[^1]。 ```python def mpdiou_loss(pred_boxes, true_boxes): # 计算两个矩形框间的最小外接矩形面积 union_area = ... # 计算重叠区域面积 intersection_area = ... iou = intersection_area / union_area # 添加额外的距离惩罚项 distance_penalty = ... return -(iou - distance_penalty) ``` #### 2. GIoU (Generalized Intersection Over Union) GIoU 扩展了标准 IoU 的概念,在计算时不仅考虑了两个边界框的重合部分,还加入了包围这两个边界的最小闭包区域的影响因子。这使得即使当两个边界框完全不相交时也能给出合理的梯度方向指导。 ```python def giou_loss(pred_boxes, true_boxes): # 获取最小外包络盒 enclosing_box = get_enclosing_box(pred_boxes, true_boxes) # 计算原始IOU iou = compute_iou(pred_boxes, true_boxes) # 加上额外的比例项 ratio_term = area_of_enclosure(enclosing_box) - intersecting_area(pred_boxes, true_boxes) return iou - ratio_term ``` #### 3. DIoU (Distance-IoU Loss) DIoU 在 GIou 基础上进一步增加了两边界框中心点之间欧氏距离作为惩罚项,从而更好地约束检测框的位置准确性。这种设计有助于减少假阳性率,并提高小物体检测效果。 ```python def diou_loss(pred_boxes, true_boxes): iou = compute_iou(pred_boxes, true_boxes) center_distance_squared = euclidean_dist_sqrd( pred_boxes.center(), true_boxes.center() ) diagonal_length_squared = diag_len_sqrd(true_boxes.bounding_rect()) penalty_factor = center_distance_squared / diagonal_length_squared return iou - penalty_factor ``` #### 4. CIoU (Complete IoU) CIoU 结合了 DIoU 和 Aspect Ratio Consistency(纵横比一致性),即除了关注边界框的空间位置之外,还会考虑到宽高比例差异带来的影响。这样可以更全面地评估预测框的质量,尤其适合处理形状各异的目标对象。 ```python def ciou_loss(pred_boxes, true_boxes): v = aspect_ratio_consistency(pred_boxes.aspect_ratio(), true_boxes.aspect_ratio()) alpha = v / ((1-iou)+v) return diou_loss(pred_boxes, true_boxes) + alpha * v ``` #### 5. SIoU (Symmetric IoU) SIoU 提出了新的对称形式来衡量边界框相似度,其核心思想是在水平轴和平移变换下保持不变性。该方法能够有效缓解由于视角变化引起的目标变形问题,增强了算法鲁棒性和泛化能力[^2]。 #### 6. EIoU (Enhanced IoU) EIou 继承自 DIoU 并在此基础上进行了优化,主要体现在三个方面: - 更加精确地定义了中心偏移量; - 考虑到了尺度缩放效应; - 引入角度旋转因素以适应不同姿态下的目标检测需求。 #### 7. WIoU (Weighted IoU) WIoU 则是通过对不同大小的对象赋予不同的权重来进行调整,确保大尺寸物体不会因为占据更多像素而获得过高的重要性评分。这对于平衡多类别场景中的各类别表现具有重要意义。 #### 8. LMPDIoU (Localized Modified Point Distance IoU) LMPDIoU 进一步细化了 MPDIoU 中关于局部特征建模的部分,特别强调了针对特定应用场景定制化的参数设置方案。比如在行人跟踪任务里可能会更加注重人体轮廓边缘的信息提取;而在车辆识别方面则可能侧重于车牌号码区等细节部位。
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snu77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值