【目标检测】43、YOLOv1 | YOLO 系列开山之作

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第1张图片

文章目录

    • 一、 背景
    • 二、 方法
      • 2.1 主要结构
      • 2.2 优势和不足
    • 三、 效果

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

代码:https://pjreddie.com/darknet/yolo/

作者:Joseph Redmon

时间:2016.05

一、 背景

在 YOLO 提出之前,目标检测其实是按照分类的方法来重写了回归分支,来实现检测。并且需要复杂的后处理来得到最终的检测结果。这样会导致检测过程耗时长且复杂。

YOLOv1 提出将目标检测任务定义为单个回归问题,直接从输入图像上得到框的位置和类别。

YOLOv1 是 Joseph Redmon 提出来的,后面他又提出了改进版本 v2 和 v3,此外后续的其他 YOLO 方法都不是该作者的工作,而是其他人接力的。

二、 方法

2.1 主要结构

YOLOv1 的结构如图 1 所示,该模型使用一个卷积网络来直接预测框和对应类别,是一个统一的模型结构。

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第2张图片

结构介绍:YOLOv1 使用全图作为输入,输出框位置和类别

  • 输入:将图像分为 S × S S\times S S×S 的网格(7x7),如果目标的中心点落入了对应网格,则由该网格负责预测该目标
  • 每个网格预测 B 个 bbox 和每个 bbox 中包含目标的概率,定义 confidence 为 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
  • 如果某个网格没有目标落入,则对应 confidence 为 0,否则期望 confidence score = IoU
  • 每个 bbox 的预测包含五个参数: ( x , y , w , h , c o n f i d e n c e ) (x, y, w, h, confidence) (x,y,w,h,confidence) ( x , y ) (x, y) (x,y) 为框的中心点和网格边界的距离(相对当前网格的偏移值), ( w , h ) (w, h) (w,h) 是宽高和全图比(相当于归一化了),confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息。
  • 每个网格也会预测类别 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject),也就是每个框会预测其对应类别。
  • 测试时,对每个框预测的类别如下,该类别包含了这个 bbox 中该类别的概率和位置匹配的准确性: 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)*Pr(Object)*IoU_{pred}^{truth}=Pr(Class_i)*IoU_{pred}^{truth} Pr(classiobject)Pr(Object)IoUpredtruth=Pr(Classi)IoUpredtruth
  • 在 PASCAL VOC 测试时,作者使用 S=7,B=2,C=20,最终得到 7x7x30 的向量

为什么每个网格输出 30 维向量:

30维向量 = 20个目标的类别概率(VOC 类别) + 2个bounding box * 4个坐标 + 2个bounding box 包含目标的置信度 confidence(前、背景)

注意, 2 个是否包含目标的置信度是如何使用的呢?

  • 在训练时:不使用该置信度,使用预测的框和 gt 框的 IoU 来剔除掉一个 IoU 低的框,每个 grid 保留一个框
  • 在测试时:使用该置信度,在 NMS 的时候,对每个 grid,剔除掉置信度低的那个框,每个 grid 保留一个框,然后,使用该置信度对所有的框来排序,剔除掉和置信度最大的框 IoU>阈值的框,对保留下的框重复进行 NMS,直到最后

在这里插入图片描述

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第3张图片

网络结构如图 3:

  • 标准结构:24 conv layers + 2 fully connected layers
  • Fast 结构:9 conv layers + 2 fully connected layers
  • 输出:7x7x30 tensor

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第4张图片

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第5张图片
【目标检测】43、YOLOv1 | YOLO 系列开山之作_第6张图片

训练:

  • 输入 448x448 的图像
  • 输出每个网格中的每个框的 ( x , y , w , h , c o n f i d e n c e ) (x, y, w, h, confidence) (x,y,w,h,confidence)
  • 虽然每个网格中可能预测多个 bbox,在训练阶段,只期望对每个目标预测一个框,故此处指保留和 gt 的 IoU 最大的框。

Loss 函数:

  • 1 i o b j 1_i^{obj} 1iobj 是第 i i i 个网格中存在目标
  • 1 i j o b j 1_{ij}^{obj} 1ijobj 是第 i i i 个网格中的第 j j j 个 bbox 存在目标
  • 可以看出该 Loss 函数只对出现在该网格中的目标进行分类约束,也只对出现在该网格中的 IoU 最大的框进行约束。

在这里插入图片描述
【目标检测】43、YOLOv1 | YOLO 系列开山之作_第7张图片

推理:

  • 在每个图像中预测 98 个bbox(49 个网格,每个网格预测两个框,保留 IoU 最大的那个)
  • 每个网格会预测两个 bbox,通过 NMS 后,会保留一个 bbox

如何进行 NMS:

因为我们对一个网格要预测两个bbox,所以最后我们能得到个 7x7x2=98 个bbox。

首先,将这 98 个 bbox 中置信度低的框去掉,然后再根据置信度对剩下的bbox排序,使用 NMS 算法,把重复度高的框的置信度设为 0。

对于留下的框,再根据分类概率得到它们的类别,这里注意得到的框的大小都是相对于原图大小的,都是 0~1 之间的值,所以输出的时候还需要还原,才能得到真实的bbox的尺寸大小。

和 SOTA 方法效果对比:

为了更好的对比 YOLO v1 和 SOTA 方法的效果,作者对比了 YOLO v1 和 Fast RCNN 在 VOC 2017 上的效果:

  • Correct:corrent class and IoU>0.5
  • Localization:correct class,0.1
  • Similar:class is similar, IoU>0.1
  • Other:class is wrong,IoU>0.1
  • Background:IoU<0.1 for any object

从图 4 可以看出:

  • YOLO v1 定位错误较多,定位的错误高于其他所有错误的总和
  • Fast RCNN 定位错误的很少,但有很多背景误识别,13.6% 的检测结果是假正,即不包含任何目标,约是 YOLO v1 背景误识别的 3 倍。

在这里插入图片描述

2.2 优势和不足

优势如下:

  • YOLOv1 很快!由于不需要复杂的 pipeline,在 Titan X GPU 上能达到 45fps,能够实时处理视频流,且准确率是当时实时系统的 2 倍。
  • YOLOv1 在推理的时候在全图上进行,在训练和测试时都将全图看做一个整体,没有 RPN 等操作,比 Fast R-CNN 对背景的误检少了一半(Fast RCNN 由于无法看到全局的信息,所有很多背景的误检)。
  • YOLOv1 能够学习到目标更泛化的特征。
  • YOLOv1 虽然比当时 SOTA 的方法效果差些,但速度很快。

YOLO v1 的不足:

  • YOLO v1 在每个网格中预测两个框,并且属于同一个类别,这种空间约束限制了对距离近的目标的预测,会导致漏检,如多个小目标共现的区域
  • YOLO v1 模型是从训练数据中学习到的目标纵横比,所以难以泛化到少见的纵横比目标上,导致边界不准。
  • YOLO v1 的 loss 函数将大目标和小目标同等对待,大目标的小错误是可以容忍的,但小目标的小错误对 IoU 影响较大,会导致对小目标定位不准
  • 使用全连接层,参数量巨大,而且也因此在检测时,YOLO 训练模型只支持与训练图像相同的输入分辨率。
  • 一个网格只能预测一个物体。
  • anchor-free的方法没有anchor-based的准确。

三、 效果

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第8张图片
在手工绘图的数据集上体现了 YOLO v1 的泛化性能:

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第9张图片

【目标检测】43、YOLOv1 | YOLO 系列开山之作_第10张图片

你可能感兴趣的:(目标检测,目标检测,深度学习,计算机视觉)