YOLOv8 官方损失函数详解(按任务分类)

YOLOv8 官方实现(Ultralytics)针对不同任务(检测、分类、分割、姿态估计)设计了模块化的损失函数组合,核心遵循多组件加权联合优化思路。以下是完整拆解:


目录

一、核心检测任务(Detection)损失函数

[1. Box Loss(边界框回归损失)](#1. Box Loss(边界框回归损失))

[2. Classification Loss(分类损失)](#2. Classification Loss(分类损失))

[3. DFL Loss(Distribution Focal Loss,分布焦点损失)](#3. DFL Loss(Distribution Focal Loss,分布焦点损失))

二、分类任务(Classification)损失函数

三、分割任务(Segmentation)损失函数

[1. 实例分割专用损失](#1. 实例分割专用损失)

[四、姿态估计任务(Pose Estimation)损失函数](#四、姿态估计任务(Pose Estimation)损失函数)

[1. Keypoint Loss(关键点坐标损失)](#1. Keypoint Loss(关键点坐标损失))

[2. Kobj Loss(关键点存在性损失)](#2. Kobj Loss(关键点存在性损失))

五、旋转框检测(OBB)任务损失函数

六、损失函数权重默认配置(hyp.yaml)

七、核心特点总结


一、核心检测任务(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 |


七、核心特点总结

  1. 模块化设计:不同任务复用基础损失组件,仅新增专用分支(如分割掩码损失、姿态关键点损失)

  2. 动态标签分配:所有损失计算前均通过 Task-Aligned Assigner 分配正负样本,提升训练效率

  3. 边界框优化:CIoU + DFL 组合是 YOLOv8 定位精度提升的核心,尤其适合小目标和复杂场景

  4. 灵活配置:支持通过配置文件调整损失权重和启用高级损失(如 VFL),适配不同数据集特性

相关推荐
ZzT5 小时前
怎么做才不会被 AI 替代?
人工智能·程序员
鱼鱼不愚与5 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
道友可好5 小时前
从今天开始:你的第一个 Harness Engineering 实践
前端·人工智能·后端
小姜前线技术6 小时前
AI回答代码块高亮加一键复制
人工智能
洛阳泰山6 小时前
从 0 到 1.6K Star:一个 Java 开源项目的增长复盘
人工智能·后端·开源
米小虾7 小时前
Agent Skill 设计模式完全指南
人工智能·agent
饼干哥哥8 小时前
保姆级教程:用Image2 + Seedance2.0 做长视频,以品牌广告为例
人工智能
米小虾8 小时前
Agent Skill 规范与 Skill-Creator 核心思想
人工智能·agent
ZhengEnCi8 小时前
09e-斯坦福CS336作业四:大规模语言模型训练数据收集与处理
人工智能
oil欧哟8 小时前
Codex 最佳实践(超级长文):先搞懂 AI,再用好 AI
前端·人工智能·后端