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

【目标检测系列】YOLOV1解读

目标检测系列文章


目录

  • 目标检测系列文章
  • 📄 论文标题
  • 🧠 论文逻辑梳理
      • 1. 引言部分梳理 (动机与思想)
  • 📝 三句话总结
  • 🔍 方法逻辑梳理
  • 🚀 关键创新点
  • 🔗 方法流程图
  • 关键疑问解答
    • Q1: 关于 YOLOv1 中的 "confidence scores"
    • Q2 YOLOv1 如何确定正样本?


📄 论文标题

YOLOV1 You Only Look Once: Unified, Real-Time Object Detection
作者:Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
团队:University of Washington


🧠 论文逻辑梳理

1. 引言部分梳理 (动机与思想)

AspectDescription (Motivation / Core Idea)
问题背景 (Problem)传统的优秀目标检测器(如R-CNN系列)虽然精度高,但流程复杂(候选区域生成 + 分类 + 回归),导致速度慢,难以满足实时性要求。
目标 (Goal)对整张图片只进行一次前向传播,直接从完整的图像像素预测边界框坐标和类别概率
核心思想 (Core Idea)将目标检测视为一个单一的回归问题,而不是一个复杂的、多阶段的流程。

📝 三句话总结

方面内容
❓发现的问题
  • 传统目标检测方法速度慢:当时的SOTA检测器如R-CNN系列(包括Fast R-CNN, Faster R-CNN)虽然精度高,但通常包含多个阶段(如候选区域生成、特征提取、分类、边界框回归),导致计算量大,难以满足实时应用的需求。

  • 流程复杂:多阶段流程使得系统优化和训练相对复杂。
💡提出的方法 (R-CNN)
  • 统一的检测框架 (Unified Detection Framework):YOLO将目标检测重新定义为一个单一的回归问题。整个图像通过一个单独的卷积神经网络,直接输出所有目标的边界框坐标和类别概率。这摒弃了传统方法中的候选区域生成步骤。
  • 网格划分 (Grid Cell System):将图像划分为 S × S S \times S S×S 的网格。如果一个物体的中心落入某个网格单元,该单元就负责预测这个物体。这种空间约束简化了问题,并使得每个单元的任务相对独立。
  • 全局信息利用:由于网络一次性处理整个图像,它在做预测时能够利用图像的全局上下文信息,这有助于减少背景误检(将背景错误地识别为物体)。
⚡该方案的局限性/可改进的点
  • 对小物体检测效果不佳:每个网格单元只能预测有限数量( B B B个)的边界框,并且只负责预测一个类别(共享类别概率)。如果多个小物体的中心落入同一个网格单元,YOLOv1只能检测出来一个。
  • 定位精度相对较低:由于网格划分相对较粗,且边界框的预测直接从特征图回归得到,其定位精度不如那些依赖精细候选区域的方法。对不常见宽高比或尺寸的物体泛化能力也有限。
  • 每个网格单元只能预测一个类别集合:如果一个网格单元内同时包含多个不同类别的物体(即使中心点不同,但都落入该单元),由于类别概率共享,它也难以同时识别出这些不同类别的物体。
  • 召回率相对较低:与基于候选区域的方法相比,YOLO产生的候选框数量是固定的 ( S × S × B S \times S \times B S×S×B),这可能导致对一些物体的漏检。
  • 损失函数对大框和小框的权重处理:虽然对w和h使用了平方根来缓解大框误差主导损失的问题,但对不同尺寸物体的定位精度仍有优化空间。

🔍 方法逻辑梳理

  • 模型输入 (Input) 是什么?

    • 一张完整的图像,通常缩放到固定尺寸(例如 448 × 448 × 3 448 \times 448 \times 3 448×448×3 的张量)。
  • 处理流程 (Processing Flow)(encoder,decoder,有没有特殊模块?)

    1. Encoder (编码器/特征提取器)
      • YOLOv1使用一个单一的卷积神经网络作为其骨干网络(Encoder)。这个网络基于GoogLeNet(包含24个卷积层)或作者后来提出的Darknet(包含19个卷积层)进行修改。
      • 它的作用是从输入图像中提取丰富的特征。通过一系列卷积层和池化层,图像的空间维度逐渐减小,而特征维度(通道数)逐渐增加。
    2. Decoder (解码器/预测头) - 概念上的
      • 严格来说,YOLOv1不像现代的Encoder-Decoder架构(如U-Net或Transformer)那样有一个明确的、复杂的Decoder结构。
      • 可以认为其网络的最后几层(通常是全连接层,或者在全卷积版本中是卷积层)充当了“解码”或“预测”的角色。这些层接收来自Encoder的高层特征图,并将其转换为最终的预测张量。
    3. 特殊模块/概念
      • 网格划分 (Grid Cell):这不是一个网络层,而是一个核心概念。网络输出的张量在空间上对应于输入图像的 S × S S \times S S×S 网格。
      • 全连接层 (Fully Connected Layers):在原始YOLOv1论文中,骨干CNN的输出特征图会先被展平,然后通过两个全连接层来最终预测边界框坐标、置信度和类别概率。这意味着网络的输出具有固定的空间维度( S × S S \times S S×S),对于不同尺寸的输入图像,需要先将其缩放到固定大小。
      • 边界框参数化:预测的 ( x , y ) (x,y) (x,y) 是相对于网格单元的偏移, ( w , h ) (w,h) (w,h) 是相对于整个图像的比例。这种相对坐标的预测方式使得学习更容易。
      • 置信度计算 P ( Object ) × I O U pred truth P(\text{Object}) \times IOU_{\text{pred}}^{\text{truth}} P(Object)×IOUpredtruth 的定义是一个关键。
  • 输出 (Output) 是什么?

    • 一个三维张量,形状为 S × S × ( B × 5 + C ) S \times S \times (B \times 5 + C) S×S×(B×5+C)
      • S × S S \times S S×S: 代表网格的数量。
      • 对于每个网格单元 ( S × S S \times S S×S 中的一个):
        • B × 5 B \times 5 B×5: 包含 B B B 个边界框的预测信息。每个边界框有5个值: ( x , y , w , h , confidence ) (x, y, w, h, \text{confidence}) (x,y,w,h,confidence)
        • C C C: 包含 C C C 个类别的条件概率 P ( Class i ∥ Object ) P(\text{Class}_i \| \text{Object}) P(ClassiObject)
  • 怎么训练 (Training)?

    1. 数据准备:将真实标注(物体类别和边界框坐标)通过 YoloMatcher(或类似逻辑)转换为基于网格的目标张量(gt_objectness, gt_classes, gt_bboxes)。
    2. 损失函数:如前所述,使用一个多部分组成的损失函数,优化定位、置信度和分类。
      • 定位损失:只对正样本(负责检测物体的预测框)计算 ( x , y , w , h ) (x,y,w,h) (x,y,w,h) 的均方误差( w , h w,h w,h 取平方根)。乘以权重 λ coord \lambda_{\text{coord}} λcoord
      • 置信度损失
        • 对正样本:目标是其与真实框的IoU,计算均方误差。
        • 对负样本:目标是0,计算均方误差。乘以权重 λ noobj \lambda_{\text{noobj}} λnoobj
      • 分类损失:只对包含物体的网格单元(正样本单元)计算类别概率的均方误差。
    3. 优化器:使用标准的随机梯度下降(SGD)及其变种进行优化。
    4. 预训练:骨干网络通常在ImageNet等大规模图像分类数据集上进行预训练,以学习通用的图像特征,然后进行微调。

🚀 关键创新点

  1. 创新点1:统一的检测框架 (Unified Detection as Regression)

    • 为什么要这样做? 为了解决传统多阶段检测方法(如R-CNN系列)速度慢、流程复杂的问题。将检测视为单一的回归任务可以大大简化流程并提高效率。
    • 如果不用它,会出什么问题? 检测速度会很慢,难以满足实时应用的需求。系统集成和优化也会更加复杂。
  2. 创新点2:全局上下文信息利用 (Global Context)

    • 为什么要这样做? 传统方法中,分类器通常只看到局部候选区域,缺乏全局信息,容易将背景误识别为物体。
    • 如果不用它,会出什么问题? 背景误检(False Positives)的概率会更高。YOLO在预测时能看到整张图片,因此对物体及其周围环境有更全面的理解,能更好地区分物体和背景。
  3. 创新点3:网格单元划分与责任分配 (Grid Cell System)

    • 为什么要这样做? 提供了一种简单有效的方式来将物体的空间定位问题离散化,并为不同的预测器分配明确的职责。每个单元格只负责预测其中心点落入的物体,并预测少量的边界框。
    • 如果不用它,会出什么问题? 如果没有这种空间约束,直接从全局特征回归所有物体的位置和类别会非常困难,模型可能难以收敛,或者需要更复杂的机制来处理多个物体的输出。网格系统简化了输出结构和学习目标。

🔗 方法流程图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


关键疑问解答

知乎:YOLOV1详解

Q1: 关于 YOLOv1 中的 “confidence scores”

在这里插入图片描述
置信度分数是 YOLO 中衡量每个预测边界框“质量”的关键指标。它巧妙地结合了 框内是否有物体框的位置准不准 这两个因素。

Q2 YOLOv1 如何确定正样本?

对于一个真实物体(Ground Truth Object):
其正样本是 -> 位于包含该物体中心点的那个网格单元内 -> 预测出的边界框与该物体真实边界框 IOU 最高的那个边界框预测器。

训练中的意义:

正样本:在计算损失函数时,这个预测器需要:
1、学习预测正确的物体类别Class Probability Loss)。
2、学习预测更接近真实边界框的坐 ( x , y , w , h ) (x,y,w,h) (x,y,w,h) (Coordinate Loss)。
3、学习预测一个高的置信度分数(Confidence Loss,目标通常是 1 或等于其预测框与真实框的 IOU)。

负样本 (Negative Samples):
所有不包含任何物体中心点的网格单元中的所有预测器。
包含物体中心点的网格单元中,除了那个被选为正样本(IOU最高)之外的其他 B−1 个预测器。
对于这些负样本,主要计算置信度损失 (Confidence Loss),目标是让它们的置信度分数趋近于 0(表示它们不包含物体)。它们的坐标损失和类别损失通常不计算或权重为零。

其实就是让负样本预测背景,正样本预测前景,这个Objectness(框的置信度)把前景和背景解耦开了,一生二的思想

相关文章:

  • Go语言实现豆瓣电影Top250爬虫
  • 掌握 void 类型在函数返回值中的应用
  • MIT 6.S081 2020 Lab3 page tables 个人全流程
  • 添加文字标签
  • Docker使用ClickHouse | ClickHouse 配置用户名密码 | ClickHouse 可视化 | windows系统 | 镜像
  • 类型别名与接口的对比与选择
  • Javascript:数组和函数
  • 【心海资源】【最新话费盗u】【未测】提币对方官方波场+没有任何加密+无后门+前端VUE
  • 专业课复习笔记 5
  • Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
  • 【星海随笔】信息安全法律法规概述
  • 单片机调用printf概率性跑飞解决方法
  • 大疆卓驭嵌入式面经及参考答案
  • 论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》
  • 《从零构建一个简易的IOC容器,理解Spring的核心思想》
  • GitHub打开缓慢甚至失败的解决办法
  • 【QT】UDP通讯本地调试
  • Gin 框架入门
  • 缓存(3):本地缓存作用 及 数据一致性 实现策略
  • 20242817-李臻-课下作业:Qt和Sqlite
  • 来伊份发布关于消费者反映蜜枣粽问题处理的情况说明:与消费者达成和解
  • 福州千余公共道路泊车位装“智能地锁”续:运营公司被责令改正并罚款
  • 在对国宝的探索中,让美育浸润小学校园与家庭
  • 全国汽车以旧换新补贴申请量突破1000万份
  • 中美经贸高层会谈在日内瓦结束,中国代表团将举行发布会
  • 非洲雕刻艺术有着怎样的“变形之美”