【YOLOv8改进-损失函数】YOLOv8 更换损失函数之 SIoU EIoU WIoU _ Focal_*IoU CIoU DIoU ShapeIoU MPDIou

本文深入探讨了YOLOv8目标检测模型中损失函数的改进,从GIoU、DIoU、CIoU、EIoU、WIoU、SIoU到MPDIoU和ShapeIoU,以及Focal_*IoU系列。通过引入各种损失函数,旨在优化边界框的位置、形状和中心点距离,提升模型的检测精度。文章详细介绍了每个损失函数的基本原理和实现方法,并提供了代码实现链接,供读者实践和验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

GIoU

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

广义IoU(GIoU,Generalized IoU)的计算公式是在标准IoU的基础上进行扩展,加入了对边界框相对位置的补偿。其公式如下:

GIoU = IoU − ∣ C − ( A ∪ B ) ∣ ∣ C ∣ \text{GIoU} = \text{IoU} - \frac{|C - (A \cup B)|}{|C|} GIoU=IoUCC(AB)

其中:

  • IoU \text{IoU}
### YOLOv8中的CIoU损失函数实现与解释 在目标检测领域,YOLO系列算法不断演进,在不同版本中引入了多种改进措施以提高性能。相较于早期版本采用的传统L1或L2回归损失函数YOLOv3及其后续版本逐渐转向基于交并比(IoU)的损失计算方式[^1]。 #### CIoU损失函数的概念 CIoU (Complete Intersection over Union),即完整的交并比,是一种综合考虑几何中心距离、尺度差异以及形状相似性的度量方法。相比于原始的IoU仅衡量两个边界框重叠区域的比例,CIoU通过加入额外项来更全面地评估预测框与真实框之间的匹配程度: \[ \text{CIoU} = IoU - \frac{\rho^2(b, b^{gt})}{c^2} - \alpha v \] 其中, - \(b\) 和 \(b^{gt}\) 分别表示预测框和地面实况框; - \(\rho\) 是欧几里得距离; - \(c\) 表示覆盖两框最短矩形对角线长度; - \(\alpha\) 权衡因子取决于最后一项的重要性; - \(v=(\frac{\pi}{4}(arctan(w/h)- arctan(w_{gt}/h_{gt}))^2)\), 度量宽高比例间的偏差。 这种设计使得即使当IoU接近最大值时仍能继续优化位置精度,尤其对于非水平方向的目标具有更好的适应能力。 #### Python代码实现 以下是Python环境下CIoU损失函数的一个简化版实现: ```python import torch def ciou_loss(preds, targets, eps=1e-7): """ 计算CIoU损失 参数: preds: 预测边框坐标 Tensor 形状为[N, 4], xywh格式. targets: 真实边框坐标 Tensor 同上. 返回: 平均CIoU损失值 """ # 转换xywh到x0y0x1y1形式以便于计算iou和其他成分 px1, py1, pw, ph = preds[:, 0]-preds[:, 2]/2, preds[:, 1]-preds[:, 3]/2, preds[:, 2], preds[:, 3] tx1, ty1, tw, th = targets[:, 0]-targets[:, 2]/2, targets[:, 1]-targets[:, 2]/2, targets[:, 2], targets[:, 3] p_xmax, p_ymax = px1 + pw/2, py1 + ph/2 t_xmax, t_ymax = tx1 + tw/2, ty1 + th/2 inter_left_top = torch.max(torch.stack([px1,tx1]),dim=0)[0] inter_right_bottom = torch.min(torch.stack([p_xmax,t_xmax]),dim=0)[0] inter_section = torch.clamp(inter_right_bottom-inter_left_top,min=0.) intersection_area = inter_section[:,0]*inter_section[:,1] union_area = pw*ph+tw*th-(intersection_area) ious = intersection_area / (union_area + eps) enclose_left_top = torch.min(torch.stack([px1,tx1]),dim=0)[0] enclose_right_bottom = torch.max(torch.stack([p_xmax,t_xmax]),dim=0)[0] c = ((enclose_right_bottom-enclose_left_top)**2).sum(dim=-1)+eps d = (((px1-tx1)**2+(py1-ty1)**2)).sum(dim=-1)+eps u = (d/c).clamp(min=eps,max=None) atan_pred = torch.atan(pw/ph) atan_target = torch.atan(tw/th) v = (4/(torch.pi**2)) * (atan_pred-atan_target)**2 alpha = v/(1-ious+v+eps) losses_ciou = 1 - ious + u + alpha*v return losses_ciou.mean() ``` 此段代码实现了CIoU损失函数的核心逻辑,并适用于PyTorch框架下的训练过程。需要注意的是实际应用中可能还需要针对具体情况进行调整优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YOLO大师

你的打赏,我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值