date
Oct 6, 2025
slug
2025-10-06-YOLOv2-model-structure
status
Published
tags
YOLO
summary
本文对YOLOv2模型的BN层、Darknet-19主干网络,以及模型的总体结构进行了详细的总结和学习。
type
Post
category
AI
AI summary
本文对YOLOv2模型的BN层、Darknet-19主干网络,以及模型的总体结构进行了详细的总结和学习。
批归一化BN层的引入
在YOLOv1模型的主干网络所使用的卷积结构,仍然采用的是传统的线性卷积+非线性激活函数的模式,并没有用到在后来十分流行的各种归一化层的设计。因为批归一化层(Batch Normalization,BN)在越来越多的模型中应用,其工作性能得到了业界的广泛认可,因此逐步成为卷积神经网络的标配设计。YOLOv2模型的架构设计中也就顺势引进了被广泛验证的BN层。
具体来讲,就是在网络架构的卷积结构由之前的线性卷积+非线性激活函数的模式,变成了线性卷积层+BN层+非线性激活函数的形式。这种结构也称之为CBL(Conv-BN-LeakyReLU)结构。

Darknet-19主干网络
如[[YOLOv1模型网络架构解读]]所介绍的,YOLOv1模型的主干网络采用了类似GoogLeNet的设计。到了YOLOv2版本,作者设计了一个新的名为DarkNet-19的网络结构取代了前一代的主干网络。
Darknet-19网络包含有19个卷积层,而且每个卷积层都是以上所描述的CBL结构,即卷积层+BN层+激活函数的形式。下图为Darknet-19网络架构各层的配置参数:
- 下表Output对应的特征图维度,对应的是输入分辨率为224x224的图片。当Darknet-19作为YOLOv2的主干网络使用时(输入图像分辨率416x416),其各层输出的特征图维度要对应发生变化。

以上的架构图中,darknet-19网络可以分为两个部分,前半部分是特征提取部分,预训练完成后会被作为YOLOv2的主干网络;最后的卷积层+全局平均池化层+Softmax部分是分类部分,在YOLOv2模型中会被去掉。
可以看到,以上的darknet-19网络架构中,共包含了19个卷积层(3x3卷积和1x1卷积),5个2x2最大池化层,最后借鉴了NiN网络(参考[[CNN经典网络模型架构学习之NiN]])的做法,使用全局平均池化层代替全连接层,在最后一层使用Softmax输出1000个分类的预测结果。
Darknet-19的作者团队用ImageNet数据集去训练网络参数,最终的检测精度上,DarkNet-19网络达到了VGG网络相同的水平,但模型更小(参数量只有25.5M),浮点运算量更是只有其1/5左右,因此运算速度极快。
Darknet-19网络在ImageNet数据集上预训练完毕后,去掉其中用于分类任务的最后一层卷积、平均池化层和Softmax层等,然后将其用作YOLOv2的新主干网络。
Passthrough与Reorg
在主干网络的设计上,除了设计了一个新的darknet-19主干网络以外,YOLOv2还借鉴了SSD模型使用更高分辨率特征图的设计。
通常,不同的特征图的分辨率不同,越是浅层的特征图,越被较少地做降采样处理,因而分辨率就越高,所划分的网格就越精细,这显然有助于去提取更多的细节信息。
对于YOLOv2的主干网络设计而言,除了主干网络darknet-19特征提取部分最后一个卷积层(第19个卷积层,如下图红色箭头所示)输出的低分辨率特征图以外,YOLOv2还从darknet-19网络的第13个卷积层输出(如下图绿色箭头所指)高分辨率特征图,然后把两个特征图合并在一起作为整个主干网络的特征提取输出。在这种情况下,主干网络的特征输出中网络尾段低分辨率的特征和网络中段高分辨率的特征,提取出来的信息更加完整。这就是YOLOv2模型的所谓Passthrough架构。

在输入图像分辨率为416x416的情况下,主干网络中段输出的高分辨率特征图的维度是26x26x512,而其末端输出的低分辨率特征图的维度是13x13x1024。不同分辨率的特征图要如何才能合并在一起输出呢?答案是Reorg操作。
Darknet-19末端的低分辨率特征图维度为13x13x1024,再经过一个3x3,stride=1的CBL卷积块处理,仍然是13x13x1024维度。
而Darknet-19中段的高分辨率特征图维度为26x26x512,则要执行一个reorg的操作,总体数据量不变,但是分辨率会减半,通道数增加为原来的四倍。对于单通道特征图的Reorg操作(相当于只是把数据重排一下而已)如下图所示,一个通道变成了4个通道。通过这样的操作,中段高分辨率的维度就变成了13x13x2048。

经过以上的各自处理后,末端和中段的特征图的空间分辨率都变成了13x13,现在就只需要把所有的特征图合并在一起就可以了。因此经过以上合并后,输出的特征图的通道数就是1024+2048=3072通道,整体的特征图数据维度就是13x13x3072。
YOLOv2模型的总体架构
YOLOv2模型的总体网络架构如下图所示:

需要注意的是,上面的总体网络架构图与Passthrough部分所提供的网络架构图,在主干网络经过merge以后输出的通道数有分歧。上图中中段高分辨率特征图在Passthrough的处理过程中会通过一个卷积CBL块先降低到64通道,再reorg为13x13x256维度,因此Merge后输出的总的特征数据维度就是13x13x1280;而前一节的网络结构图中,Passthrough的处理过程中对高分辨率特征数据不做降通道操作,直接reorg为13x13x2048维度,这样Merge后的总的特征输出数据的维度就是13x13x3072。不过Merge后输出无论是1280通道还是3072通道,后续都会通过一个CBL卷积块把通道数降低为1024。真正用于最终预测的特征数据维度都是13x13x1024。
输入图像的分辨率为RGB 3通道416x416分辨率的图像,经过其主干网络darknet-19处理并合并其末端和中段特征提取数据后,最终输出的特征图为13x13x1024维度。然后再基于这个13x13x1024维度的特征数据进行图像中待检物体类别和位置的预测。
最后的这个预测过程就比较简单了:就是对13x13x1024的特征提取数据执行1x1卷积操作。最终的输出数据维度根据待检物体的类别数量来确定。YOLOv2的每个网格中包含有5个预测BOX(在YOLOv2的术语也称为anchor),每个BOX所包含的数据有:中心坐标x和y,长宽度w和h,置信度confidence,各个类别的概率(依据待识别物体的类别种类数量而定)。
- 对于COCO数据集而言,可以支持80个类别的检测。那么每个anchor的数据量是85,每个网格包含5个anchor,因此每个网格的数据量就是425,针对COCO数据集而言模型输出推理结果的数据维度就是13x13x425。
- 而对于VOC数据集而言,支持20种类别,每个网格的数据量是125,针对COCO数据集而言模型输出推理结果的数据维度就是13x13x125。
从以上的YOLOv2的总体架构图可以看出,所有的网络层都是卷积网络,YOLOv1的全连接层被彻底拿掉了,所以YOLOv2也就成了全卷积网络。
参考资料
- 《YOLO目标检测》杨建华,李瑞峰 第6章 YOLOv2