YOLOv1论文精读
*
– YOLO系列论文精读总结——[YOLOv1篇](https://download.csdn.net/download/AI_eNyu/85274569)
–
+ YOLOv1概述
+
* 1. 推理阶段
* 2 训练阶段
*
– 2.1 网络结构:
– 2.2 损失函数:
+ 后续版本
概述:本文为YOLOv1论文精度的记录,帮助理解YOLOv1整个训练以及预测过程。
Tips:
- 文章绿色部分为YOLO后续论文中优化更改的内容。
- YOLOv1论文精度资料,包括论文原文,推测部分经典PPT, 本人精度论文中的标注,已经上传至CSDN,见链接,不方便下载可以给我留言。
资料 - 文章主要内容参考自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。
在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)以及每个框在包含物体的情况下是每个类别的概率。 将二者相乘就是每个框是每个类别物体的概率。我们通过这个概率即可去掉无用的框,选出真正预测到物体的框。
见下图我们将所有框预测到的概率值按照每一行是一个概率列出来,并逐行处理。例如我们处理第一行——所有框关于类别狗的预测概率。我们先将所有小于0.2的预测概率置为0,然后将概率值按照降序进行排列,对排序后的概率采用 非极大值抑制(NMS)。
NMS的工作原理如下:将最大的概率的框设为
bbox_max
,然后依次向下,观察概率排序第二的框与 bbox_max
的IOU(交并比),如果大于0.5,则认为这两个框选中的是同一个物体,因此我们保留概率大的框,并将另一个框概率置为0。如果IOU不大于0.5则保留该框的预测概率。按照这个方法,让第一个框依次比较后续的框。第一个框与其后所有的框比较完后,我们另在这个过程中没有被置零的下一个框为 bbox_max
,再依次向后比较,重复上述过程,直到最后一个 bbox_max
比较过后,其后面的框的概率均被置为0.
将每一个类别都进行上述过程,便可以将概率仍然不为零的框画出来,至此得到我们最后的预测结果。
; 2 训练阶段
在训练阶段我们将通过两个部分——网络结构以及损失函数去深入理解YOLOV1这个黑盒子。
2.1 网络结构:
YOLOv1中采用了24个卷积层和两个全连接层,其整体结构如下(注:YOLOv1论文中作者在网络结构图中少画了一个全连接层)。我们直到卷积层用来提取图像的特征,所以在预训练阶段作者将前20个卷积层在图片分类数据集上进行训练。
在整个网络(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))分配了不同的权重。见下图:
在解释每一项的内容之前我们需要先明确几个概念。在预测阶段我们分析道,输入给模型一张图片,模型会将其分成7 × 7 7\times7 7 ×7个网格,每个网格生成两个预测框。在训练采用的图片中我们已经认为标注了物体的位置,这个人为标注的框称为
ground truth
,这个 ground truth
的中心落在哪一个网格里就由这个网格所生成的两个预测框中与 ground truth
IOU大的那一个去最后贴合 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。
注:公式中特殊符号的含义:
至此我们整个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/
转载文章受原作者版权保护。转载请注明原作者出处!