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

YOLO v1 输出结构、预测逻辑与局限性详解

YOLO v1 输出结构、预测逻辑与局限性详解

在目标检测领域,YOLO(You Only Look Once)系列模型以端到端的实时检测能力而闻名。
本篇文章将详细讲解 YOLO v1 的输出结构、预测框与类别概率的对应关系,以及在多物体场景下的局限性,并结合实例分析它的设计思想与不足。


模型输出结构

YOLO v1 将输入图像划分为 $7\times7$ 网格(Grid Cell),每个网格预测一个 30 维向量,组成 $7\times7\times30$ 的输出张量。

每个网格的预测内容

  • 两个预测框(Bounding Box)

    • 中心点坐标 $(X, Y)$:相对于该网格左上角归一化到 $0\sim1$

    • 宽高 $(W, H)$:相对于整张图像归一化到 $0\sim1$

    • 置信度 $C$:综合物体存在概率 $P_{\text{object}}$ 与 IOU,计算公式:

      C=Pobject×IOU C = P_{\text{object}} \times IOU C=Pobject×IOU

  • 一组类别概率(P)

    • 20 维向量(以 VOC 数据集为例)
    • 通过 Softmax 输出,表示当前网格内物体属于各类别的概率
    • 两个预测框共享同一组类别概率

因此,一个网格的 30 个输出维度分布如下:

(5参数×2框)+20类别概率=30 (5 \text{参数} \times 2 \text{框}) + 20 \text{类别概率} = 30 (5参数×2)+20类别概率=30


为什么两个框共享类别概率?

YOLO v1 的设计假设:

每个网格中只会有一个主要物体(物体的中心点落在该网格中)

基于这个假设:

  • 类别概率与具体框位置无关,只由网格负责预测
  • 两个框的区别只在于位置与置信度,类别预测是共享的

最终预测得分计算

对于每个预测框:

scorebox=Cbox×P(class) \text{score}_{\text{box}} = C_{\text{box}} \times P(\text{class}) scorebox=Cbox×P(class)

其中:

  • $C_{\text{box}}$ 是该框的置信度
  • $P(\text{class})$ 是该网格预测的某一类别的概率

例子
某网格输出:

Box1: C=0.9
Box2: C=0.6
P: [0.1, 0.05, 0.8, ...]  # 第3类是“狗”

则:

  • Box1 对“狗”的得分 = $0.9 \times 0.8 = 0.72$
  • Box2 对“狗”的得分 = $0.6 \times 0.8 = 0.48$

后处理流程

  1. 置信度阈值筛选

    • 保留得分高于设定阈值(如 0.5)的预测框
  2. 非极大值抑制(NMS)

    • 针对同类别预测框,保留得分最高的框
    • 删除 IOU 高于阈值(如 0.5)的其他框

多物体与多框的两种情况

情况 1:同一网格内有多个物体
  • YOLO v1 只预测一个类别
  • 如果两个物体的中心点落在同一网格中,模型只能保留一个(通常是面积更大的那个)
  • 另一个物体会被漏检
    缺陷:小目标密集场景中容易漏检
情况 2:多个预测框共享一个物体
  • 多个框可能同时检测到同一物体
  • NMS 会保留得分最高的框,删除冗余框
  • 这种情况是正常且可被算法处理的

示例可视化(建议在文章中配图)

  1. 输出结构图

    • 展示 $7\times7$ 网格、每个网格两个框 + 共享类别概率
  2. 多物体漏检示意图

    • 一个网格里有一只猫和一只狗,模型只能输出一个类别
  3. NMS 去重示意图

    • 多个框围住同一只猫,NMS 保留得分最高的框

总结

  • 两个预测框共享同一组类别概率是 YOLO v1 的设计特征
  • 该设计减少了输出维度,但限制了同一网格多类别检测能力
  • 对于同一物体的多框预测,通过 NMS 解决
  • 后续版本(YOLOv2/v3/v5)引入 多尺度预测Anchor,缓解了小目标漏检问题
http://www.lryc.cn/news/619576.html

相关文章:

  • 教育元宇宙:一场重构教育生态的数字革命
  • 在实验室连接地下车库工控机及其数据采集设备
  • 面向局部遮挡场景的目标检测系统设计与实现
  • 开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界
  • Go语言实战案例:使用Gin处理路由参数和查询参数
  • .net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现
  • Redis学习——Redis的十大类型String、List、Hash、Set、Zset
  • SQL详细语法教程(一)--数据定义语言(DDL)
  • PCIe Base Specification解析(十)
  • 基于机器学习的自动驾驶汽车新型失效运行方法
  • BGP综合实验_Te. BGP笔记
  • Python实战教程:PDF文档自动化编辑与图表绘制全攻略
  • Blender模拟结构光3D Scanner(一)外参数匹配
  • 解决:nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module
  • PyTorch神经网络工具箱(神经网络核心组件)
  • 第十二节:粒子系统:海量点渲染
  • 5.0.9.1 C# wpf通过WindowsFormsHost嵌入windows media player(AxInterop.WMPLib)
  • Go 1.25正式发布
  • ant-design a-from-model的校验
  • 自然语言处理的实际应用
  • OpenAI官方写的GPT-5 prompt指南
  • [C语言]第二章-从Hello World到头文件
  • 服务器硬件电路设计之 I2C 问答(五):I2C 总线数据传输方向如何确定、信号线上的串联电阻有什么作用?
  • Vue实时刷新,比如我提交审核,审核页面还需要点查询才能看到最新数据
  • 广州健永信息科技有限公司发展历程
  • 【分布式 ID】一文详解美团 Leaf
  • ubuntu24.04安装 bpftool 以及生成 vmlinux.h 文件
  • MySQL的MVCC多版本并发控制
  • 拓扑结构图解析
  • iscc2025区域赛wp