YOLOv1模型网络架构解读

2025-10-1|2026-2-22
Pavel Han
Pavel Han
date
Oct 1, 2025
slug
2025-10-01-yolov1-model-structure
status
Published
tags
YOLO
summary
虽然YOLOv1早已过时,但是其为one-stage架构奠定了重要的基础,本文对该模型的架构进行了详细的总结,为学习YOLO后续版本的架构打好基础。
type
Post
category
AI
AI summary

YOLOv1的架构总结

YOLOv1的架构设计逻辑是:仅使用一个完整的卷积神经网络结构来端到端地检测图像中所包含的目标及其位置,对应于当时在目标检测领域主流的R-CNN系列为代表的two-stage流派,YOLOv1的架构可以说是开启了one-state来实现目标位置检测+类别识别的架构设计思路的先河。
YOLOv1的网络架构参考了GoogLeNet网络来设计主干网络,但并未采用GoogLeNet的Inception模块,而采用了串联的1x1卷积和3x3卷积层所组成的模块,因此其主干网络的架构非常简单。
YOLOv1网络的架构图如下所示:
notion image
从以上YOLOv1的架构图可以看到,YOLOv1模型包含有24个卷积层用于提取输入图像的特征信息,以及两个全连接层用于预测图像中所包含的目标位置、置信度以及类别识别几率信息。卷积层部分,采用了多个1x1卷积层用于压缩特征图的通道数量。而激活函数方面,除了最后一层采用线性激活以外,其他各层均采用了Leaky ReLU。
整个网络架构与各种经典的基于卷积神经网络的图像识别模型没有太大差异,其差异主要在图像的分类和输出部分。最后一个卷积层输出的特征图是1024通道7x7分辨率。这个特征图展平(flatten)为7x7x1024的一维向量,经过连续的两个全连接层(分别包含4096个和1470个神经元)进行处理,最后的1470个神经元的全连接层输出最终的预测。因为YOLOv1执行的目标检测任务是一个空间任务,所以这个全连接层的1470个输出数据转换为7x7x30的三维张量,其中7x7是这个三维张量的空间分辨率,30则是这个张量的通道数量。 后续部分对这个7x7x30所代表的目标检测信息详细解释。
因为在图像在进行目标位置及其类别的检测和识别需要更细粒度的视觉信息,所以YOLOv1的图像输入分辨率从各种图像识别模型标准输入的224x224分辨率,提升为448x448。

YOLOv1的参数量

YOLOv1模型存在的一个明显的问题就是参数量实在是太大了。
仅计算最后一个卷积层的输出(维度为7x7x1024),与第一个全连接层(4096个神经元)之间的连接,其参数量就达到了:7x7x1024x4096,大概2亿个参数。这样势必导致模型的推理速度很慢,以及模型运行需要的内存空间也会比较大。
不过这也是没办法的事情,毕竟在YOLOv1模型所推出的2015年,卷积神经网络架构的标准设计就是卷积层与全连接层相连,各自分工,那么全连接层参数众多的问题就很难避免,直到全局平均池化层的出现,才解决了这个问题。

YOLOv1的执行流程

YOLOv1对进行推理的图片所进行的目标检测流程主要可以分为输入图像的预处理、基于卷积神经网络提取特征、基于全连接层进行目标及其位置检测、最终输出检测结果这几个步骤。
notion image
输入图像的预处理环节主要包含两个方面。首先如上所述,YOLOv1的输入图片的分辨率为448x448的RGB图像,所以对于不同分辨率的图像,首先要缩放到这个尺寸。同时为了避免输入图像的长宽比失真,对于长宽比非1:1的输入图像,还需要通过填充等步骤来进行处理。经过以上分辨率缩放等环节的处理后,再执行像素归一化,把输入图像中各个像素的值从[0,255]缩放到[0,1]区间,或进一步标准化为均值为0、方差为1的分布。
接下来经过以上预处理以后的RGB三通道448x448分辨率的图像,经过连续24个卷积层(包含对应的池化层)处理,逐步提取其中所包含的特征,输出7x7x1024的特征图。这个7x7x1024的特征图展平之后,再经过两个全连接层基于特征数据进行目标种类和位置检测,检测结果resize为7x7x30的三维张量,对这个输出的三维张量进行解析就可以得到图像中所包含的目标种类及其位置。
整个执行流程的关键,实际上就在于卷积层输出的7x7x1024特征图中所包含的信息,与整个模型最终输出的7x7x30三维张量的映射
从以上的这一点上,可以把整个流程看成是对输入的448x448分辨率的图像切分为7x7的网格,无论是卷积层输出的7x7x1024的特征图,还是最终输出的7x7x30的三维张量,其中的1024和30对应的都是每一个网格的特征信息和检测结果:对于每一网格而言,经过24个卷积层的处理,得到一个长度为1024的特征向量,这个特征向量中包含了该网格中的某种高级特征信息。然后在全连接层中再通过遍历这些网格、处理其中的特征信息来预测每个网格处是否有目标的中心点坐标,以及相应的目标类别,把结果输出为一个长度为30的向量,用以表征该网格的检测信息。
notion image
因此,从以上流程可以看到,图像的输入以及卷积层的检测,与之前的图像识别模型如VGG、GoogLeNet等并无区别,YOLOv1的最大差异在于全连接层的处理结果,需要resize为一个三维张量进行输出。这个三维张量中所包含的数据,就对应了从输入图像中检测到的目标种类和位置。

YOLOv1的输出信息解读

如上所述,YOLOv1的输出为一个7x7x30的三维张量,对应为7x7个网格,那么每个网格所包含的输出信息就是一个长度为30的一维向量。这个一维向量包含以下信息:两个目标检测边界框BOX1和BOX2的参数,以及20个目标检测种类的识别概率。
每个BOX的参数包含其中心坐标(x,y)和长宽参数(w,h),以及这个BOX检测的置信度confidence,因此每个BOX有5个参数。两个BOX的5个参数,再加上20个目标检测类别的识别概率,总共加起来就是长度为30的一维向量。如下图所示。
为什么是20个种类?这是因为YOLOv1的原论文是使用VOC数据集进行训练的。VOC数据集总共支持对20个种类的目标进行检测,所以默认YOLOv1模型的输出就是20个类别的识别率。如果使用支持80个类别的COCO数据集,那么每个网格的输出长度就应该是2x5+80=90。
notion image

如何检测?

YOLOv1在“谁来负责进行目标预测”的这个问题上有一个最核心的设计:待检物体的中心点落在哪个网格cell里,就由那个cell负责把这个物体找出来。 这一点,对于理解YOLOv1的输出而言非常关键。
以下图为例,尽管小猫这个物体在整个图像中占据的范围跨越了多个网格,但其中心点在粉色网格中,那么YOLOv1模型的输出中,就只有粉色网格所输出的BOX包含有小猫这个待检物体的相关检测信息,其他网格就都成为背景框。
notion image

BOX的坐标位置参数

如上所述,每个网格中包含有两个BOX的检测结果,其中的每个BOX用x,y,w,h来表示其在网格中的位置。仍然使用上面的小猫图对x,y,w,h参数进行解释。
粉色网格输出的其中一个BOX会对应对小猫的检测框信息,其中(x,y)表示这个预测BOX的中心相对于其所在网格左上角的偏移量。以上图的小猫为例说明,粉色框中的红点为小猫的中心点,那么小猫这个检测框(大的红框)所应对的(x,y)就是红点相对于粉色框左上角的偏移量。w和h则表示这个预测BOX(大的红框)的width和height在整幅图像(448x448分辨率)中的长和宽上所占的比例

BOX的置信度Confidence如何理解?

BOX边界框的置信度参数Confidence,本质上就是用来判断这个BOX中是否包含有某个待检物体的中心点。理想情况下,依据YOLOv1的设定,包含有待检物体中心点的网格所输出的边界框置信度很高,而不包含中心点的网格则输出的边界框置信度很低甚至为0。
BOX的置信度直接决定一个网格中是否包含有某个待检目标的中心点。
在后期处理中,通过判断Confidence这个参数,就可以知道当前网格中是否包含有某个待检物体的中心点,在确认该网格包含有待检物体的中心点的情况下,再检查20个目标检测类别的识别概率,判断这个待检物体的类别。

如果同一个网格中包含了两个物体的中心点?

按照YOLOv1的设计,每个网格的输出信息只能把两个预测框里最好的那一个标记成“正样本”,并且只能给它分配 1 个类别标签。
因此,当两个不同物体的中心不幸落在同一个网格里时,YOLOv1网络只能:
  • 选其中一个物体(通常是与默认框 IoU 更大的那个)当作该网格的回归/分类目标;
  • 另一个物体会直接被当成不存在,训练时既无坐标损失也无类别损失;
  • 在推理阶段,这个网格最多只能输出第一个物体的检测框,第二个物体必然漏检。
这就是 YOLOv1 在密集小目标场景下召回率骤降的根本原因。

参考资料

  • 《YOLO目标检测》第3章 YOLOv1
YOLOv2模型网络架构解读基础相位调制技术之BPSK/QPSK/DQPSK
Loading...