YOLOv8 官方实现(Ultralytics)针对不同任务(检测、分类、分割、姿态估计)设计了模块化的损失函数组合,核心遵循多组件加权联合优化思路。以下是完整拆解:
目录
[1. Box Loss(边界框回归损失)](#1. Box Loss(边界框回归损失))
[2. Classification Loss(分类损失)](#2. Classification Loss(分类损失))
[3. DFL Loss(Distribution Focal Loss,分布焦点损失)](#3. DFL Loss(Distribution Focal Loss,分布焦点损失))
[1. 实例分割专用损失](#1. 实例分割专用损失)
[四、姿态估计任务(Pose Estimation)损失函数](#四、姿态估计任务(Pose Estimation)损失函数)
[1. Keypoint Loss(关键点坐标损失)](#1. Keypoint Loss(关键点坐标损失))
[2. Kobj Loss(关键点存在性损失)](#2. Kobj Loss(关键点存在性损失))
一、核心检测任务(Detection)损失函数
总损失公式:Total Loss = Box Loss + Classification Loss + DFL Loss(均乘以对应权重系数)
1. Box Loss(边界框回归损失)
-
核心实现 :CIoU Loss (Complete IoU Loss),是 IoU 系列损失的最终优化版
-
同时优化边界框的位置、尺度、长宽比和重叠度,解决传统 IoU 无法区分非重叠框的缺陷
-
公式:
,其中
为权衡系数,
衡量长宽比一致性
-
-
权重设置 :默认
hyp.box = 5.0(可在配置文件调整) -
优点:收敛速度快,定位精度高,对边界框形状变化敏感
-
缺点:计算量略大于基础 IoU,极端长宽比时可能不稳定
2. Classification Loss(分类损失)
-
核心实现 :BCEWithLogitsLoss(带 Sigmoid 的二元交叉熵),配合动态标签分配策略
-
支持多标签分类,输出各类别独立概率,而非 Softmax 归一化的互斥概率
-
可选启用Varifocal Loss (VFL)(代码中注释部分),解决类别极度不平衡问题
-
-
权重设置 :默认
hyp.cls = 1.0 -
优点:梯度稳定,适合反向传播,对类别不平衡有一定鲁棒性
-
缺点:极端正负样本比例下仍可能偏向多数类
3. DFL Loss(Distribution Focal Loss,分布焦点损失)
-
核心实现 :预测边界框坐标的离散概率分布而非直接回归坐标值
-
将坐标预测转化为对预设 bin 的概率分布,通过 softmax 获得连续坐标,减少量化误差
-
公式:
,其中
为目标分布,
为预测分布
-
-
权重设置 :默认
hyp.dfl = 1.5(高分辨率图像可降至 1.0) -
优点:提升小目标定位精度,梯度更稳定,缓解边界框预测的模糊性
-
缺点 :增加计算量,需调参
reg_max(默认 16,bin 数量)
二、分类任务(Classification)损失函数
-
核心实现 :CrossEntropyLoss(交叉熵损失) + Label Smoothing(标签平滑)
-
标签平滑将硬标签(如 [1,0,0])改为软标签(如 [0.9,0.05,0.05]),抑制模型过自信
-
代码路径:
ultralytics/models/yolo/classify/train.py
-
-
优点:多分类标准配置,泛化能力强,防止过拟合
-
缺点:平滑系数过大会导致欠拟合,需手动调整
三、分割任务(Segmentation)损失函数
总损失公式:Total Loss = Box Loss + Segmentation Loss + Classification Loss + DFL Loss
1. 实例分割专用损失
-
核心实现 :BCEWithLogitsLoss + 掩码裁剪(Crop Mask),针对原型掩码(Proto Mask)设计
-
计算预测掩码与真实掩码的二元交叉熵,仅在边界框内计算损失,减少背景干扰
-
公式:
-
-
权重设置 :默认
hyp.box = 5.0(分割部分复用 box 权重) -
可选扩展 :可与 Dice Loss 联合使用,提升小目标和医学图像分割效果
四、姿态估计任务(Pose Estimation)损失函数
总损失公式:Total Loss = Box Loss + Keypoint Loss + Kobj Loss + Classification Loss + DFL Loss
1. Keypoint Loss(关键点坐标损失)
-
核心实现 :OKS Loss(Object Keypoint Similarity Loss),基于 COCO 关键点评估标准设计
-
对不同关键点使用自适应权重 (通过
sigmas参数),如面部关键点权重高于肢体关键点 -
公式:
,其中
为预测与真实关键点距离,
为目标尺度,
为关键点标准差
-
-
权重设置 :默认
hyp.pose = 12.0
2. Kobj Loss(关键点存在性损失)
-
核心实现 :BCEWithLogitsLoss,用于预测关键点是否可见 / 存在
-
权重设置 :默认
hyp.kobj = 1.0
五、旋转框检测(OBB)任务损失函数
-
复用检测任务的 CIoU Loss + DFL Loss + BCE 分类损失,新增角度预测分支
-
角度回归采用平滑 L1 损失,确保角度预测的连续性和稳定性
六、损失函数权重默认配置(hyp.yaml)
|---------------------|----------|------|--------------------|
| 损失类型 | 权重参数 | 默认值 | 调整建议 |
| Box Loss | hyp.box | 5.0 | 小目标检测可提高至 6.0-8.0 |
| Classification Loss | hyp.cls | 1.0 | 类别不平衡时可提高至 1.5-2.0 |
| DFL Loss | hyp.dfl | 1.5 | 高分辨率图像可降至 1.0 |
| Segmentation Loss | hyp.box | 5.0 | 与 Box Loss 共享权重 |
| Keypoint Loss | hyp.pose | 12.0 | 关键点密集时可提高至 15.0 |
| Kobj Loss | hyp.kobj | 1.0 | 关键点遮挡严重时可提高至 2.0 |
七、核心特点总结
-
模块化设计:不同任务复用基础损失组件,仅新增专用分支(如分割掩码损失、姿态关键点损失)
-
动态标签分配:所有损失计算前均通过 Task-Aligned Assigner 分配正负样本,提升训练效率
-
边界框优化:CIoU + DFL 组合是 YOLOv8 定位精度提升的核心,尤其适合小目标和复杂场景
-
灵活配置:支持通过配置文件调整损失权重和启用高级损失(如 VFL),适配不同数据集特性