YOLOv4 学习笔记

文章目录

  • 前言
  • 一、YOLOv4贡献和改进
  • 二、YOLOv4核心概念
  • 三、YOLOv4网络架构
  • 四、YOLOv4数据增强
  • 五、YOLOv4的损失函数
  • 总结


前言

在近年来的目标检测领域,YOLOv4的出现标志着一个重要的技术突破。YOLOv4不仅继承了YOLO系列快速、高效的特点,还引入了一系列创新的技术和策略,显著提升了目标检测的性能。本文将简要介绍YOLOv4的主要贡献和改进,核心概念,详细的网络架构,以及其在数据增强和损失函数方面的创新。通过这一系列的分析,我们可以更好地理解YOLOv4在目标检测领域的重要性及其应用潜力。
YOLOv4效果


一、YOLOv4贡献和改进

YOLOv4的贡献和改进可以从以下几个方面来梳理:

  1. 高效且强大的目标检测模型:

    • YOLOv4开发了一个高效且强大的目标检测模型,使得使用1080 Ti或2080 Ti GPU的用户能够训练出一个快速且准确的目标检测器。
  2. 网络架构的选择和优化:

    • YOLOv4采用了CSPDarknet53作为其主干网络(Backbone),利用SPP(Spatial Pyramid Pooling)和PAN(Path Aggregation Network)作为其颈部(Neck),以及YOLOv3作为其检测头部(Head)。
    • 为了满足目标检测的特殊要求,如检测多个小尺寸物体、覆盖更大的输入网络尺寸和更多的参数来检测单个图像中不同大小的多个对象,CSPDarknet53被证明是最优的选择。
  3. 训练改进技术的影响验证:

    • YOLOv4测试了各种训练改进技术对于分类器在ImageNet数据集上的准确性和目标检测器在MS COCO数据集上的准确性的影响。
  4. 使用的关键技术(BoF和BoS):

    • YOLOv4利用了一系列的“Bag of Freebies (BoF)”和“Bag of Specials (BoS)”方法来提高性能。这些包括CutMix和Mosaic数据增强、DropBlock正则化、类标签平滑、Mish激活函数、交叉阶段部分连接(CSP)、多输入加权残差连接(MiWRC)、CIoU损失、自适应训练(SAT)、消除网格敏感性、使用多个锚点对单一真实框、余弦退火调度器、最优超参数、随机训练形状、SPP块、SAM块、PAN路径聚合块和DIoU-NMS。

这些改进和创新使得YOLOv4在目标检测领域具有显著的性能提升,特别是在速度和准确度上的平衡,使其成为目标检测领域的一个重要里程碑。

二、YOLOv4核心概念

  1. CSPDarknet53 主干网络(Backbone):

    • CSPDarknet53 是YOLOv4的主干网络,专为提高网络的学习能力和速度而设计。它结合了Darknet53的结构和Cross Stage Partial Network (CSPNet)的优化策略。CSPNet通过分割特征图并在交叉阶段合并,减少了计算量并提高了特征图的传播效率。
  2. SPP和PAN 颈部(Neck):

    • SPP(Spatial Pyramid Pooling) 块用于增加感受野,分离最重要的上下文特征,且对网络操作速度影响较小。
    • PAN(Path Aggregation Network) 用于改进特征信息的传递,通过不同层次的特征融合,提升了检测性能,特别是在小尺寸目标检测方面。
  3. YOLOv3 检测头(Head):

    • YOLOv4沿用了YOLOv3的检测头。这个头部设计用于生成预测框(bounding boxes),并且计算每个框的类别概率和对象置信度。
  4. Bag of Freebies (BoF) 和 Bag of Specials (BoS):

    • BoF 用于在不增加推理成本的情况下提高训练过程的效果。例如,Mosaic数据增强、DropBlock正则化、CIoU损失等。
    • BoS 指的是在推理阶段增加少量计算成本以显著提升检测性能的技术。这包括Mish激活函数、交叉阶段部分连接(CSP)、多输入加权残差连接(MiWRC)等。
  5. 数据增强和正则化技术:

    • YOLOv4引入了新的数据增强方法如Mosaic和自适应训练(SAT),以及DropBlock作为正则化方法。Mosaic通过混合四个训练图像来检测对象,而SAT则在两个前向后向阶段中改变原始图像。
  6. 超参数优化和训练策略:

    • YOLOv4在设计时考虑了单GPU训练的适应性,包括使用遗传算法选择最优超参数,以及对某些现有方法进行改进,使其更适合高效训练和检测。

三、YOLOv4网络架构

YOLOv4的网络架构主要分为三个部分:主干网络(Backbone),颈部(Neck),和检测头(Head)。下面是对这三个部分的具体说明:

  1. 主干网络(Backbone):CSPDarknet53

    • CSPDarknet53 是YOLOv4的主干网络,构建在Darknet53的基础上,并引入了CSPNet的概念。这种结构旨在提高网络的学习能力和运行速度。
    • 它通过分割特征图并在交叉阶段合并,减少了计算量并提高了特征图的传播效率。此外,CSPDarknet53含有29个卷积层(3x3),提供了725x725的大感受野和27.6M的参数量,这使得它适合作为检测器的主干网络。
  2. 颈部(Neck):SPP和PAN

    • SPP(Spatial Pyramid Pooling) 块位于主干网络之后,用于增加感受野,分离最重要的上下文特征,且对网络操作速度影响较小。SPP通过池化操作来聚集不同尺度的特征,增强模型对不同尺寸目标的适应性。
    • PAN(Path Aggregation Network) 用于改进特征信息的传递。PAN结构通过融合不同层次的特征来提升检测性能,特别是在小尺寸目标检测方面。它通过聚合不同层次的特征图,增强了特征的丰富性和多样性。
  3. 检测头(Head):YOLOv3

    • YOLOv4的检测头沿用了YOLOv3的设计。这个头部设计用于生成预测框(bounding boxes),并计算每个框的类别概率和对象置信度。它包含了一系列的卷积层,用于最终的对象检测和分类。
    • YOLOv3头部的优势在于其简洁高效的设计,能够在单个网络中同时处理对象的检测和分类。

整体来看,YOLOv4的网络架构在保证高效性的同时,通过这些创新的设计改进了目标检测的准确率和速度,尤其是对小尺寸目标的检测能力。

四、YOLOv4数据增强

YOLOv4在数据增强方面引入了一些创新技术,这些技术显著提高了模型在不同环境和条件下的泛化能力和准确性。主要的数据增强方法包括:

  1. Mosaic 数据增强:

    • Mosaic 是一种新颖的数据增强方法,它将四个训练图像混合在一起,形成一个单独的合成图像。这种方法不仅增加了训练数据的多样性,还允许模型学习在不同上下文中检测对象。
    • 通过Mosaic增强,模型能够在每层处理来自四个不同图像的激活统计数据,这有助于减少对大型mini-batch的需求。
  2. Self-Adversarial Training (SAT):

    • 自适应训练(SAT) 是另一种新颖的数据增强技术,它在两个前向后向阶段中操作。在第一阶段,神经网络修改原始图像而不是网络权重,相当于对自己执行对抗性攻击,通过修改原始图像来创建不存在目标对象的假象。
    • 在第二阶段,神经网络被训练在这种修改后的图像上检测对象。这种方法增强了模型对于对抗性攻击和异常条件下的鲁棒性。
  3. CutMix 和 MixUp:

    • 虽然YOLOv4的论文中重点强调了Mosaic,但在目标检测的训练中,CutMixMixUp 也是常用的数据增强技术。这些技术通过组合来自不同图像的部分来生成新的训练样本,增强模型对于不同场景和对象组合的学习能力。
  4. 随机训练形状(Random Training Shapes):

    • YOLOv4还使用了随机训练形状的方法,这意味着在训练过程中,输入图像的尺寸会不断变化。这种方法有助于模型更好地适应不同尺寸的输入,提高对不同分辨率输入的适应性。

这些数据增强技术的共同目标是提高模型在现实世界复杂和多变环境中的性能和鲁棒性,尤其是在处理不同尺寸、不同背景和不同环境下的目标检测任务时。通过这些方法,YOLOv4能够有效地提升对各种场景的适应能力和检测准确率。

五、YOLOv4的损失函数

YOLOv4的损失函数是其目标检测性能的关键组成部分,主要包括三个方面:置信度损失、类别损失和框坐标损失。下面详细介绍这些损失函数的原理和公式。

  1. 置信度损失(Confidence Loss):

    • 置信度损失用于评估模型预测的bounding box是否包含对象,并衡量其预测的准确性。YOLOv4使用交叉熵损失来执行这一任务。
    • 公式通常表示为:
      Confidence Loss = − ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j log ⁡ ( C ^ i j ) + λ n o o b j 1 i j n o o b j log ⁡ ( 1 − C ^ i j ) \text{Confidence Loss} = -\sum_{i=0}^{S^2}\sum_{j=0}^{B} 1_{ij}^{obj} \log(\hat{C}_{ij}) + \lambda_{noobj}1_{ij}^{noobj} \log(1 - \hat{C}_{ij}) Confidence Loss=i=0S2j=0B1ijobjlog(C^ij)+λnoobj1ijnoobjlog(1C^ij)
      其中, S 2 S^2 S2 表示网格单元的数量, B B B 表示每个网格单元预测的边界框数量, 1 i j o b j 1_{ij}^{obj} 1ijobj 是一个指示器,如果边界框 j j j 在网格单元 i i i 中包含对象则为1,否则为0; C ^ i j \hat{C}_{ij} C^ij 是模型预测的边界框包含对象的置信度; λ n o o b j \lambda_{noobj} λnoobj 是不包含对象的边界框的权重。
  2. 类别损失(Class Loss):

    • 类别损失用于评估模型在分类预测的准确性。YOLOv4同样使用交叉熵损失来计算类别损失。
    • 公式通常表示为:
      Class Loss = − ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ∑ c ∈ c l a s s e s p i j ( c ) log ⁡ ( p ^ i j ( c ) ) \text{Class Loss} = -\sum_{i=0}^{S^2}\sum_{j=0}^{B} 1_{ij}^{obj} \sum_{c \in classes} p_{ij}(c) \log(\hat{p}_{ij}(c)) Class Loss=i=0S2j=0B1ijobjcclassespij(c)log(p^ij(c))
      其中, p i j ( c ) p_{ij}(c) pij(c) 是真实标签中类别 c c c 在边界框 j j j 和网格单元 i i i 的概率, p ^ i j ( c ) \hat{p}_{ij}(c) p^ij(c) 是模型预测的对应概率。
  3. 框坐标损失(Bounding Box Loss):

    • YOLOv4引入了CIoU损失(Complete Intersection over Union Loss)来替代传统的IoU损失,用于更精确地优化预测框的坐标。
    • CIoU损失考虑了边界框重叠区域、中心点距离和长宽比,提供了更全面的框坐标回归。
    • 公式表示为:
      CIoU Loss = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v \text{CIoU Loss} = 1 - \text{IoU} + \frac{\rho^2(b, b_{gt})}{c^2} + \alpha v CIoU Loss=1IoU+c2ρ2(b,bgt)+αv
      其中,IoU是交集与并集之比, ρ ( b , b g t ) \rho(b, b_{gt}) ρ(b,bgt) 是预测框 b b b 和真实框 b g t b_{gt} bgt 中心点的欧几里得距离, c c c 是包含两个框的最小闭合区域的对角线长度, v v v 是长宽比的一致性度量, α \alpha α 是用于平衡不同项的权重系数。

这些损失函数共同构成了YOLOv4的损失函数,使模型在进行目标检测时能够同时考虑到准确性、置信度和类别预测。通过这样的设计,YOLOv4能够在保持高速处理的同时,提高检测的准确度和鲁棒性。


总结

经过对YOLOv4的深入分析,我们可以看到,它在目标检测技术上取得了显著的进步。YOLOv4不仅提高了检测速度和准确率,还通过其独特的网络架构和创新的训练策略,大大提升了模型的泛化能力。特别是在数据增强和损失函数设计上,YOLOv4展示了其在处理复杂和多样化场景中的强大能力。总的来说,YOLOv4的发展为实时目标检测设置了新的标准,为未来的研究和应用提供了丰富的启示和可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【启扬方案】启扬储能管理平板助力储能电站实现智能且高效化运行

在储能领域,储能电站扮演着重要角色,储能电站技术的应用贯穿于电力系统发电、输电、配电、用电的各个环节。实现电力系统削峰填谷、可再生能源发电波动平滑与跟踪计划处理、高效系统调频,增加供电的可靠性。 但随着储能电⼒系统建设发展得越来…

Java网络编程,使用UDP实现TCP(三), 基本实现四次挥手

简介 四次挥手示意图 在四次挥手过程中,第一次挥手中的Seq为本次挥手的ISN, ACK为 上一次挥手的 Seq1,即最后一次数据传输的Seq1。挥手信息由客户端首先发起。 实现步骤: 下面是TCP四次挥手的步骤: 第一次挥手&…

记录一下如何使用python生成二维码 并简单练习命令行参数供初学者参考

主代码main.py 后面是演示效果图: import argparse import sysimport qrcode import os qr qrcode.QRCode(version1,error_correctionqrcode.constants.ERROR_CORRECT_L,box_size10,border4, ) fileList[] fileName[]parserargparse.ArgumentParser(description生…

Ubuntu20.04降低linux版本到5.4.0-26-generic

前言 试用ubuntu20.04安装昇腾的驱动和cann的时,出现如下问题: (base) rootubuntu:/home/work# ./Ascend-hdk-910-npu-driver_23.0.rc3_linux-aarch64.run --full Verifying archive integrity... 100% SHA256 checksums are OK. All good. Uncompr…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(三)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建1)定义模型结构2)优化损失函数 3. 模型训练及保存1)模型训练2)模型保存3)映射保存 相关其它博客工程源代码下载其它资料下载…

“百里挑一”AI原生应用亮相,百度智能云千帆AI加速器首个Demo Day来了!

作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

亚马逊云科技:向量数据存储在生成式人工智能应用程序中的作用

生成式人工智能深受大众喜爱,并且由于具备回答问题、写故事、创作艺术品甚至生成代码的功能,推动了行业的转变,那么如何才能在自己的企业中充分地利用生成式人工智能等应运而生问题。许多客户已经积累了大量特定领域的数据(财务记…

LangChain学习二:提示-实战(下半部分)

文章目录 上一节内容:LangChain学习二:提示-实战(上半部分)学习目标:提示词中的示例选择器和输出解释器学习内容一:示例选择器1.1 LangChain自定义示例选择器1.2 实现自定义示例选择器1.2.1实战&#xff1a…

静态路由的原理和配置

一.路由器的工作原理 首先我们知道路由器是工作在网络层的,那就是三层设备。网络层的功能主要为:不同网段之间通信、最佳路径选择也就是逻辑地址(ip地址)寻址、转发数据。 1.路由器是什么 路由器是能将数据包转发到正确的目的地…

【QT 5 调试软件+(Linux下验证>>>>串口相关初试串口)+Windows下qt代码在Linux下运行+参考win下历程+基础样例】

【QT 5 调试软件Linux下验证>>>>串口相关初试串口参考win下历程基础样例】 1、前言2、实验环境3、先行了解4、自我总结-win下工程切到Linux下1、平台无关的代码:2、依赖的库:3、文件路径和换行符:4、编译器差异:5、构…

什么是防抖与节流?应用场景举例

防抖节流如何处理防抖与节流 防抖节流防抖例子节流例子Vue Axios全局接口防抖、节流封装实现 小结 防抖 防抖:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 应用场景: 提交按钮、用户注册…

QEMU源码全解析 —— virtio(2)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上一回对于virtio进行了简介,并说明了其基本原理以及框架。对…

【JVM入门到实战】(三) 查看字节码文件的工具

一、 javap -v命令 javap是JDK自带的反编译工具,可以通过控制台查看字节码文件的内容。适合在服务器上查看字节码文件内容。直接输入javap查看所有参数。输入javap -v 字节码文件名称 查看具体的字节码信息。(如果jar包需要先使用 jar –xvf 命令解压&a…

mmyolo的bbox_loss和检测bbox都是空

最近用mmyolo训练自己的数据集的时候发现训练的时候loss_bbox0,测试和eval的时候结果也全是空的,排除了数据集读取的问题,最后发现是config中自定义了自己的类别但是没有传给dataset。。。 简而言之,在自定义了数据集里的metainf…

【C语言】一个RDMACM、Verbs API与epoll一起使用的例子

一、epoll介绍 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 以下是epoll的主要使用方法和优点: epo…

2023-12-05 Qt学习总结10

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十六 学生信息管理系统插入介绍: QTableView和QSqlTableModelQTableViewQSqlTableModel 程序所用数据库表格程序组成以及界面学生端源码:管理员端源码: 总结 前言 要解决问题: 学习qt最核心知识, 多一个都不…

Android : BottomNavigation底部导航_简单应用

示例图&#xff1a; 1.先创建底部导航需要的图片 res → New → Vector Asset 创建三个矢量图 图片1 baseline_home.xml <vector android:height"24dp" android:tint"#000000"android:viewportHeight"24" android:viewportWidth"24…

nrm 的使用 可以快速切换下载(npm)镜像,解决资源下载慢和运行失败

nrm是什么&#xff1f; 介绍 nrm(npm registry manager) 是 npm 的镜像源管理工具. 有时候国外资源太慢,使用 nrm 可以快速的在 npm 源之间切换 安装 npm install -g nrm 基本使用 查看可选择的源 nrm ls 切换到对应的镜像源 nrm use 对应的镜像 删除镜像源 nrm del 名字 …

深入理解 SVG:开启向量图形的大门(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

ArcGIS pro与SuperMap根据属性自动填充颜色步骤

GIS项目经常会接触到控规CAD数据&#xff0c;想要把数据转换成GIS图层并发布&#xff0c;需要进行专题配图。研究了一下ArcGIS pro和SuperMap iDesktop的配图&#xff0c;整理一下用到的一些技术思路。 1、Excel表格根据RGB值添加单元格填充颜色 要实现如上效果图&#xff0c;…