YOLOv4 介绍及其模型优化方法

本文介绍了YOLOv4目标检测模型,包括模型结构、优化方法,如CSPDarknet53主干网络、SPP和PAN层,以及通道剪枝的优化策略。YOLOv4在保持实时性的同时提高了检测精度,对比EfficientDet,其速度更快,精度更高。文章还探讨了通道剪枝的稀疏训练、全局阈值和局部安全阈值等方法,以实现模型压缩和推理加速。
摘要由CSDN通过智能技术生成

YOLOv4 介绍及其模型优化方法

一、YOLOv4 介绍

2020 年 4 月,YOLOv4 在悄无声息中重磅发布,在目标检测领域引起广泛的讨论。在 YOLO 系列的原作者 Joseph Redmon 宣布退出 CV 领域后,表明官方不再更新 YOLOv3。但在过去的两年中,AlexeyAB 继承了 YOLO 系列的思想和理念,在 YOLOv3 的基础上不断进行改进和开发,于今年 4 月发布 YOLOv4,并得到了原作者 Joseph Redmon 的承认。YOLOv4 可以使用传统的 GPU 进行训练和测试,并能够获得实时的,高精度的检测结果。与其他最先进的目标检测器的比较的结果如图1.1所示,YOLOv4 在与 EfficientDet 性能相当的情况下,推理速度比其快两倍。相比 YOLOv3 的 AP 和 FPS 分别提高了 10% 和 12%。

图1.1 检测结果对比

YOLOv4 贡献可总结如下:

  • 提出了一种实时、高精度的目标检测模型。它可以使用1080 Ti或2080 Ti 等通用GPU来训练快速和准确的目标检测器;

  • 在检测器训练阶段,验证了一些最先进的 Bag-of-Freebies 和 Bag-of-Specials 方法的效果;

  • 对SOTA方法进行改进,使其效率更高,更适合单GPU训练,包括 CBN,PAN 和 SAM等。

论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection,https://arxiv.org/abs/2004.10934

代码链接:https://github.com/AlexeyAB/darknet#yolo-v4-in-other-frameworks

1. 目标检测相关方法总结

一般目标检测器网络结构由以下四个部分构成,如图 1.2 所示。

图1.2 目标检测

1.1 Bag of freebies

可以在训练过程中进行改进(例如数据增强,类别不平衡,损失函数,软标签等)以提高检测的准确性。我们把这些只改变训练策略或只增加训练成本而对推理速度没有影响的方法称为"Bag of freebies (BoF)"。BoF 方法总结如图 1.3 所示。

图1.3 Bag of freebies

1.2. Bag of specials

对于那些仅增加少量推理时间但可以显着提高目标检测精度的插件模块和后处理方法,将其称为“Bag of specials (BoS)”。这些方法主要用于增强模型中的某些属性,例如扩大感受野,引入注意力机制或增强特征集成能力等,而后处理方法则是筛选模型预测结果。BoS 方法总结如下图1.4所示。

图1.4 Bag of specials

2. YOLOv4 模型结构及其使用的方法

YOLOv4 所采用的网络结构,Bag 方法总结如下图1.5所示。

图1.5 YOLOv4

2.1 网络结构

YOLOv4 模型结构如图 1.6 所示。图片引用来自https://blog.csdn.net/nan355655600/article/details/107852288

图1.6 YOLOv4模型结构

CSPDarknet53

CSPNet (Cross Stage Paritial Network) 主要从网络结构设计的角度解决推理中计算量大的问题。CSPNet 的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。因此采用 Cross-Stage-Partial-connections (CSP) 先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。CSP 连接如图 1.7 所示。

图1.7 CSP

网络结构采用 CSP 连接,主要以下三个方面的优点:

  • 增强 CNN 的学习能力,使得在轻量化的同时保持准确性;

  • 降低计算瓶颈;

  • 降低内存成本。

YOLOv4 利用上面的 CSP 连接以及如图1.8所示的 Darknet-53 作为特征提取的主干网络。

图1.8 Darknet-53

与具有更好的分类性能 CSPResNeXt-50 相比,CSPDarknet53 模型在目标检测方面具有更高的检测精度。同时,可以使用 Mish 和其他技术来提高 CSPDarknet53 的分类准确性。因此,YOLOv4 最终选择 CSPDarknet53 作为主干网络。

目标检测器由特征提取中的 backbone 和用于目标检测的 head 组成。为了检测不同尺度的目标,将使用具有不同空间分辨率特征图生成层次结构。为了丰富输入到 head 的信息,来自自底向上和自顶向下的相邻特征映射按元素方式相加或连接在一起,然后作为 head 的输入。因此,head 输入将包含自底向上的丰富空间信息和自顶向下的丰富语义信息。我们将这一部分称为 neck。

SPP (spatial pyramid pooling layer)

在 YOLOv4 中,对 SPP 进行了修改以保证输出为空间维度。最大池化的核大小为 k = {1×1、5×5、9×9、13×13}。将来自不同核大小池化后的特征图串联在一起作为输出。采用 SPP 层的方式,比单纯的使用单个尺寸核大小的最大池化的方式,更有效的增加主干网络的感受野,显著的分离最重要的上下文特征。YOLOv4 的作者在使用 608 * 608 大小的图像进行测试时发现,在 COCO 目标检测任务中,以 0.5% 的额外计算代价将 AP50 增加了 2.7%。

图1.9 Darknet-53

PAN (Path Aggregation Network)

图 1.10 是用于目标检测的路径聚合网络 (PAN)。自下而上的路径 (b) 得到增强,使低层空间信息更易于传播到顶部。在 FPN 中,局部空间信息沿红色箭头向上传播。虽然图中未明确显示,但红色路径将穿过约100层以上。PAN 引入了一条捷径(绿色路径),仅需大约 10 层即可到达顶层。这种捷径连接使细粒度的局部信息可用于顶层。

图1.10 PAN

在 YOLOv4 中,修改后的PAN 对相邻的特征图不是相加在一起,而是串联在一起。如图 1.11 所示。

图1.11 Modified_PAN

2.2 使用的 Bag 方法

Mosaic 数据增强

Mosaic 是一种数据增强方法,将 4 张训练图像组合成一张进行训练(而不是 CutMix 中的 2 张),这增强了对超出正常图像边框的目标的检测。另外,每个 mini-batch 包含大量的图像(是原来 mini-batch 所包含图像数量的 4 倍),因此,在估计均值和方差时减少了对 large mini-batch sizes 的需求。

图1.12 Mosaic

Mish 激活函数

YOLOv4 的骨干网络中都使用了 Mish 激活函数,而其他部分则使用 Leaky_ReLU 函数。Mish 是光滑的非单调激活函数,可定义为:

1.13 Mish激活函数

在 YOLOv4 中使用 Mish 函数的原因是它的低成本和它的平滑、非单调、无上界、有下界等特点,与其他常用函数如 ReLU 和 Swish 相比,提高了它的性能。

3. 测试结果

图 1.14 为 YOLOv4 在 MS COCO 2017 测试集上的测试结果。

图1.14 测试结果

二、YOLOv4 模型优化—通道剪枝

在资源受限的设备上部署像 YOLOv4 这样的大模型时,模型压缩是研究人员重新调整较大模型所需资源消耗的有用工具。现有模型压缩和加速方法主要包括模型剪枝,知识蒸馏和量化等。非结构化的模型剪枝方法虽然可以在不损失精度的情况下得到较高的压缩比,但其需要专用的硬件或软件才能够实现模型的加速。通道剪枝是一种粗粒度但有效的结构化剪枝方法,更重要的是,它不需要专用的硬件或软件就可以方便地实现剪枝模型。因此,本节主要介绍对 YOLOv4 模型进行结构化剪枝,在普通硬件上即可实现模型尺寸的压缩和推理加速。

Network slimming 提出了一种简单但有效的通道修剪方法。他们直接采用批处理归一化 (BN) 层中的缩放因子,通道级缩放因子,并对这些缩放因子进行 L1 正则化训练网络,以获得通道级的稀疏性。应用 network slimming 方法来修剪基于 CNN 的图像分类器,显著地减少了模型大小和 FLOPs。因此,本节将network slimming 扩展到目标检测模型中,应用去对 YOLOv4 模型进行通道剪枝。

我们按照如图 2.1 所示的步骤在 YOLOv4 中应用通道修剪以获取 SlimYOLOv4。

图2.1 SlimYOLOv4通道剪枝流程

1. 稀疏化训练

神经网络模型的按通道稀疏度有助于进行通道修剪,并描述以后可能被删除的不重要通道的数量。为了方便通道修剪,为每个通道分配了一个缩放因子,其中缩放因子的绝对值表示通道的重要性。具体来说,除了检测头之外,YOLOv4 中的每个卷积层后面都有一个 B

需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:原理与源码解析》 【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来! 代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《Windows版YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《Windows版YOLOv4目标检测实战:训练自己的数据集》《Windows版YOLOv4-Tiny目标检测实战:训练自己的数据集》《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》《Windows版YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值