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

相关推荐
AwakeFantasy13 小时前
聊聊近况和最近做的踩坑项目
人工智能·python·gpt·ocr
路人甲32613 小时前
Moravec‘s Paradox and the Robot Olympics
人工智能·深度学习·计算机视觉·机器人·具身智能
stsdddd13 小时前
YOLO系列目标检测数据集大全【第三期】
yolo·目标检测·目标跟踪
黄啊码13 小时前
【黄啊码】拉勾倒了,但你的简历早就不该在招聘软件上了
人工智能·面试
头歌实践平台13 小时前
头歌 卷积神经网络卷积核和结构设计实验
人工智能·深度学习·cnn
DogDaoDao13 小时前
OpenCV 踩坑全指南
图像处理·人工智能·python·opencv·计算机视觉·matplotlib·rgb
J2虾虾13 小时前
Spring AI Alibaba - 检索增强生成(RAG)
人工智能·spring·原型模式
一切皆是因缘际会13 小时前
底层重构与价值破壁人工智能产业变革
人工智能·安全·重构·系统架构
团象科技13 小时前
企业出海本地化攻坚阶段 云端大模型微调的跨区域适配实践观察
大数据·人工智能
拾年27513 小时前
一个月更 30 个版本!Claude Code 5 月核心更新,效率直接拉满
人工智能·ai编程·claude