计算机视觉---YOLOv4

article/2025/8/29 10:03:08

YOLOv4(You Only Look Once v4)于2020年由Alexey Bochkovskiy等人提出,是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术,实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练策略、损失函数、正则化方法

一、主干网络(Backbone):从Darknet53到CSPDarknet53

YOLOv3的瓶颈
  • Darknet53:采用全卷积结构,包含53个卷积层,结合残差连接(Residual Connection),在精度与速度间取得平衡,但计算量较大,且特征复用效率有待提升。
YOLOv4的改进
  1. CSP结构引入(Cross Stage Partial Network)

    • 核心思想:将主干网络的每个阶段(Stage)的特征图分为两部分,一部分直接传递(Partial Connection),另一部分进行常规卷积,最后拼接融合。
    • 优势
      • 减少计算量:通过跨阶段特征融合,避免重复计算,提升计算效率。
      • 增强梯度传播:分离的梯度路径使网络更易训练,缓解梯度消失。
      • 轻量化设计:在YOLOv4中,CSPDarknet53相比Darknet53减少约15%的参数量,同时保持精度。
        在这里插入图片描述
  2. 激活函数替换:Mish替代LeakyReLU

    • Mish公式 Mish = x ⋅ tanh ⁡ ( ln ⁡ ( 1 + e x ) ) \text{Mish} = x \cdot \tanh(\ln(1 + e^x)) Mish=xtanh(ln(1+ex))
    • 优势
      • 光滑连续的非单调特性,保留负值信息,增强特征表达能力。
      • 相比LeakyReLU,在深层网络中精度更高,但计算量略有增加。
    • 例外:YOLOv4-tiny仍使用LeakyReLU以降低计算成本。
      在这里插入图片描述
  3. SPP模块集成(Spatial Pyramid Pooling)

    • 位置:在CSPDarknet53的末端加入SPP模块(YOLOv3无此结构)。
    • 作用通过多尺度池化(如1×1, 5×5, 9×9, 13×13最大池化)扩大感受野,融合不同尺度特征,提升目标多尺度检测能力
    • 效果:实验表明,SPP模块使YOLOv4的mAP提升2.7%~3.2%。

在这里插入图片描述

二、颈部网络(Neck):从FPN到PAN+SPP

YOLOv3的瓶颈
  • 单一FPN结构:仅通过自上而下路径融合高层语义特征,底层细节特征(如小目标位置信息)传递不足。
YOLOv4的改进
  1. FPN+PAN结构(Path Aggregation Network)
    • 双向特征融合
      • 自上而下路径(FPN):传递高层语义特征(如“汽车”“人”的类别信息)。
      • 自下而上路径(PAN):增强底层细节特征(如边缘、纹理)的传递,尤其提升小目标检测性能。
    • 对比YOLOv3:YOLOv3仅使用FPN,而YOLOv4通过PAN补充底层特征流动,形成更强大的特征金字塔。
      在这里插入图片描述

YOLOv4中的PAN不是加法,是拼接
在这里插入图片描述

  1. SPP模块的延续作用
    • 在颈部网络中,SPP模块进一步扩大感受野,且计算成本低(仅在主干末端和颈部各用一次)。

三、头部检测(Head):多尺度检测与激活函数优化

YOLOv3的设计
  • 三尺度检测:输出13×13、26×26、52×52三种尺度特征图,分别检测大、中、小目标。
  • 激活函数:分类头使用Softmax(单标签分类),回归头使用Sigmoid预测坐标偏移。
YOLOv4的改进
  1. 分类头:Logistic激活替代Softmax

    • 支持多标签分类:YOLOv3的Softmax强制单标签,而YOLOv4通过Logistic激活(独立二分类)支持目标的多标签预测(如“人”同时属于“运动员”和“行人”)。
  2. 锚框优化

    • 使用K-means聚类重新生成锚框,适配COCO数据集的目标尺寸分布,提升先验框与真实框的匹配度。
  3. 检测头结构轻量化

    • 通过减少卷积层数量或使用深度可分离卷积(如YOLOv4-tiny),降低计算量,适配移动端。

四、训练策略:数据增强与自对抗训练

YOLOv3的数据增强
  • 基础增强:随机翻转、裁剪、缩放、颜色抖动等。
YOLOv4的改进
  1. Mosaic数据增强

    • 原理:将4张图像随机缩放、裁剪、拼接成1张新图像,背景丰富且包含更多小目标。
    • 优势
      • 提升小目标检测性能(小目标在拼接后可能成为中/大目标)。
      • 减少对Batch Normalization的依赖(单张图像包含4张图的统计特征),可使用更小的Batch Size训练。
        在这里插入图片描述
  2. MixUp增强

    • 混合两张图像及其标签,通过线性插值生成新样本,提升模型泛化能力,抑制过拟合。
  3. Random Erase:用随机值或训练集的平均像素值替换图像中的区域

  4. Hide and Seek:根据概率设置随机隐藏一些补丁
    在这里插入图片描述

  5. 自对抗训练(Self-Adversarial Training, SAT)

    • 两阶段流程
      • 阶段1:模型反向更新输入图像(而非网络参数),生成对抗样本(使模型误检)。
      • 阶段2:用对抗样本正常训练模型,提升鲁棒性。
    • 对比传统对抗训练:无需外部攻击算法,仅通过模型自身生成扰动,计算成本更低。
      在这里插入图片描述

6.DropBlock
在这里插入图片描述

五、损失函数:从Smooth L1到CIoU Loss

YOLOv3的损失函数
  • 坐标损失:Smooth L1损失,仅计算预测框与真实框的坐标偏移,未考虑框的重叠面积和形状。
  • 分类损失:交叉熵损失。
  • 置信度损失:二元交叉熵损失,衡量预测框与真实框的重叠程度(IoU)。
存在的问题:没有相交则IOU=0无法进行梯度计算,相同的IOU却反应不出实际情况是怎么样

在这里插入图片描述

YOLOv4的改进

GIOU引入面积
在这里插入图片描述
DIOU引入中心点距离
在这里插入图片描述

  1. CIoU Loss替代Smooth L1

    • 公式

      CIoU = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v \text{CIoU} = 1 - \text{IoU} + \frac{\rho^2(b, b^{gt})}{c^2} + \alpha v CIoU=1IoU+c2ρ2(b,bgt)+αv
      其中:

      • ρ 2 \rho^2 ρ2:预测框与真实框中心点的欧氏距离。
      • c c c:包含两框的最小外接矩形对角线长度。
      • α \alpha α:权重参数,(v):衡量预测框与真实框的宽高比一致性。
    • 优势

      • 同时优化重叠面积(IoU)、中心点距离、宽高比,收敛更快,定位更精准
      • 解决传统IoU/L1损失在无重叠时梯度消失的问题。
  2. 置信度损失结合CIoU

    • 置信度不仅反映IoU,还融入CIoU的惩罚项,使模型更关注框的形状和位置匹配。

六、正则化与优化技术

1. 跨卡批量归一化(CmBN, Cross mini-Batch Normalization)
  • 背景:YOLOv3使用普通BN,多卡训练时各卡独立计算统计量,可能导致模型不稳定。
  • CmBN改进:在每个Batch内跨GPU收集统计量(而非全量数据),平衡训练稳定性与计算效率,尤其适合小Batch Size场景。
2. 优化器与学习率策略
  • 优化器:YOLOv4默认使用SGD(YOLOv3也常用SGD,但YOLOv4调参更精细)。
  • 学习率调度
    • 余弦退火(Cosine Annealing):周期性衰减学习率,避免过早收敛到局部最优。
    • Warmup策略:训练初期缓慢提升学习率,防止模型在随机初始化阶段崩溃。
3. 标签平滑(Label Smoothing)
  • 对真实标签添加微小噪声(如将one-hot标签从[0,1,0]改为[0.05,0.9,0.05]),抑制模型对标签的过度自信,提升泛化能力
    在这里插入图片描述
    在这里插入图片描述
非极大值抑制NMS改进

DIOU-NMS
在这里插入图片描述
在这里插入图片描述

七、SAM注意力机制模块

Convolutional Block Attention Module(CBAM)是一种轻量级卷积神经网络注意力模块。它通过通道注意力空间注意力双重机制优化特征表达:先对特征图进行全局平均池化与最大池化,经全连接层生成通道注意力权重,聚焦重要特征通道;再对通道维度做平均与最大池化,通过卷积生成空间注意力权重,定位关键空间区域。两者顺序堆叠,为特征图分配动态权重,增强有效信息、抑制冗余,可无缝嵌入各类CNN架构,在几乎不增加计算量的前提下提升模型表征能力。CBAM注意力机制在NLP,CV等领域广泛应用。
在这里插入图片描述

YOLOv4引入了SAM(Spatial Attention Module)
SAM(空间注意力模块)是神经网络中聚焦空间维度的注意力机制模块。其输入特征图后,先在通道维度分别进行平均池化与最大池化,生成两张空间特征图;再将二者拼接,通过卷积操作输出空间注意力权重图,该权重图与原特征图相乘,可增强关键空间区域的特征响应,抑制无关位置信息。SAM能让模型更关注“何处”是重要特征,常与通道注意力结合(如CBAM),轻量级且计算高效,适用于各类CNN架构以提升空间特征表征能力。
在这里插入图片描述
在这里插入图片描述

八、其他改进与性能对比

1. 测试阶段优化
  • 多尺度测试(Multi-Scale Testing, MST):输入图像缩放至不同尺寸进行推理,提升小目标检测精度(牺牲速度)。
  • 自适应锚框机制:根据输入图像尺寸动态调整锚框比例,适配不同分辨率。
2. 轻量化变体:YOLOv4-tiny
  • 主干网络:使用CSPDarknet53的轻量化版本,减少卷积层和通道数(如仅保留前13层)。
  • 颈部网络:移除SPP和PAN,仅用简单FPN。
  • 检测头:仅保留两个尺度(13×13和26×26),适合移动端或嵌入式设备。
3. 性能对比(COCO数据集)
模型BackbonemAP@0.5FPS (Tesla V100)
YOLOv3Darknet5357.940
YOLOv4CSPDarknet5365.765
YOLOv4-tinyCSPDarknet53-tiny40.2448
  • 结论:YOLOv4相比YOLOv3,mAP提升约7.8%,FPS提升62.5%,实现“精度与速度双突破”。

八、总结:YOLOv4的技术突破点

模块YOLOv3YOLOv4改进收益
主干网络Darknet53CSPDarknet53 + SPP轻量化、更强特征表达
颈部网络FPNFPN + PAN底层细节与高层语义双向融合
数据增强基础增强Mosaic + MixUp + SAT小目标检测与鲁棒性提升
损失函数Smooth L1 + BCECIoU Loss定位更精准,收敛更快
正则化普通BN + DropoutCmBN + 标签平滑训练稳定性与泛化能力提升
激活函数LeakyReLUMish(主干)非线性表达增强
检测头Softmax(单标签)Logistic(多标签)支持多标签分类

九、常见误区与注意事项

  1. YOLOv4与YOLOv5的关系

    • YOLOv4是官方版本,由原团队开发;YOLOv5由Ultralytics公司基于PyTorch重构,非官方但更易部署,两者技术路线不同(如YOLOv5使用Focus结构和不同的CSP变体)。
  2. Mish的适用场景

    • 算力充足时使用Mish可提升精度;嵌入式设备建议用LeakyReLU或Swish优化版。
  3. 锚框的必要性

    • YOLOv4仍依赖手工设计的锚框,而后续YOLOv5s/YOLOX尝试无锚框(Anchor-Free)设计,需注意技术演进趋势。

朝饮花上露,夜卧松下风。
云英化为水,光采与我同。 —王昌龄


http://www.hkcw.cn/article/dgRsouFGky.shtml

相关文章

IP地址交换如何让车联网效率翻倍?

在车辆移动过程中实现稳定可靠的网络连接,是智能交通系统发展的关键技术之一。车辆行动通讯网络(VANET)通过车载设备和路边基础设施的配合,使车辆在行驶中能够接入互联网。要实现这一目标,每辆车都需要获得唯一的IP地址…

DexWild:野外机器人策略的灵巧人机交互

25年5月来自 CMU 的论文“DexWild: Dexterous Human Interactions for In-the-Wild Robot Policies”。 大规模、多样化的机器人数据集已成为将灵巧操作策略泛化到新环境的一条有效途径,但获取此类数据集面临诸多挑战。虽然遥操作可以提供高保真度的数据集&#xf…

大连格恩朗椭圆齿轮流量计:工业流量测量的精密刻度尺

在工业生产的庞大脉络中,流体流量的精准测量如同心脏监测仪之于人体,细微偏差可能导致整个系统的失衡。大连格恩朗椭圆齿轮流量计以**0.5%的精度**(部分型号达0.2%)成为工业流量领域的“精密刻度尺”,其核心原理如同一…

【NebulaGraph】查询案例(七)

【NebulaGraph】查询案例 七 1. 查询语句12. 查询语句23. 查询语句34. 查询语句4 1. 查询语句1 GO FROM "player100" OVER * YIELD type(edge) AS link, properties($$) AS properties,tostring(src(edge)) AS src,tostring(dst(edge)) AS dst, tags($$) AS tagLi…

database disk image is malformed 的解决方法

Sqlite数据库在执行时报错:database disk image is malformed 解决方法: 1.重启电脑试下,或者重启服务试下 2.重新创建新的表,读出正确的部分的数据结构及数据 (1)命令行中定位到数据表的路径下; (2)执行如…

机动车结构化检测算法AI智能分析网关V4打造全场景应用解决方案

一、方案概述​ 随着交通管理智能化发展,精准高效的机动车信息检测需求迫切。AI智能分析网关V4基于深度学习与计算机视觉技术,具备强大的机动车结构化检测能力,可快速提取车辆关键信息,赋能交通管理与安防监控。本方案将围绕其技…

认识多系统萎缩:一种隐匿进展的神经退行性问题

多系统萎缩是一种罕见的神经退行性疾病,起病隐匿且呈进行性发展,平均发病年龄约 50 岁,男性略多于女性。 该疾病主要影响中枢神经系统多个部位,包括锥体外系、小脑、自主神经系统等。根据主要症状差异,可分为不同亚型&…

UE5蓝图中播放背景音乐和使用代码播放声音

UE5蓝图中播放背景音乐 1.创建背景音乐Cube 2.勾选looping 循环播放背景音乐 3.在关卡蓝图中 Event BeginPlay-PlaySound2D Sound选择自己创建的Bgm_Cube 蓝图播放声音方法二: 使用代码播放声音方法一 .h文件中 头文件引用 #include "Kismet/GameplayS…

【C语言极简自学笔记】项目开发——扫雷游戏

一、项目概述 1.项目背景 扫雷是一款经典的益智游戏,由于它简单而富有挑战性的玩法深受人们喜爱。在 C 语言学习过程中,开发扫雷游戏是一个非常合适的实践项目,它能够综合运用 C 语言的多种基础知识,如数组、函数、循环、条件判…

职业本科院校无人机专业人才培养解决方案

2023年的中央经济工作会议强调了以科技创新推动现代化产业体系构建的重要性,并提出发展生物制造、商业航天、低空经济等战略性新兴产业。低空经济,依托民用无人机等低空飞行器,在多场景低空飞行活动的牵引下,正逐步形成一个辐射广…

Text-to-SQL评估体系:从Spider 1.0数据集到2.0框架的跨越与革新

文章目录 一、引言:评估体系迭代推动Text-to-SQL技术发展二、Spider 1.0:跨领域语义解析数据集的奠基2.1 数据集构建与核心特征2.2 评估逻辑与技术局限 三、Spider 2.0:企业级工作流评估框架的崛起3.1 框架定位与核心组件3.2 工作流任务的革命…

电感器在数据中心电源系统中的应用及选型

当前,AI应用的加速落地带来了功耗的大幅提升,直接推动了数据中心电源需求的增长。根据国际能源署2023年的数据,全球数据中心能耗占比已超全球电力消耗的3%,单台A100 GPU服务器峰值功耗已经突破10kW。数据中心功耗的大幅提升&#…

WordPress搜索引擎优化的最佳重定向插件:进阶指南

在管理网站时,我们经常需要调整网页地址或修复错误链接。这时,通过重定向不仅能有效解决这些问题,还能显著提升网站在搜索引擎中的排名。对于熟悉基础重定向插件的用户来说,一些功能更强大的工具可以帮助你更全面地管理网站&#…

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比 在 MFC (即 Microsoft Foundation Classes)基础上开发框架应用时,控件 UI 的环境一直是个难题:原生控件设计落后,不支持现代化主题,缩放适配性差,形成了 MFC 开发…

2.qml使用c++

目录 1.概述2.注册方式3. 分类①枚举类②工具类③数据类④资源类②视图类 1.概述 qml是用来干嘛的? 当然是提高UI开发效率的 为什么要混合C? 因为qml无法处理密集型数据逻辑 而加入c则兼顾了性能 达到11>2 总结就是 qml 开发UI, C 实现逻辑 而js的用…

复合机器人:纠偏算法如何重塑工业精度与效率?

在智能制造领域,复合机器人正成为柔性生产与高精度作业的核心载体。面对“复合机器人有纠偏算法吗?”这一行业高频问题,富唯智能以多模态纠偏技术体系给出了答案——通过自研的AI驱动纠偏算法与多传感器融合方案,复合机器人不仅能…

[ Qt ] | QPushButton常见用法

目录 绑定键盘快捷键 前面已经说了很多用法了,下面主要说说绑定键盘,设置Icon图片。 绑定键盘快捷键 实现四个按钮,可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…

TortoiseSVN账号切换

SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 ​​下载地址​​:TortoiseSVN官网 ​​安装步骤​​: 双击安装包,按向导完成安装后&#x…

Linux 程序管理

一、Linux程序与进程 1、程序,进程,线程的概念 程序:是一组指令及参数的集合,按照既定的逻辑控制计算机运行用来完成特定任务,是静态的; 进程:是运行着的程序,是操作系统执行的基本单位,是程序…

Android Gnss模块初步整理

一. 概述: Android的Gnss功能分布在App层和Framework层,App层主要调用LocationManager,通过Binder调用请求Framework的LocationManagerService服务,注册回调函数等: 1. // 获取Fw的LocaitonManagerService locManager (Location…