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 中的每个卷积层后面都有一个 BN 层,用于加速收敛并提高泛化能力。BN 层使用小批量输入特征中的均值和方差来归一化卷积特征的输出,公式如 (1) 所示。

其中, 和 是一个小批量的输入特征的均值和方差, 和 表示可训练的缩放因子和偏置。因此,可直接采用 BN 层中可训练的缩放因子作为判断通道重要性的指标。为了有效地从不重要得通道中区分出重要通道,可以通过在缩放因子 上施加 L1 正则化来执行通道级稀疏训练。稀疏训练的损失函数如公式 (2) 所示。

其中,  表示 L1 范数, 表示用来平衡两个损失的惩罚因子。在实现中,使用次梯度来优化非平滑的 L1 惩罚项,和 network slimming 中处理方式相同。

2. 通道剪枝

经过稀疏训练后,我们引入了全局阈值 来确定是否删除该特征通道。全局阈值 被设置为所有 的百分之 n 以控制整体的剪枝率。此外,我们还引入了一个局部安全阈值 ,保持网络连接的完整性,以防止某个卷积层的通道被全部剪掉。局部安全阈值 设置为每层需要保留通道数的百分比 k 所对应的 值。对缩放因子 小于全局阈值 和 局部安全阈值 的最小值的特征通道进行剪枝。在 YOLOv4 中,需要仔细处理各层之间的几种特殊连接,例如,route 层和 shortcut 层。首先,根据全局阈值 和局部安全阈值 为所有卷积层构造一个剪枝掩码。对于 route 层,按顺序将其多个输入层的剪枝掩码串联起来,并将串联起来的掩码作为该层的剪枝掩码。YOLOv4 中的 shortcut 层与在 ResNet 中扮演相似的角色。因此,要求所有与 shortcut 层具有连接的层都具有相同的通道数量。为了匹配由 shortcut 层连接的每个层的特征通道,我们遍历所有连接层的剪枝掩码,并在其上执行 OR 操作为这些连接层生成最终的剪枝掩码。

3. 微调

通道剪枝后,模型精度可能会有一定程度的下降,因此,需要对剪枝后的模型进行微调以尽可能恢复最初的训练精度。在细粒度的目标检测任务中,检测精度对通道剪枝通常比较敏感。因此,微调对于使剪枝后的模型从潜在精度下降中恢复非常重要。在数据集 COCO2017 的测试中,我们使用相同的训练超参数直接训练 SlimYOLOv4,和YOLOv4的正常训练相同。

4. 迭代剪枝

对模型进行高剪枝率的一次剪枝可能导致过度剪枝,可能导致模型精度灾难性的退化,以至于剪枝后的模型将永远不会被恢复。因此,迭代式的剪枝可以更好地避免过度剪枝。

三、未来展望

最近一段时间,我们也将在Adlik的官方github仓库中更新 YOLOv4 在不同数据集上的训练测试以及 slimYOLOv4通道剪枝的代码。同时,在后续的计划中,我们也将持续对 YOLOv4 进行改进,以及支持对 YOLOv4 结构化剪枝,量化和知识蒸馏等模型压缩和加速方法,以实现在不同平台的 CPU 和 GPU 上的高效部署。请大家持续关注 Adlik 公众号和官方 github 仓库https://github.com/Adlik。

参考资料

  • YOLOv4: Optimal Speed and Accuracy of Object Detection

  • CSPNet: A New Backbone that can Enhance Learning Capability of CNN

  • YOLOv3: An Incremental Improvement

  • DC-SPP-YOLO: Dense Connection and Spatial Pyramid Pooling Based YOLO for Object Detection

  • Path Aggregation Network for Instance Segmentation

  • SlimYOLOv3:Narrower, Faster andBetterfor Real-TimeUAV Applications

  • YOLOv4

  • 深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解

YOLOv4 介绍及其模型优化方法相关推荐

  1. SuperMap BIM+GIS-Revit模型处理-第三节 Revit模型优化方法及模型缓存策略

    在模型导入SuperMap平台之后,在应用过程中必然会遇到性能问题,随之而来的就是如何优化模型.本文将总结使用经验和理解,从实际出发介绍几种优化方法和缓存策略.以下操作均在SuperMap iDesk ...

  2. wps 模拟分析 规划求解_【论文】基于双层规划的应急物资邮政运输模型优化方法研究...

    戳上面的蓝字关注我们哦! 基于双层规划的应急物资邮政运输模型优化方法研究 周海霞1,2, 梅育荣1,2, 吕福如1,2, 孙知信1,2 1 南京邮电大学国家邮政局邮政行业技术研发中心(物联网技术),江 ...

  3. 《目标检测蓝皮书》第7篇 模型优化方法及思路

    本专栏将系统性地讲解计算机视觉基础知识.包含第1篇机器学习基础.第2篇深度学习基础.第3篇卷积神经网络.第4篇经典热门网络结构.第5篇目标检测基础.第6篇网络搭建及训练.第7篇模型优化方法及思路.第8 ...

  4. SWA(随机权重平均)——一种全新的模型优化方法

    这两天被朋友推荐看了一篇热乎的新型优化器的文章,文章目前还只挂在arxiv上,还没发表到顶会上.本着探索的目的,把这个论文给复现了一下,顺便弥补自己在优化器方面鲜有探索的不足. 论文标题:Averag ...

  5. Revit模型数据优化方法

    在模型导入SuperMap平台之后,在应用过程中必然会遇到性能问题,随之而来的就是如何优化模型.本文将总结使用经验和理解,从实际出发介绍几种优化方法和缓存策略.以下操作均在SuperMap iDesk ...

  6. 模型优化与tensorflow

    模型优化与tensorflow 模型优化方法介绍 神经网络的要求:小.准.快 小:要求网络权重存储空间小 准:准确率高 快:计算量小 目前有四种方法达到这种要求:裁剪,蒸馏,模型结构搜索,量化. 剪裁 ...

  7. 论文: 贝叶斯优化方法和应用综述(1)--------陈述设计类问题举例子,与 model-free优化计算的对比

    陈述:     就是想看一下贝叶斯学派的陈述,从不同的学派的对比,看看有什么优缺点,然后自己思考下.  摘要: 通过设计恰当的概率代理模型和采集函数,贝叶斯优化框架只需经过少数次目标函数评估即可获得理 ...

  8. 【机器学习】算法模型自动超参数优化方法

    什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...

  9. 中文巨量模型“源1.0”的学习优化方法

    最近,浪潮人工智能研究院发布了中文巨量模型"源1.0",参数量达2457亿,超越美国OpenAI组织研发的GPT-3."源1.0"在语言智能方面表现优异,获得中 ...

最新文章

  1. CentOS 6.5 下配置Java环境
  2. 3种常见的linux版本,查看linux版本的三种常用方法
  3. 一个注解搞定 SpringBoot 接口防刷,还有谁不会?
  4. Linux-非结构化数据同步-Linux下Rsync+Rsync实现非结构化增量差异数据的同步2
  5. html Frame、Iframe、Frameset 的区别 详细出处参考:http://www.jb51.net/web/22785.html
  6. 线程:等待/通知机制
  7. winform listview 设置选中项 图片_实战PyQt5: 069-MV框架中的项视图拖放功能
  8. [传奇单机架设]DBC2000数据库使用教程
  9. 【渝粤教育】国家开放大学2018年秋季 0716-22T工程建设法规 参考试题
  10. [leetcode] 117. 填充同一层的兄弟节点 II
  11. 基于JQ的Lightbox插件视频教程
  12. Veeam Backup 9.5 恢复VMware虚拟机
  13. Android Studio 截屏
  14. JIAR 使用笔记 - 素材
  15. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)
  16. mapbox中文地图_使用 Mapbox 地图
  17. STM8S自学笔记之利用库函数点亮一个LED
  18. 2019年环175五一作业
  19. WPF翻盘连连看(二)
  20. Could AO be provably converged to a stationary point?

热门文章

  1. 联想高管加盟乐视,手机市场风云突变
  2. PHP 版 微信小程序商城 源码和搭建
  3. 2014最佳开源教程
  4. python import random 报错_导致python中import错误的原因是什么
  5. 微信小程序:校验真实姓名和身份证号
  6. 用中文把玩Google开源的Deep-Learning项目word2vec
  7. 项目实训第四周第二次记录
  8. 数控机床是什么编程php吗,数控车床编程实例
  9. 基于PHP的图书管理系统
  10. vue canvas typescript 绘制时间标尺