33_YOLOv4网络详解

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

附:Mish激活函数

相关推荐
陈广亮8 分钟前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬17 分钟前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia44 分钟前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区1 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两4 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
敏编程4 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪4 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
strayCat232554 小时前
Clawdbot 源码解读 7: 扩展机制
人工智能·开源
王鑫星4 小时前
SWE-bench 首次突破 80%:Claude Opus 4.5 发布,Anthropic 的野心不止于写代码
人工智能