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

在这里插入图片描述

论文: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 所示,该模型使用一个卷积网络来直接预测框和对应类别,是一个统一的模型结构。

结构介绍: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,直到最后

在这里插入图片描述

在这里插入图片描述

网络结构如图 3:

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

在这里插入图片描述

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

训练:

  • 输入 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 最大的框进行约束。

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

推理:

  • 在每个图像中预测 98 个bbox(49 个网格,每个网格预测两个框)
  • 在每个网格中,剔除掉得分低的框,每个网格保留一个框(这个得分是只是否包含目标的那个得分,而非具体的类别得分,此外,因为推理的时候不知道 gt 的信息,不能像训练时候一样使用 IoU 来判断了)
  • 每个网格剔除掉一个低分 bbox 后,在全图使用 NMS,剔除掉重叠率高的框

如何进行 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<IoU<0.5
  • 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的准确。

三、 效果

在这里插入图片描述
在手工绘图的数据集上体现了 YOLO v1 的泛化性能:

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呆呆的猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值