date
Oct 17, 2025
slug
2025-10-17-the-structure-of-YOLOv3-modal
status
Published
tags
CNN
YOLO
summary
本文详细总结了YOLOv3模型的整体架构方面的内容,包括其主干网络Darknet-53、特征金字塔的概念以及多级特征图检测头的设计思路和实现理论。
type
Post
category
AI
AI summary
本文详细总结了YOLOv3模型的整体架构方面的内容,包括其主干网络Darknet-53、特征金字塔的概念以及多级特征图检测头的设计思路和实现理论。
全新主干网络DarkNet-53
从YOLOv2开始,YOLO模型的作者为模型设计了专门的主干网络Darknet。在YOLOv2版本中所使用的主干网络是DarkNet-19(在YOLOv2模型网络架构解读一文可参考YOLO2模块的网络架构设计),即该网络结构中总共包含了19个卷积层。到了YOLOv3阶段,DarkNet的结构设计借鉴了当时已成业界主流设计理念的Resnet的残差网络结构,退出DarkNet-53并将其作为YOLOv3的主干网络。
- 关于Resnet的残差网络结构可以参考CNN经典网络模型架构学习之Resnet一文。
在DarkNet-53的设计上,其卷积层的实现仍然采用了与Darknet-19一样的卷积层+BN层+LeakyReLU激活函数的CBL组合结构。Darknet-53网络包含有53个卷积层并由此得名。

在实现特征图空降降采样操作时,不同于DarkNet-19所采用的最大池化层,DarkNet-53普遍采用了步长为2(stride=2)的3x3卷积层来实现该功能。这种方式能够在减少特征图尺寸的同时,能够保留更多的空间信息。因此,在整个Darknet-53的网络结构中不包含有在传统卷积网络中非常常用的MaxPool层,所有的特征图空间降采样操作都适应步长为2的 3×3 卷积来完成。
此外就是以上提到的Darknet-53的网络设计上,借鉴了ResNet的残差块的设计理念。Darknet-53网络所使用的残差块结构如下图所示。残差块的输出和输出在特征图的尺寸和通道数量上完全相同,残差块内部的实现就是连续的1x1卷积块与3x3卷积块的堆叠,然后其输出再与输入相加实现残差连接。

与Resnet类似,DarkNet-53网络的大部分实现实际上就是残差块的堆叠。下图是YOLOv2主干网络Darknet19与YOLOv3主干网络Darknet53的对比。可以看到,Darknet19中的降采样操作全部使用传统的最大池化层,而Darknet53的降采样操作则全部使用了步进为2的3x3卷积层。

Darknet-53的网络结构就是反复堆叠以上所描述的残差块。从整体结构上,Darkent-53依据于各层的特征图尺寸,可以分为5个部分(如上图右侧圈起来的5个部分)。从第一个到第五个部分各自所包含的残差块数量分别为1,2,8,8,4。各个部分的输入和输出特征图的尺寸与通道数量均保持一致,然后各部分之间使用一个步进为2的3x3卷积层来实现特征图尺寸降维的操作。 这种“12884”的堆叠数量配置也成为后续诸多YOLO框架的设计范式之一。
Darknet-53本质上仍然是一个对图像特征提取以及进行类别分类的网络,所以在最后仍然通过全局平均池化+全连接层配合Softmax来实现对ImageNet数据集的识别分类输出。当然,作为YOLOv3模型的主干网络使用时,全局平均池化及其后的部分会被拿掉,只保留前面的特征提取部分输出不同阶段的特征图进行目标检测。
以下是Darknet-53网络与Darknet-19、Resnet-101、Resnet-152等网络架构在识别率、运行速度等指标方面的比较。可以看到,尽管Darknet-53的速度相比Darknet-19下降不少,但是也能够达到实时的水准,而且识别正确率有了比较明显的提升。

特征金字塔与特征融合
所谓的特征金字塔(FPN,Feature Pyramid Network),来源于另外一种目标检测网络结构SSD,其设计背后的理念在于:随着神经网络层数的加深以及降采样操作的增多,其各层输出的特征图中包含有不同的信息,浅层特征图的分辨率更高,所以包含有更多的位置信息,同时因为降采样操作比较少而导致感受野较小,对于目标类别的识别而言也就更困难;而深层特征图的分辨率更低,目标的位置和细节等信息在逐级降采样过程中丢失了,但是因为感受野相对更大,对于大目标的识别和检测性能就更好。因此,针对以上存在的矛盾,解决方案也就应运而生:综合使用浅层特征和深层特征,其中浅层特征负责检测较小的目标,深层特征负责检测较大的目标。
- 特征图分辨率越大,位置信息的细节越丰富,但是因为感受野过小,对于目标类别的判断越困难。
- 特征图分辨率越小,在多级降采样的过程中,目标位置信息的损失越多,但感受野逐步增大,更容易判断待检物体(尤其是大尺寸物体)的类别。
下图是特征金字塔的结构:左侧的特征提取网络输出三种分辨率和维度的特征数据,在右侧的检测网络中分别实现对大中小三种尺寸的目标进行检测和识别。

对于大尺寸的目标进行检测,只需要用到最小分辨率的特征信息(上图最上层的预测输出)就足够了。因为对于较大尺寸的物体而言,尽管小分辨率特征图的位置信息损失比较多,但是对于定位大尺寸物体而言足够了,而且小分辨率特征图的感受野更大,分辨物体的类别更容易,所以不需要依赖于大分辨率的特征信息。
而对于较小尺寸的目标进行检测,则不仅需要用到特征提取网络中输出的较大分辨率的特征信息(利用其中包含的丰富位置信息对小分辨率问题进行准确定位),还需要用到较小分辨率的特征信息(用于辅助判断定位物体的类别)。所以就需要把小分辨率的特征信息和大分辨率的特征信息融合在一起,来实现对中小尺寸目标进行准确的定位和类别判断。
那么接下来的问题就是,不同分辨率的特征图如何进行融合处理呢? 答案是,要对深层次网络输出的小分辨率特征图,执行空间上采样(Upsample,也就是上图中的2x up)操作,把其分辨率大小提升到与浅层分辨率相同的配置,然后再与浅层分辨率特征图进行融合。这个过程主要涉及到两个操作:空间上采样(Upsample)和特征图融合(Concat)。
以下以YOLOv3模型13x13分辨率特征图与26x26分辨率特征图的融合来解释Upsample操作和Concat操作。
- Upsample操作:基于13x13分辨率的特征图,使用近邻插值的方法,执行2x2插值处理,每一张13x13分辨率特征图都通过这样的插值方法,上采样为26x26分辨率的特征图。
- Concat操作:以上13x13分辨率的特征图,通过Upsample操作以后插值为16x16分辨率。这样就有了两组16x16分辨率的特征图,只需要把两组特征图在通道轴上首尾相接拼接在一起就可以了。
不同分辨率的特征图所进行的融合处理以及输出流程如下图所示:

YOLOv3的架构图
基于以上对主干网络Darknet-53以及特征金字塔多路特征图输出结构的理解,再来学习YOLOv3的网络结构就比较容易了:

上图的左上角是YOLOv3的主干网络部分Darknet53,去掉了全局平均池化和用于分类的全连接层。在主干网络的第三部分残差块、第四部分残差块、第五部分残差块的输出上分别输出8倍、16倍、32倍降采样的特征图。
- 对于输入图像分辨率为608x608的情况下,以上三部分所输出的特征图分辨率也就是76x76,38x38以及19x19。
- 而对于当时在目标检测场景中更常见的416x416输入图像分辨率而言,以上三路特征图分辨率则为52x52,26x26,13x13。
上图的右半部分则是基于特征金字塔理论的特征检测部分,以三路不同分辨率的特征图为输入,在不同曾经对其进行上采样和Concat操作,最终输出不同疏密度的检测网络:越密的网格越适合检测小而密集的物体,而越疏的网格越适合检测大而稀疏的物体。
参考资料
- 《YOLO目标检测》杨建华,李瑞峰 第7章 YOLOv3
- 《深度学习之PyTorch物体检测实战》 董洪义 6.3 多尺度与特征融合 YOLOv3