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),适配不同数据集特性

相关推荐
老王谈企服1 小时前
【2026深度洞察】制造业供应链全链路可视化,未来有哪些技术发展方向? | 实在Agent企业级解决方案
人工智能·ai
Agent产品评测局1 小时前
国产vs海外AI Agent方案,制造业场景适配性横评:2026年企业级自动化选型全景观察
运维·人工智能·ai·chatgpt·自动化
创意岛1 小时前
大湾区企业如何破解“品牌失语”,在AI时代夺回定义权?
人工智能·python
沪漂阿龙1 小时前
面试题:逻辑回归是什么?为什么用 Sigmoid、对数损失、最大似然、Softmax、多分类、类别不平衡一文讲透
人工智能·算法·机器学习·分类·逻辑回归
丷丩1 小时前
我正用AI Agent重构传统GIS 核心功能,说大白话做空间分析
人工智能·gis·geoai
xiaozhazha_1 小时前
从“看”到“干”的跨越:快鹭AI如何重构企业业务流程的技术实践
人工智能·重构
波动几何1 小时前
内发与共鸣:基于“仁-感”本体的关怀生成论——对吉利根关怀伦理的哲学重构
人工智能
www.021 小时前
(二)windows下CLIProxyAPI:手动添加ChatGPT账号(个人记录)
人工智能·windows·chatgpt·算力·token·反代·cliproxyapi