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激活函数

相关推荐
biter0088几秒前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
吃个糖糖7 分钟前
35 Opencv 亚像素角点检测
人工智能·opencv·计算机视觉
qq_5290252925 分钟前
Torch.gather
python·深度学习·机器学习
数据小爬虫@25 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
IT古董1 小时前
【漫话机器学习系列】017.大O算法(Big-O Notation)
人工智能·机器学习
凯哥是个大帅比1 小时前
人工智能ACA(五)--深度学习基础
人工智能·深度学习
終不似少年遊*1 小时前
pyecharts
python·信息可视化·数据分析·学习笔记·pyecharts·使用技巧
Python之栈1 小时前
【无标题】
数据库·python·mysql