YOLO 算法为何使用 BCE(二元交叉熵)损失

一、前置基础:两种损失搭配的核心区别(通俗理解)

1. Softmax + 多分类交叉熵

  • 本质:单选题,类别互斥
  • 规则:所有类别概率之和必须 = 1,各类别相互"竞争",拉高一类概率就会压低其他类
  • 适用场景:普通图像分类(一张图/一个目标只属于单一类别)

2. Sigmoid + BCE(二元交叉熵)

  • 本质:多选题 / 独立判断题,类别相互独立
  • 规则:每个类别单独输出 0~1 概率,概率和无要求,类别之间互不干扰
  • 适用场景:可同时存在多个类别、二分类判断(是/否)

二、YOLO 中 BCE 的使用位置

YOLO 损失分为三部分,分类分支、置信度分支使用 BCE,边框回归不使用:

  1. 分类分支(cls) :判断预测框内存在哪些目标类别 → Sigmoid + BCE
  2. 置信度分支(obj) :判断预测框内「有没有物体」→ Sigmoid + BCE
  3. 边框回归(box):预测框坐标、尺寸 → 使用 CIoU/GIoU/DIoU 等回归损失

三、核心原因(结合实例讲解)

(一)分类分支:必须用 BCE,不能用 Softmax

目标检测是多标签场景,和普通分类逻辑完全不同。

反例:使用 Softmax(旧版 YOLOv2 及更早方案)

假设画面同一区域同时出现行人 + 自行车

Softmax 强制"只能选一类",想提高"行人"概率,就必须压低"自行车"概率,两类目标互相干扰,模型无法识别共存物体,预测效果差。

正例:使用 BCE(YOLOv3/v5/v8 通用方案)

将每个类别拆成独立判断题:

  • 有没有行人?→ 概率 0.9
  • 有没有自行车?→ 概率 0.8
  • 有没有汽车?→ 概率 0.1
    各类别互不影响,完美支持一个区域同时存在多个目标/属性(如行人+戴口罩)。

额外优势:

  • 拓展性强:增删类别只需调整输出通道,无需改动整体逻辑;
  • 缓解类别不平衡:各类别独立计算梯度,不会被大样本类别主导训练。

(二)置信度分支:天生适配 BCE

置信度任务是纯二分类

  • 标签 1:框内有真实物体
  • 标签 0:框内只有背景(天空、地面、墙壁等)

这类"有/无"的判断题,是 BCE 的经典使用场景,逻辑简单、匹配度高。

(三)为何淘汰早期的 MSE(均方误差)

YOLOv1 曾用 MSE 做置信度/分类损失,后续全面替换为 BCE:

  1. 惩罚力度:MSE 仅计算数值差,对严重错误惩罚弱,模型纠错慢;BCE 对错误预测惩罚更强,模型收敛更快。
  2. 训练稳定性:Sigmoid 激活搭配 MSE 易出现梯度消失,网络难以更新参数;BCE 梯度更合理,训练更稳定。

四、YOLO 损失函数版本演变

算法版本 分类损失 置信度损失 存在问题
YOLOv1 MSE MSE 梯度易消失,纠错能力弱
YOLOv2 Softmax+多分类交叉熵 MSE 类别互斥,不支持多标签
YOLOv3 及以后 BCE BCE 解决以上所有问题,成为标准方案

五、精简总结(记忆要点)

  1. Softmax = 单选题(类别互斥),BCE = 多选题/判断题(类别独立);
  2. YOLO 检测场景常出现多目标共存,分类分支只能用 BCE;
  3. 置信度是"有无物体"的二分类,天然适配 BCE;
  4. 相比 MSE,BCE 训练更稳定、纠错能力更强,是 YOLO 的最优选择。
相关推荐
前网易架构师-高司机10 小时前
带标注的辣椒病叶数据集,识别率95.9%,可识别三种病害和健康叶子,9916张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·病害·叶病·病叶·辣椒
不知名的老吴10 小时前
面经经验分享|算法和数据结构考察
数据结构·经验分享·算法
叫我:松哥10 小时前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
黎阳之光11 小时前
黎阳之光透明大楼:实景孪生重构智慧建筑全新范式
人工智能·物联网·算法·安全·数字孪生
旖-旎12 小时前
《LeetCode 130 被围绕的区域 FloodFill DFS 解法》
c++·算法·深度优先·力扣·floodfill
林森lsjs12 小时前
斐波那契数列的 N 种解法:从递归到动态规划的优化之路【算法思考】
算法·动态规划
apcipot_rain13 小时前
计科八股20260616(1)——堆存中位数、链表判环、黑白测试、敏捷开发与瀑布模型、配置管理、持续集成、池化
数据结构·算法·软件工程
动物园猫13 小时前
直升机停机坪目标检测数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·目标检测
JAVA面经实录91719 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
开源Z21 小时前
LeetCode 42 · 接雨水:从暴力到双指针的三步优化
算法·leetcode