YOLO系列论文精读总结——YOLOv1篇

YOLOv1论文精读

*
YOLO系列论文精读总结——[YOLOv1篇](https://download.csdn.net/download/AI_eNyu/85274569)

+ YOLOv1概述
+
* 1. 推理阶段
* 2 训练阶段
*
2.1 网络结构:
2.2 损失函数:
+ 后续版本

概述:本文为YOLOv1论文精度的记录,帮助理解YOLOv1整个训练以及预测过程。
Tips:

  1. 文章绿色部分为YOLO后续论文中优化更改的内容。
  2. YOLOv1论文精度资料,包括论文原文,推测部分经典PPT, 本人精度论文中的标注,已经上传至CSDN,见链接,不方便下载可以给我留言。
    资料
  3. 文章主要内容参考自B站UP主同济子豪兄的讲解,十分详细的论文精读视频!!

YOLOv1概述

YOLOv1相对与同期模型最大的特点是其为 单阶段模型,所以YOLO的运行速度相对于其他模型有显著提升。作者创新性的将目标检测问题看作回归问题,输入一张图片经过一个’黑盒子’便可直接输出预测结果。为了更好的理解YOLO目标检测的过程,我们先不看那个黑盒子,而是聚焦于输出结果,即模型推理阶段。

1. 推理阶段

下图给出了模型的推理过程,YOLOV1的输入为448 × 448 × 3 448\times448\times3 4 4 8 ×4 4 8 ×3图像,输出大小为7 × 7 × 30 7\times7\times30 7 ×7 ×3 0向量,输出向量的含义是我们理解YOLO模型推理阶段的关键先生。我们将整张输入图片分成S × S S\times S S ×S个网格( grid cell),每个网格中随机生成B B B个预测框,用来框出我们待检测的物体。为了确定一个框在图像中的位置,我们采用四个变量,分别是:

  • x——框中心的横坐标
  • y——框中心的纵坐标
  • w——框的宽度
  • h——框的高度

经过黑盒子变换,我们最初随机生成的预测框的位置会发生变换,即模型会输出预测框新的上述四个变量。同时我们还给每一框定义了一个新的性质——置信度(confidence)用来表征每个框包含物体的概率以及其与真实框的重合情况。所以一个框将有五个变量输出分别是x , y , w , h , c x,y,w,h,c x ,y ,w ,h ,c。

YOLO系列论文精读总结——YOLOv1篇
在YOLOV1中S = 7 , B = 2 S=7, B=2 S =7 ,B =2即将每个输入图片分成7 × 7 7\times7 7 ×7个网格,每个网格将生成2 2 2个预测框,用来框出图片中的物体。 每个框会预测出5个变量值,所以一个网格生成两个框,一个框带有5个属性,所以一个格就需要预测出5 × 2 = 10 5\times2=10 5 ×2 =1 0个变量值。回到我们模型的输出为7 × 7 × 30 7\times7\times30 7 ×7 ×3 0,所以7 × 7 7\times7 7 ×7即表示网格数量,在图中我们可以看到一个网格后面跟着30个变量值,其中前10个就为该网格预测出的两个框的变量值。

我们在前面分析到,每一个预测框有一个confidence属性表征其包含物体的概率。但具其体包含的是哪个物体,就需要计算出这个框包含每一类物体的概率。 在YOLOv1中有20个类别的物体,所以输出结果的后20个值就表示每一个小网格(grid cell)对应每一类物体的概率,即由该网格生产的两个预测框对应每一类物体的概率。 由此,输出的7 × 7 × 30 7\times7\times30 7 ×7 ×3 0向量的每一项含义便清楚了。

但经过上面分析,一张图片一共生产7 × 7 × 2 7\times7\times2 7 ×7 ×2个框,但只有一部分框我们认为是真正找到物体的,所以我们还需要使用一些后处理方法,去掉无用的框。根据上面的分析,我们输出结果中有每个框包含物体的概率(confidence)以及每个框在包含物体的情况下是每个类别的概率。 将二者相乘就是每个框是每个类别物体的概率。我们通过这个概率即可去掉无用的框,选出真正预测到物体的框。

YOLO系列论文精读总结——YOLOv1篇
见下图我们将所有框预测到的概率值按照每一行是一个概率列出来,并逐行处理。例如我们处理第一行——所有框关于类别狗的预测概率。我们先将所有小于0.2的预测概率置为0,然后将概率值按照降序进行排列,对排序后的概率采用 非极大值抑制(NMS)。

YOLO系列论文精读总结——YOLOv1篇
NMS的工作原理如下:将最大的概率的框设为 bbox_max,然后依次向下,观察概率排序第二的框与 bbox_max的IOU(交并比),如果大于0.5,则认为这两个框选中的是同一个物体,因此我们保留概率大的框,并将另一个框概率置为0。如果IOU不大于0.5则保留该框的预测概率。按照这个方法,让第一个框依次比较后续的框。第一个框与其后所有的框比较完后,我们另在这个过程中没有被置零的下一个框为 bbox_max,再依次向后比较,重复上述过程,直到最后一个 bbox_max比较过后,其后面的框的概率均被置为0.

YOLO系列论文精读总结——YOLOv1篇
将每一个类别都进行上述过程,便可以将概率仍然不为零的框画出来,至此得到我们最后的预测结果。

; 2 训练阶段

在训练阶段我们将通过两个部分——网络结构以及损失函数去深入理解YOLOV1这个黑盒子。

2.1 网络结构:

YOLOv1中采用了24个卷积层和两个全连接层,其整体结构如下(注:YOLOv1论文中作者在网络结构图中少画了一个全连接层)。我们直到卷积层用来提取图像的特征,所以在预训练阶段作者将前20个卷积层在图片分类数据集上进行训练。

YOLO系列论文精读总结——YOLOv1篇
在整个网络(24+2)的训练过程中,除最后一层采用 ReLU函数外,其他层均采用 leaky ReLU激活函数。 leaky ReLU相对于 ReLU函数可以解决在输入为负值时的零梯度问题。YOLOv1中采用的 leaky ReLU函数的表达式为:
ϕ ( x ) = { x , i f x > 0 0.1 x , o t h e r w i s e \phi(x)= \begin{cases} x, &if\ x>0 \ 0.1x, &otherwise \end{cases}ϕ(x )={x ,0 .1 x ,​i f x >0 o t h e r w i s e ​
; 2.2 损失函数:

我们在训练过程中,通过最小化损失函数去更新模型中的参数。YOLOv1中作者采用了平方和损失函数,并为每一项损失(定位(x,y,w,h),分类(c, p))分配了不同的权重。见下图:

YOLO系列论文精读总结——YOLOv1篇
在解释每一项的内容之前我们需要先明确几个概念。在预测阶段我们分析道,输入给模型一张图片,模型会将其分成7 × 7 7\times7 7 ×7个网格,每个网格生成两个预测框。在训练采用的图片中我们已经认为标注了物体的位置,这个人为标注的框称为 ground truth,这个 ground truth的中心落在哪一个网格里就由这个网格所生成的两个预测框中与 ground truthIOU大的那一个去最后贴合 ground truth。这个框就成为 负责检测物体的框,这个格子里剩下的另一个框以及没有 groung truth中心落在的格子生成的两个框统称为 不负责检测物体的框
  • 第一项: 负责检测物体的框中心点(x, y)定位误差,遍历所有负责检测物体的框,计算其( x i , y i ) (x_i,y_i)(x i ​,y i ​)坐标与实际框的( x i ^ , y i ^ ) (\hat{x_i},\hat{y_i})(x i ​^​,y i ​^​)的平方和误差,其权重λ c o o r d = 5 \lambda_{coord}=5 λc o o r d ​=5.

  • 第二项: 负责检测物体的框的高宽(w,h)定位误差,遍历所有负责检测物体的框,计算( w i , h i ) (\sqrt{w_i},\sqrt{h_i})(w i ​​,h i ​​)坐标与实际框的的( w i ^ , h i ^ ) (\sqrt{\hat{w_i}},\sqrt{\hat{h_i}})(w i ​^​​,h i ​^​​)平方和误差,其权重λ c o o r d = 5 \lambda_{coord}=5 λc o o r d ​=5.这里采用根式形式是为了对小框更加敏感。(可以想一下开二次方函数,在取值较小时,变换比较大)

  • 第三项: 负责检测物体的 confidence 平方和误差我们在预测阶段只给出了 confidence 的大致含义,却没有给其具体公式,在YOLOv1中作者定义 confidence 为P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}{pred}P r (O b j e c t )∗I O U p r e d t r u t h ​ 。所以在训练中我们是要将预测框的P r ( O b j e c t ) Pr(Object)P r (O b j e c t ) 的值变为1的,所以 confidence 的标签值应该为预测框与实际框的I O U p r e d t r u t h IOU^{truth}{pred}I O U p r e d t r u t h ​
  • 第四项: 不负责检测物体的 confidence 平方和误差,根据第三项,我们可以知道这一项的标签值应为0。其权重为0.5。
  • 第五项: 负责检测物体的网格对应类别的分类误差:当实际框中心落在某个网格内时,这个网格便需要预测该物体的类别。所以这一项我们遍历所有的网格,并将其类别预测值与实际值求平方误差。很明显,标签值在实际类别时为1,在非该物体类别时为0。

注:公式中特殊符号的含义:

YOLO系列论文精读总结——YOLOv1篇
至此我们整个YOLOv1架构就全部给出了解释。我们读过整个论文我们也会发现,YOLOv1一张448 ∗ 448 448448 4 4 8 ∗4 4 8图片只给出了7 ∗ 7 ∗ 2 77*2 7 ∗7 ∗2个预测框,且每个网格只能负责预测一个物体,这对于两个物体的中心在同一个网格,小物体检测和群体物体检测很不友好。这些问题在YOLO后续的版本都做出了相应的对策。

后续版本

YOLOv2,YOLOv3,YOlOv4的论文精度,以及YOLOv5的代码、网络结构分析即将更新。

Original: https://blog.csdn.net/AI_eNyu/article/details/124561575
Author: Yuuu_le
Title: YOLO系列论文精读总结——YOLOv1篇

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/649249/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球