OD-Model【5】:YOLOv1

系列文章目录

YOLO目标检测系列(一):
OD-Model【5】:YOLOv1
YOLO目标检测系列(二):
OD-Model【6】:YOLOv2
YOLO目标检测系列(三):
OD-Model【7】:YOLOv3
YOLO目标检测系列(四):
OD-Model【8】:YOLOv4
YOLO目标检测系列(五):
OD-Model【9】:YOLOv5



前言

YOLOv1是一个单阶段的物体检测模型。物体检测被设定为一个回归问题,即空间上分离的边界框和相关的类别概率。一个单一的神经网络在一次评估中直接从完整的图像中预测边界框和类别概率。由于整个检测管道是一个单一的网络,它可以直接对检测性能进行端到端的优化。

该网络使用整个图像的特征来预测每个边界框。它还同时预测一个图像的所有类别的所有边界框。这意味着该网络对整个图像和图像中的所有物体进行全局推理。

原论文链接:
You Only Look Once: Unified, Real-Time Object Detection


1. Abstract & Introduction

1.1. Abstract

本文提出了一个新的目标检测的方法:YOLO (You Only Look Once)。以前的目标检测工作重复利用分类器来完成检测任务。相反,我们将目标检测框架看作回归问题,从空间上分割边界框和相关的类别概率。单个神经网络在一次前向推断(one stage)中可以直接从整个图像上预测边界框和类别概率。由于整个检测流水线是单一网络,因此可以直接对检测性能进行端到端的优化。

本文构建的统一架构非常快。本文构建的基础YOLO模型以45帧/秒(一般而言超过30帧/秒就可以认为是实时的)的速度实时处理图像。Fast YOLO是YOLO的一个较小版本,每秒能处理惊人的155帧图像,同时实现其它实时检测器两倍的mAP。与最先进的检测系统相比,YOLO虽然存在较多的定位错误,但很少将背景预测成假阳性。最后,YOLO能学习到目标非常通用的表示。当从自然图像到艺术品等其它领域泛化时,它都优于其它检测方法,包括DPM和R-CNN。

1.2. Introduction

人们瞥一眼图像,立即知道图像中的物体是什么,它们在哪里以及它们如何相互作用。人类的视觉系统是快速和准确的,使我们能够执行复杂的任务,例如如驾驶车辆时不会刻意地进行思考或思想。快速、准确的目标检测算法可以让计算机在没有专用传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时的场景信息,并具有解锁潜在应用和实时响应的机器人系统的潜力。

目前的检测系统重复利用分类器来执行检测。为了检测目标,这些系统为该目标提供一个分类器,并在不同的位置对其进行评估,并在测试图像中进行缩放。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,其分类器在整个图像的均匀间隔的位置上运行,再把每一次滑动的结果做汇总来综合出最后的结果。

最近的许多方法,如R-CNN使用 region proposal 方法首先在图像中生成潜在的边界框,然后在这些提出的框上运行分类器。在分类之后,通过后处理对边界框进行修正,消除重复的检测(非极大值抑制 NMS),并根据场景中的其它目标重新定位边界框。这些复杂的流程很慢,很难优化,因为每个单独的组件都必须单独进行训练。

两阶段目标预测:

  • 第一阶段:提取潜在的候选框
  • 第二阶段:用分类器逐一筛选每个候选框

本文将目标检测重构并看作为单一的回归问题,直接从图像像素到边界框坐标和类别概率。使用我们的系统,您只需要在图像上看一次(You Only Look Once, YOLO),以预测出现的目标和位置(逐物体分类 + 目标框定位)。

在这里插入图片描述

上图展示的是YOLOv1预测阶段

  1. 缩放图片
  2. 通过卷积网络
  3. 后处理(非极大值抑制)

YOLO新奇又很简单,单个卷积网络同时预测这些框的多个边界框和类别概率值。YOLO在全图像上训练并直接优化检测性能。这种统一的模型比传统的目标检测方法有一些好处。

  • 首先,YOLO 速度非常快。由于我们将检测视为回归问题,所以我们不需要复杂的流程。测试时我们在一张新图像上简单的运行我们的神经网络来预测检测。我们的基础网络以每秒45帧的速度运行,在 Titan X GPU 上没有批处理,快速版本运行速度超过150fps。这意味着我们可以在不到25毫秒的延迟内实时处理视频流。此外,YOLO实现了其它实时系统两倍以上的mAP。
  • 其次,YOLO在进行预测时,会对图像进行全局地推理。与基于滑动窗口和 region proposal 的技术不同,YOLO在训练期间和测试时会看到整个图像,所以它隐式地编码了关于类的上下文信息以及它们的外形。FastR-CNN是一种顶级的检测方法,但因为它看不到更大的上下文,所以在图像中会将背景块误检为目标。与FastR-CNN相比,YOLO的背景误检数量少了一半。
  • 最后,YOLO学习目标的泛化表示。当在自然的图像上进行训练并对艺术作品进行测试时,YOLO 大幅优于 DPM 和 R-CNN 等顶级检测方法。由于 YOLO 具有高度泛化能力,因此在应用于新领域或碰到非正常输入时很少出故障。

YOLO在准确度上仍然落后于最先进的检测系统。虽然它可以快速识别图像中的目标,但它仍在努力精确定位一些目标,尤其是一些小目标。


2. Unified Detection

本文将目标检测的单独组件集成到单个神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还可以同时预测一张图像中的所有类别的所有边界框。这意味着我们的网络全面地推理整张图像和图像中的所有目标。YOLO设计可实现端到端训练和实时的速度,同时保持较高的平均精度。

2.1. Thesis Idea

在这里插入图片描述

  • 训练阶段
    • 监督学习:将预测结果与人工标注做比对,尽可能使他们的差距越来越小的学习过程
    • 将一幅图像分成 S × S S \times S S×S个网格(grid cell), 如果某个object的中心落在这个网格 中,则这个网格就负责预测这个object。
    • 每个网格要预测 B 个 bounding box,使用与 GT box 的 IoU 值大的预测出来的 bounding box 去拟合 GT box,另一个则不使用。每个 bounding box 除了要预测位置之外,还要附带预测一个 confidence(置信度) 值。 每个网格还要预测 C 个类别的分数。
      • 类别条件概率: P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i | Object) Pr(ClassiObject)
        • 在当前 bounding box 已经包含物体的条件下,各类别的概率
        • 每个 grid cell 只预测一组条件类别概率,它对应的 B 个 bounding box 共享这个类别概率
  • 预测阶段
    • 直接获得 S × S × ( B × 5 + C ) S \times S \times (B \times 5 +C) S×S×(B×5+C) 向量
    • 进行 NMS 处理后得到结果
    • 真实物体的概率
      • 将每个 bounding box 的 confidence score 与所在 grid cell 的条件类别的概率相乘
      • P r ( C l a s s i ∣ O b j e c t ) × P r ( O b j e c t ) × I O U p r e d t r u t h = P r ( C l a s s i ) × I O U p r e d t r u t h Pr(Class_i | Object) \times Pr(Object) \times IOU_{pred}^{truth} = Pr(Class_i) \times IOU_{pred}^{truth} Pr(ClassiObject)×Pr(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruth
        • P r ( C l a s s i ) Pr(Class_i) Pr(Classi):分类的精度
        • KaTeX parse error: Expected '}', got 'EOF' at end of input: …U_{pred}^{truth :回归定位的精度
  • Confidence socre
    • 置信度,反映了 bounding box 中包含物体,以及预测框有多准确
    • 训练阶段
      • P r ( O b j e c t ) × I O U p r e d t r u t h Pr(Object) \times IOU_{pred}^{truth} Pr(Object)×IOUpredtruth
      • P r ( O b j e c t ) Pr(Object) Pr(Object) 标签值为 { 0 , 1 } \{ 0, 1 \} {0,1}
      • 没有预测到物体的 bounding box 的 confidence 越小越好,最好为0
      • 对于负责预测物体的 bounding box,他的 confidence 值就为IOU
    • 预测阶段
      • 训练好模型后,回归出多少就是多少
      • 不需要直接计算 P r ( O b j e c t ) × I O U p r e d t r u t h Pr(Object) \times IOU_{pred}^{truth} Pr(Object)×IOUpredtruth,而是隐式地包含两者
  • Bounding box
    • 包含5个参数
      • x:中心点横坐标
      • y:中心点纵坐标
        • ( x , y ) (x, y) (x,y):相对于所在 grid cell 左上点的坐标
        • 取值范围 ( 0 , 1 ) (0, 1) (0,1)
      • w:框的宽度
      • h:框的高度
        • 相对于整张图片
        • 取值范围 ( 0 , 1 ) (0, 1) (0,1)
      • confidence:置信度
    • 生成的 B 个 bounding box 的中心点都在对应 grid cell 里面
    • 三类 bounding box
      • 负责预测物体
      • 在负责预测物体的 grid cell 里面,但不负责预测物体
      • 在不负责预测 grid cell 里面的 bounding box

2.2. Network Design

在这里插入图片描述
YOLOv1 的网路结构非常明晰,是一种传统的 one-stage 的卷积神经网络:

  • 网络输入: 448 × 448 × 3 448 \times 448 \times 3 448×448×3RGB图片。
    • 因为在 YOLOv1 网络最后接了两个全连接层,全连接层是要求固定大小的向量作为输入的(因为全连接层中权重矩阵W和偏置矩阵b的维度是不变的),因此要求原始图像也需要一致的图片大小。
  • 中间层:由若干卷积层和最大池化层(下采样)组成,用于提取图片的抽象特征。
    • 标明了s2的表示对应的步长 stride = 2,否则 步长 stride = 1
  • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
  • 网络输出: 7 × 7 × 30 7 \times 7 \times 30 7×7×30的预测结果。
    • S × S × ( 5 B + C ) S \times S \times (5B + C) S×S×(5B+C)
      在这里插入图片描述

2.3. Training

2.3.1. Model

在预训练中,本文使用模型中的前20个卷积层,接着是平均池化层和全连接层。然后转换模型来进行检测任务,添加了四个卷积层和两个全连接层,并且对权重进行随机初始化。检测通常需要细粒度的视觉信息,因此本文将网络的输入分辨率从 224 × 224 224 \times 224 224×224 变为 448 × 448 448 \times 448 448×448。框架的最后一层预测类别概率和边界框坐标,通过图像宽度和高度来归一化边界框的宽度和高度,使它们落在0和1之间(因为本文将边界框x和y坐标参数化为特定网格单元位置的偏移量,所以肯定在0和1之间)。

对最后一层使用线性激活函数,对其余层使用 leaky ReLu 函数
在这里插入图片描述

2.3.2. Sum-squared error

本文优化了模型输出的平方和误差。本文使用平方和误差是因为它很容易进行优化,但是它并不完全符合我们最大化平均精度的目标。分类误差与定位误差的权重是一样的,这可能并不理想。另外,在每张图像中,许多网格单元不包含任何对象。这将导致这些单元格的“置信度”分数为零,通常压倒了包含目标的单元格的梯度。这可能导致模型不稳定,从而导致训练过早发散。

为了改善这一点,本文增加了边界框坐标预测的损失,并减少了不包含目标边界框的置信度预测的损失。使用两个参数 λ c o o r d λ_{coord} λcoord λ n o o b j λ_{noobj} λnoobj 来完成这个调整工作,并设置 λ c o o r d = 5 λ_{coord} = 5 λcoord=5 λ n o o b j = 0.5 λ_{noobj} = 0.5 λnoobj=0.5

平方和误差也可以在大盒子和小盒子中同样加权误差。本文的误差指标应该反映出,大盒子中小偏差的重要性不如小盒子中小偏差的重要性。为了部分解决这个问题,本文直接预测边界框宽度和高度的平方根,而不是宽度和高度。

在这里插入图片描述
对于小的预测框和大的预测框,如果他们相对于 GT box 便宜相同的距离,我们可以发现小的 bounding box 的效果很差,但是大的 bounding box的效果还可以。所以这里需要开根号,去惩罚小 bounding box 的损失

YOLO每个网格单元预测多个边界框。在训练时,每个目标只需要一个边界框预测器来负责。本文根据哪个预测器的预测值与真实值之间具有当前最高的IOU来指定哪个预测器“负责”预测该目标。这导致边界框预测器之间的专一化。每个预测器可以更好地预测特定大小、长宽比或目标的类别,从而改善整体召回率。

2.3.3. Loss Function

每一项都是平方和误差,将目标检测问题当作回归问题
在这里插入图片描述

  • bounding box 损失
    • 第一项:负责检测物体的 bounding box 的中心点定位损失
    • 第二项:负责检测物体的 bounding box 的宽高定位损失
    • 开根号使得小框对误差更加敏感
  • confidence 损失
    • 第一项:负责检测物体的 bounding box 的confidence损失
      • C i C_i Ci 预测值:从模型正向推断结果的结果中找到这个 bounding box 的 confidence box
      • C i ^ \hat{C_i} Ci^ 预测值:计算这个 bounding box 与 GT box 的 IOU
    • 第二项:不负责检测物体的 bounding box 的confidence损失
  • classes 损失
    • 负责检测物体的 grid cell 分类误差
  • 参数
    在这里插入图片描述
    • 第i个 grid cell 是否包含物体,即是否有 GT box 的中心点落在 grid cell 中
      • 有为1
      • 无为0
        在这里插入图片描述
    • 第i个 grid cell 的第j个 bounding box
      • 负责预测物体为1
      • 不负责预测物体为0
    • 该参数为1,前一个参数必为1
    • 与后一个参数互为相反数
      在这里插入图片描述
    • 第i个 grid cell 的第j个 bounding box
      • 不负责预测物体为1
      • 负责预测物体为0

2.3.4. Learning rate

对于第一个迭代周期,本文慢慢地将学习率从 1 0 − 3 10^{−3} 103提高到 1 0 − 2 10^{−2} 102。如果我们从高学习率开始,我们的模型往往会由于梯度不稳定而发散。我们继续以 1 0 − 2 10^{−2} 102的学习率训练75个迭代周期,然后用 1 0 − 3 10^{−3} 103的学习率训练30个迭代周期,最后用 1 0 − 4 10^{−4} 104的学习率训练30个迭代周期。

为了避免过度拟合,我们使用dropout和大量的数据增强。在第一个连接层之后,dropout层使用 rate=0.5 的比例,防止层之间的互相适应。对于数据增强,我们引入高达原始图像20%大小的随机缩放和转换。我们还在HSV色彩空间中使用高达1.5的因子来随机调整图像的曝光和饱和度。


总结

  • 优点
    • YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处理150帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。
    • 迁移能力强
    • YOLO 实时检测的平均精度是其他实时监测系统的两倍。
  • 缺点
    • 输入尺寸固定:由于输出层为全连接层,因此在检测时,YOLO 训练模型只支持与训练图像相同的输入分辨率。其它分辨率需要缩放成此固定分辨率
    • 占比小的目标检测效果不好:虽然每个格子可以预测 2 个 bounding box,但是最终只选择只选择 IOU 最高的 bounding box 作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。
    • YOLOv1 对不常见的角度的目标泛化性能偏弱
    • YOLOv1多标签任务不好完成
    • YOLOv1有较大的定位误差,因为预测的 bounding box 可能和 grid cell 有较大的偏移,所以会导致一个属于一个 grid cell 的 bounding box 出现在其他 grid cell 中的情况

视频资料
翻译参考

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzyzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值