1.1 简介
YOLOv4(You Only Look Once, Version 4)是一种实时目标检测算法,由Alexey Bochkovskiy、Chien-Yao Wang和Hong-Yuan Mark Liao于2020年提出。它是YOLO系列的最新版本之一,该系列因其速度与准确性之间的平衡而闻名。YOLOv4在前代基础上进行了大量改进,引入了多种先进的计算机视觉技术,以提升模型的检测精度和运行效率。以下是YOLOv4的几个关键特性及其详细讲解:
1. 网络架构
-
CSPNet(Cross Stage Partial Networks): YOLOv4采用了CSPNet作为其主干网络的一部分。CSPNet通过减少梯度消失和重复计算问题,提高了模型的训练效率和检测精度。它将特征图分为两部分,在不同阶段进行部分特征的融合,减少了计算量。
-
SPP-Block(Spatial Pyramid Pooling): SPP块能够提取不同尺度的特征,增强模型对多尺度目标的检测能力。它通过在特征图上应用不同大小的池化操作(例如最大池化),然后将这些池化后的结果拼接起来,为网络提供丰富的空间信息。
-
FPN(Feature Pyramid Networks): YOLOv4结合了FPN结构,允许模型在不同尺度的特征图上进行预测,从而提高对不同大小物体的检测性能。FPN通过自顶向下和自底向上的路径聚合特征,实现了多尺度特征的融合。
2. 优化技术
-
Bag of Freebies (BoF): 这些是不增加推理时间的改进方法,包括数据增强(如Mosaic数据增强、CutMix等)、使用不同激活函数(如Mish激活函数)、改进的归一化层(如自适应归一化层)等,以提高模型的泛化能力。
-
Bag of Specials (BoS): 这些改进方法可能会增加一些推理时间,但能显著提高模型性能,包括上述提到的SPP-Block、CSPNet以及一些额外的模块,如SAM(Spatial Attention Module)、PANet路径聚合结构等。
3. 训练策略
-
Cosine Annealing: 使用余弦退火调整学习率,使得学习率在一个周期内按照余弦函数的形状变化,有助于模型在训练后期更好地收敛。
-
Mish Activation Function: YOLOv4采用了Mish激活函数,这是一种非线性激活函数,被发现比ReLU、Leaky ReLU等有更优的性能。
-
Mosaic Data Augmentation: 一种创新的数据增强技术,通过随机选取四张图片并将其拼接成一张大图来模拟复杂的场景,增加了模型的泛化能力。
4. 性能
YOLOv4在多个公开的数据集上展示了卓越的性能,特别是在COCO数据集上,它达到了当时最先进的水平,同时保持了非常高的处理速度。这使得YOLOv4成为许多实时目标检测应用场景的理想选择,如视频监控、自动驾驶车辆、无人机等领域。
5. 总结
总的来说,YOLOv4是一个高度优化的目标检测模型,它通过整合多种最新的网络结构和训练技巧,实现了在精度和速度上的显著提升。它的设计思想是尽可能利用现有的最佳实践和技术,通过精心设计的网络结构和训练策略,达到高效且准确的目标检测效果。
1.2 网络结构
CSPDarkNet53
CSPDarkNet53是YOLOv4中采用的一种深度神经网络架构,它是基于原始的DarkNet53进行了改进,引入了CSP(Cross Stage Partial Networks)的概念,旨在提高模型的效率和准确性。下面是对CSPDarkNet53的详细介绍:
背景
DarkNet53是YOLOv3中使用的特征提取网络,以其简洁高效著称,但随着深度学习模型的发展,人们开始寻找进一步提升模型性能的方法。CSPNet就是在此背景下提出的,它通过减少特征图的冗余计算,来提升网络的训练效率和检测性能。
CSP(Cross Stage Partial Networks)原理
CSP的核心思想是在网络的早期阶段就进行特征的分割和融合,而不是像传统网络那样等到所有特征都被提取后再进行融合。具体来说,CSPNet将网络的特征图分为两部分,一部分经过一系列卷积层处理,另一部分则保持原样或经过轻量级处理。随后,这两部分的特征在后续层中被重新合并,这样可以有效减少计算量和内存占用,同时保持甚至提高模型的表达能力。
CSPDarkNet53结构
在CSPDarkNet53中,原有的DarkNet53架构被改造,引入了CSP结构。这意味着在DarkNet53的基础之上,某些阶段的特征图会被分割成两路处理,一路保持较浅的处理,另一路则进行更深层次的特征提取,之后再将两路特征合并。这样的设计减少了特征图的计算冗余,提高了模型的训练效率,并且由于特征的多样性增强,模型的检测精度也有所提升。
主要特点
- 高效性:通过CSP结构减少了很多不必要的计算,尤其是在深层网络中,显著降低了模型的计算成本。
- 准确性:尽管减少了计算量,但由于特征的多样性增强,模型在检测任务中的表现并未降低,反而可能因为更好的特征表示而有所提升。
- 内存使用:通过减少特征图的重复计算,CSPDarkNet53能够更有效地利用GPU内存,这对于大规模模型训练尤为重要。
应用
CSPDarkNet53作为YOLOv4的骨干网络,不仅提升了目标检测的精度,还保持了实时处理的速度,使其在实际应用中,如视频监控、自动驾驶、图像识别等领域,具有极高的实用价值。
下图左是CSPNET的结构(用denseNET为基准),transition指的是concat拼接。
下图右是YOLOV4的CSP结构。注意1x1卷积的通道数是输入通道数的一半。
先看downsample1模块:输入图像为416x416x3的尺寸。resblock中通道数全程没变。
downsample2模块:
SPP
空间金字塔池化,解决多尺度问题。具体细节看这里
PAN
PAN,全称为Path Aggregation Network(路径聚合网络),是由Tsung-Yi Lin等人在2018年提出的,主要用于提升目标检测算法中的特征金字塔表示能力。PANet是基于FPN(Feature Pyramid Networks)的一种改进,目的是通过更有效地融合多尺度特征,增强模型在不同尺度上的目标检测性能。以下是PAN的几个关键特点及组成部分:
1. 上行连接(Bottom-Up Path Augmentation)
PANet首先构建了一个从高分辨率到低分辨率的特征金字塔,这一过程与FPN类似,通过使用连续的下采样(如最大池化或步长卷积)操作来实现。但是,PANet在此基础上进行了扩展,不仅从顶层特征开始向下传播,还在每个下采样步骤后,将特征图通过上行连接(反向传播)回传到更低层的特征图中,这种设计有助于低层特征获得高层语义信息。
2. 特征增强(Feature Enhancement)
在PANet中,不仅有从顶层到底层的特征传播,还有从底层到顶层的特征反馈。具体来说,它在每个层级特征图融合之前,会将从上一层返回的特征与当前层的特征进行逐元素相加(Element-wise Addition)或使用其他形式的融合操作(比如concatenation),这样可以使得每一层的特征都融合了来自不同尺度的信息,增强了特征的表达能力。
3. 适应性特征汇聚(Adaptive Feature Pooling)
为了更好地利用特征金字塔中的信息,PANet在每个特征层级的顶部引入了一种适应性汇聚机制。这通常涉及到一个或多个汇聚操作(如全局平均池化),用来进一步提炼高层语义特征,并将这些特征与当前层级的特征相结合,以增强对小物体的检测能力。
4. 边界Refinement Units (BRUs)
在某些实现中,PANet还包括边界Refinement Units,这是一种特殊的模块,设计用于在检测边界上提供更为精确的定位。BRU通过在每个特征层级应用卷积和上采样操作,来细化边界信息,这对于提高检测框的精确度特别有帮助。
总结
PANet通过其独特的路径聚合机制,不仅加强了特征金字塔内部的多尺度特征交互,还通过自顶向下的特征反馈和自底向上的特征增强,显著提升了模型对不同尺度目标的检测性能。这一设计不仅提高了检测精度,同时也保持了相对较高的运行效率,因此被广泛应用于各种目标检测框架中,成为现代目标检测算法的一个重要组件。
下图左为PAN的结构,下图右是YOLOV4对PAN做的修改,在原PAN中是相加,在YOLOV4中是concat拼接。
整体网络结构
这里1是objectness(置信度,也叫confidence),4是bounding box的回归参数(中心坐标xy,宽w,高h),乘三是因为每个gridcell生成三个anchor。
1.3 优化策略
Eliminate grid sensitivity
消除gird的敏感度。下图是V2中的预测目标边界框。详细连接:https://blog.csdn.net/qq_51605551/article/details/139404232?spm=1001.2014.3001.5501
四个t损失计算得到的回归参数。
这么做会有一个问题,当GT的中心点坐标落在grid cell边界上时,假如说最左上角,那么tx和ty的值需要趋于负无穷。这种数是很难达到的。
为了解决这个问题,V4引入了一个缩放因子scale:
当前主流的实现方法是将scale值设置为2,图像就是这样的:
这样的话,中心点坐标就会很容易到达边界,这个问题也就迎刃而解了。
Mosaic data augmentation
马赛克数据增强。就是将四张不同规格的图片拼接在一起,拼接好之后就能得到一张新的图片。
详细连接:https://blog.csdn.net/qq_51605551/article/details/140425535?spm=1001.2014.3001.5501
这么做能够扩充我们训练的一个样本多样性。
IOU threshold
用于匹配正样本。回顾一下V3SPP是如何匹配正样本的:首先它会针对我们每一个GT去和每一个anchor模板进行匹配,GT与AT(anchor template)左上角对齐。
如果GT和多个AT的IOU都大于阈值该怎么办?假如AT1和AT2都满足,那么GT就会同时分配给AT1和AT2,这样就能起到扩充正样本数量的效果。
那么YOLOV4的匹配准则是什么样的呢?匹配完之后假设GT所在的grid cell的AT2是正样本,在V4当中,你会看到当前grid cell左边和上边的gridcell的AT2都会被划分为正样本。
那么为什么会这样做呢?这就要回到之前说的消除网格敏感度的优化策略了。通过右下角两个公式,我们将网络预测相对grid左上角的偏移量从原来的0~1缩放到-0.5~1.5之间了。上面的girdcell点的距离我们当前GT中心首先在X轴方向很明显是小于0.5的,Y轴方向小于1.5,符合范围。左边的gridcell同理。
下面是更多例子:
注意:扩充正样本的grid cell时只会往上下左右去扩充,而不会斜着扩充如左上右上等。
Optimizered Anchors
优化的anchor模板(通过K-means聚类得到)
损失计算-CIOU
https://blog.csdn.net/qq_51605551/article/details/140425535?spm=1001.2014.3001.5501