当前位置: 首页 > ops >正文

YOLOv1 技术详解:正负样本划分与置信度设计

🔍 YOLOv1 技术详解:正负样本划分与置信度设计

一、前言

YOLOv1 是目标检测领域中具有划时代意义的算法之一,它将检测任务统一为一个回归问题,实现了“You Only Look Once”的端到端实时检测。其中,正负样本的划分机制置信度(confidence)的设计 是理解其训练流程的关键。

本文将从以下两个方面深入解析:

  • YOLOv1 中的正负样本是如何划分的?
  • 置信度(confidence)到底是什么?它的计算方式和作用是什么?

二、YOLOv1 的输出结构回顾

在进入正题之前,先简单回顾一下 YOLOv1 的输出结构:

✅ 输出张量维度:

S × S × (B×5 + C)

其中:

  • S:网格数量(通常为 7)
  • B:每个网格预测的边界框数量(通常为 2)
  • 5:每个 bounding box 包含的信息:x, y, w, h, confidence
  • C:类别数量(如 PASCAL VOC 为 20)

三、正样本与负样本的划分机制

在训练过程中,YOLOv1 并不是对所有预测框都进行监督学习,而是根据真实框的位置来选择哪些预测框是负责预测该物体的。

🧠 核心思想:

  • 每个真实框(ground truth)只会被分配给一个 grid cell;
  • 这个 grid cell 内的多个 bounding box 中,IoU 最高的那个预测框作为正样本
  • 其他不负责预测真实框的预测框可能被视为负样本或忽略项。

📌 划分步骤详解:

  1. 确定真实框中心所在的 grid cell

    • 图像被划分为 S × S 的网格;
    • 真实框的中心点落在哪个格子,就由该格子负责预测;
  2. 在该 grid cell 的 B 个预测框中找出 IoU 最高的那个

    • 计算每个预测框与真实框的 IoU;
    • 只有这个 IoU 最高的预测框会被标记为“正样本”,参与位置损失和置信度损失的计算;
  3. 其他预测框如何处理?

    • 如果某个预测框与任意真实框的 IoU 超过阈值(如 0.5),也可能会被标记为正样本;
    • 否则,仅用于置信度损失计算(即认为“不含物体”);
  4. 负样本定义

    • 所有未被选中的预测框,若其预测的边界框与所有真实框的 IoU 都小于设定阈值,则视为“负样本”;
    • 仅参与置信度损失的计算,不参与位置损失;

四、置信度(Confidence)详解

置信度是 YOLOv1 中非常重要的一个概念,它不仅表示预测框是否包含物体,还结合了预测框与真实框之间的重叠程度(IoU)。

🧮 置信度的定义:

confidence = P ( object ) × IoU pred,truth \text{confidence} = P(\text{object}) \times \text{IoU}_{\text{pred,truth}} confidence=P(object)×IoUpred,truth

其中:

  • P ( object ) P(\text{object}) P(object):当前预测框是否包含物体(0 或 1);
  • IoU pred,truth \text{IoU}_{\text{pred,truth}} IoUpred,truth:预测框与真实框的交并比;

🎯 置信度的作用:

场景置信度含义
正样本表示预测框准确地定位到了物体,并且 IoU 较高
负样本应该趋近于 0,表示“这里没有物体”
误检区域置信度应低,避免误报

⚖️ 损失函数中置信度的作用:

在损失函数中,置信度部分的损失分为两部分:

  • 正样本:希望置信度接近 IoU 值;
  • 负样本:希望置信度趋近于 0;

公式如下:

L confidence = ∑ i = 0 S 2 ∑ j = 0 B [ 1 i j obj ⋅ ( conf i j − conf ^ i j ) 2 + λ noobj ⋅ ( 1 − 1 i j obj ) ⋅ ( conf i j ) 2 ] \mathcal{L}_{\text{confidence}} = \sum_{i=0}^{S^2} \sum_{j=0}^{B} \left[ \mathbb{1}_{ij}^{\text{obj}} \cdot \left(\text{conf}_i^j - \hat{\text{conf}}_i^j \right)^2 + \lambda_{\text{noobj}} \cdot \left(1 - \mathbb{1}_{ij}^{\text{obj}} \right) \cdot \left(\text{conf}_i^j \right)^2 \right] Lconfidence=i=0S2j=0B[1ijobj(confijconf^ij)2+λnoobj(11ijobj)(confij)2]

其中 λ noobj \lambda_{\text{noobj}} λnoobj 是一个较小的权重系数(一般设为 0.5),用于降低负样本的影响。


五、正负样本划分的可视化说明(伪代码示意)

for each ground_truth_box in ground_truth_boxes:# Step 1: 找到对应 grid cellgrid_x, grid_y = get_grid_cell(image_size, S, ground_truth_box.center)# Step 2: 在该 grid cell 的 B 个预测框中计算 IoUious = [iou(pred_box, ground_truth_box) for pred_box in predicted_boxes[grid_x][grid_y]]# Step 3: 选取 IoU 最大的预测框作为正样本best_idx = np.argmax(ious)positive_boxes.append(predicted_boxes[grid_x][grid_y][best_idx])# Step 4: 其余预测框判断是否也为正样本(IoU > threshold)for j in range(B):if j != best_idx and ious[j] > iou_threshold:positive_boxes.append(predicted_boxes[grid_x][grid_y][j])else:negative_boxes.append(predicted_boxes[grid_x][grid_y][j])

六、总结

模块内容
正样本划分每个真实框只分配给一个 grid cell,该 cell 中 IoU 最高的预测框作为正样本
负样本划分不包含物体的预测框作为负样本,仅参与置信度损失
置信度设计 P ( object ) × IoU P(\text{object}) \times \text{IoU} P(object)×IoU,衡量预测框的准确性和置信程度
置信度作用控制模型是否相信某个预测框含有物体,影响最终检测结果

七、结语

YOLOv1 通过统一建模的方式,首次实现了端到端的目标检测流程。其中,正负样本的划分机制置信度的设计 是其训练稳定性和检测精度的重要保障。

虽然后续版本(如 YOLOv2、YOLOv3、YOLOX)对此进行了优化,但理解 YOLOv1 的这些核心机制,有助于我们更好地掌握现代目标检测框架的发展脉络。


📌 欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于计算机视觉、目标检测、深度学习、YOLO系列等内容!


🎯 下期预告:
《YOLOv2 技术详解:引入 Anchor Boxes 与多尺度预测》
敬请期待!🚀

http://www.xdnf.cn/news/13427.html

相关文章:

  • 【unitrix】1.1 密封模式(srcsealed.rs)
  • SQL29 验证刷题效果,输出题目真实通过率
  • Spring声明式事务生效是有条件滴!
  • 达梦数据库单机部署dmhs同步复制(dm8->kafka)
  • MFC 第1章:适配 WIndows 编程的软件界面调整
  • 如何诊断服务器硬盘故障?出现硬盘故障如何处理比较好?
  • 【沉浸式解决问题】Idea运行Junit测试中scanner无法获取控制台的输入内容
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试对话标题自动总结
  • 看安科瑞分布式光伏解决方案如何破解光伏痛点?
  • Python实战案例详解:基于计算器项目的扩展应用
  • 前端框架vue3的变化之处
  • API:解锁数字化协作的钥匙及开放实现路径深度剖析
  • HakcMyVM-Blackhat
  • Ubuntu 24.04 上安装与 Docker 部署 Sentinel
  • UE5 学习系列(六)导入资产包
  • BW非法字符处理
  • 智能空气流向控制系统SKLX的优化与实践
  • Hi3519DV500开发板适配新sensor的详细流程(最新版)
  • 96页PPT华为销售战略规划市场洞察品牌策略
  • Squid 代理服务器实战:解决动态 IP 访问第三方接口的生产级方案
  • 多系统合路器(POI)详解
  • 【数据结构】 优先级队列 —— 堆
  • 波形合成之C语言实现
  • NuGet 从入门到精进全解析
  • Intel Boot Guard
  • 系统集成自动化流程编排实现条件分支高级篇(二)
  • 实战使用docker compose 搭建 Redis 主从复制集群
  • 依存句法分析
  • Cockpit:一个开源的 Linux 系统管理工具
  • 蚁群算法(Ant Colony Optimization)原理与应用解析