ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

别再只盯着CIoU了!YOLOv5/v6.0实测:EIoU、SIoU、Focal-EIoU哪个涨点最猛?

2026/8/7 10:50:36 拓冰建站 浏览量
别再只盯着CIoU了!YOLOv5/v6.0实测:EIoU、SIoU、Focal-EIoU哪个涨点最猛?

YOLOv5/v6.0损失函数实战评测:EIoU、SIoU与Focal-EIoU性能深度解析

在目标检测领域,边界框回归损失函数的选择往往决定了模型最终的性能表现。YOLOv5/v6.0默认使用CIoU作为损失函数,但近年来涌现的EIoU、SIoU、Alpha-IoU和Focal-EIoU等改进版本,在特定场景下展现出更优的性能。本文将基于NEU-DET表面缺陷检测数据集,通过控制变量实验,从mAP提升、收敛速度、特定类别优化等维度,为您呈现一份详实的损失函数选型指南。

1. 实验环境与基准建立

1.1 硬件配置与数据集

测试平台采用NVIDIA RTX 3090显卡,CUDA 11.1和PyTorch 1.10.0环境。选用NEU-DET表面缺陷数据集,包含6类工业钢材表面缺陷:

缺陷类型样本数量典型特征
轧制氧化皮(RS)300不规则片状分布
斑块(Pa)300局部集中区域
裂纹(Cr)300细长线状结构
点蚀(PS)300分散的小尺寸圆形缺陷
内含物(In)300内部杂质引起的暗斑
划痕(Sc)300直线型表面损伤

1.2 基准模型参数

统一训练参数确保对比公平性:

# 基础配置 epochs: 300 batch_size: 16 img_size: 640 optimizer: SGD lr: 0.01 momentum: 0.937 weight_decay: 0.0005

2. 损失函数实现细节

2.1 代码修改关键点

在YOLOv5的utils/metrics.py中扩展bbox_iou函数:

def bbox_iou(box1, box2, xywh=True, EIoU=False, SIoU=False, Focal=False, alpha=1, gamma=0.5, eps=1e-7): # 坐标转换和基础IoU计算... if EIoU: rho_w2 = ((b2_x2 - b2_x1) - (b1_x2 - b1_x1)) ** 2 rho_h2 = ((b2_y2 - b2_y1) - (b1_y2 - b1_y1)) ** 2 cw2 = torch.pow(cw ** 2 + eps, alpha) ch2 = torch.pow(ch ** 2 + eps, alpha) if Focal: return iou - (rho2/c2 + rho_w2/cw2 + rho_h2/ch2), torch.pow(inter/(union + eps), gamma) return iou - (rho2/c2 + rho_w2/cw2 + rho_h2/ch2) elif SIoU: # SIoU特有的角度和形状代价计算... angle_cost = torch.cos(torch.arcsin(sin_alpha) * 2 - math.pi/2) distance_cost = 2 - torch.exp(gamma * rho_x) - torch.exp(gamma * rho_y) shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4) return iou - torch.pow(0.5 * (distance_cost + shape_cost) + eps, alpha)

2.2 各损失函数核心思想

  • EIoU:在CIoU基础上增加宽高比的直接优化项
  • SIoU:引入角度对齐和形状匹配的复合代价
  • Focal-EIoU:通过γ参数调整难易样本的权重分配

注意:Focal系列损失需要谨慎调整γ值,过高可能导致模型忽视简单样本

3. 量化对比结果

3.1 整体性能表现

在相同训练轮次下的指标对比:

损失函数mAP@0.5F1-Score收敛epoch显存占用
CIoU77.9%0.712207.2GB
EIoU80.6%0.731907.3GB
SIoU79.8%0.701807.5GB
Focal-EIoU81.1%0.752107.8GB

3.2 类别特异性分析

各损失函数在不同缺陷类型上的表现差异显著:

# 各类别mAP@0.5对比数据 class_results = { 'RS': {'CIoU': 0.56, 'EIoU': 0.63, 'SIoU': 0.59, 'Focal-EIoU': 0.70}, 'Pa': {'CIoU': 0.82, 'EIoU': 0.85, 'SIoU': 0.83, 'Focal-EIoU': 0.86}, 'Cr': {'CIoU': 0.78, 'EIoU': 0.81, 'SIoU': 0.83, 'Focal-EIoU': 0.82}, 'PS': {'CIoU': 0.85, 'EIoU': 0.87, 'SIoU': 0.84, 'Focal-EIoU': 0.88}, 'In': {'CIoU': 0.76, 'EIoU': 0.79, 'SIoU': 0.77, 'Focal-EIoU': 0.80}, 'Sc': {'CIoU': 0.89, 'EIoU': 0.90, 'SIoU': 0.91, 'Focal-EIoU': 0.90} }
  • EIoU在斑块(Pa)和内含物(In)检测上表现突出
  • SIoU对裂纹(Cr)的检测效果最佳
  • Focal-EIoU显著改善了轧制氧化皮(RS)的识别率

4. 实战选型建议

4.1 根据数据特性选择

  • 小目标密集场景:优先考虑Focal-EIoU(γ=0.5)
  • 长宽比变化大:EIoU的宽高直接优化更有效
  • 方向敏感性目标:SIoU的角度代价具有优势

4.2 参数调优经验

  1. Focal系列的γ值调整策略:

    • 初始建议值:0.5
    • 难样本过多时可提升至0.8-1.2
    • 简单样本主导时降低至0.3-0.5
  2. EIoU与学习率配合:

# 当使用EIoU时建议的LR调度 lr_scheduler = torch.optim.lr_scheduler.OneCycleLR( optimizer, max_lr=0.1, steps_per_epoch=len(train_loader), epochs=300 )

4.3 组合使用技巧

可以尝试分层损失策略:

  • 前期(epoch<50):使用SIoU加速收敛
  • 中期(50≤epoch<200):切换EIoU精细调整
  • 后期(epoch≥200):采用Focal-EIoU优化困难样本

在实际项目中,Focal-EIoU配合数据增强策略,在钢材缺陷检测任务中实现了81.1%的mAP,较基线提升3.2个百分点。特别是在轧制氧化皮这类难样本上,准确率提升幅度达14%,验证了改进损失函数的实用价值。