当前位置: 首页 > news >正文

YOLO系列正传(五)YOLOv4论文精解(上):从CSPNet、SPP、PANet到CSPDarknet-53

系列文章

YOLO系列基础

YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客

YOLO系列正传

YOLO系列正传(一)类别损失与MSE损失函数、交叉熵损失函数-CSDN博客

YOLO系列正传(二)YOLOv3论文精解(上)——从FPN到darknet-53-CSDN博客

YOLO系列正传(三)神经网络的反向传播(back propagation)与公式推导-CSDN博客

YOLO系列正传(四)YOLOv3论文精解(下)——损失函数推导与其他优化项-CSDN博客

YOLO系列正传(五)YOLOv4论文精解(上):从CSPNet、SPP、PANet到CSPDarknet-53-CSDN博客


目录

系列文章

YOLO系列基础

YOLO系列正传

YOLOv4基础介绍

从CSPNet开始

背景与改进

过渡层详解

跨阶段连接分支卷积层详解

SPP模块详解

SPP背景介绍

什么是空间金字塔池化(SPP)?

PANet网络详解

背景与挑战

从FPN网络到PANet网络

CSPDarknet-53模型

CSP模块改进说明

SPP模块改进说明

SPP模块的结构

解释每一部分

PANet网络改进说明

 总结


YOLOv4基础介绍

YOLOv4进一步优化了YOLOv3,主要改进点包括:

  1. 主干网络:使用了CSPDarknet-53替代原YOLOv3中的Darknet-53。
  2. 新方法引入:例如Mish激活函数、Mosaic数据增强、DropBlock正则化和自对抗训练(SAT)。
  3. 优化策略:使用了CIoU Loss和多锚点匹配策略,使得模型在准确率和速度上实现了更好的平衡。

 我们本文专注与YOLOv4网络结构的内容,即CSPDarknet-53的结构梳理。

从CSPNet开始

背景与改进

        跨阶段部分连接网络CSPNet(Cross Stage Partial Network)是针对现有CNN设计的一种改进结构,旨在解决冗余梯度问题并减少计算成本。其实是类似残差结构中的一种,但是相比较于最基本的残差结构,CSPNet有两点不同:

  • CSPNet在密集层之后还有一层卷积作为过渡层
  • CSPNet在跨阶段连接分支上也有一层卷积进行信息的选择性传递。

有关CSPNet的基础内容,可以查看以下博客:

深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解-CSDN博客

以上博客讲诉了残差网络Residual、加权残差连接WRC、以及跨阶段部分连接CSP的基础信息。
本博文在上诉的基础上更进一步详解CSPNet的此两点不同

过渡层详解

过渡层的主要作用是用以在反向传播中梯度传导过程中过渡传导过程。图例如下:

(c)图是没有过渡层的CSPNet,(d)图是有过渡层的CSPNet

        我们先看a图,a图两层分支直接进行了concat拼接后进行Transition后续处理,那么在反向传播中,梯度传播到concat形成的大特征图的时候会对左右两条分支产生一样的前序梯度信息,那么在很大程度上,左右两条分支会产生冗余和重复。

我们此时看b图,b图中密集层(DenseBlock)处理完之后先进行了一次过渡层(Transition)操作(大多是卷积)再和另外一条分支进行concat操作。此时,当我们进行反向传播的时候,抵达concat之后的大特征图的时候梯度信息是一致的,但是梯度信息传递到过渡层的之后再传递给密集层的时候,梯度信息和另一分支就产生了差异性,这在很大程度上避免了梯度冗余和重复。

跨阶段连接分支卷积层详解

在基础残差网络中,我们是没有这一层卷积的,图例如下:

图a:普通的神经网络密集层,图b:Part1为一层卷积操作的CSP改造网络 

此处CSP增加这里的卷积的理由有哪些呢?有如下 两点:

  • 避免硬件计算资源浪费
  • 增加模型表达能力

        在传统残差网络中,密集层大多采用瓶颈层来降低计算量,那么很明显,针对低层的瓶颈层是无法吃满硬件计算资源的,这就给另一分支的构建提供了机会。也就是说另一分支完全可以增加复杂度而不会影响模型速度。给另一分支增加卷积层等处理模块可以避免计算资源的浪费。

        其次,在残差网络中,我们采用跳跃连接的方式是为了使得低层特征可以传递给高层输出,以不丢失低层特征信息,并以此使得模型的深度可以无限往下延深。实际上我们真正需要做的,是在尽可能少的层数里(降低推理速度)获取足够有效的特征信息,也就是说我们不需要模型无限延展,我们需要的是模型每一层的效率足够高,可以处理输出足够有效的特征信息,所以,在另一分支上增加卷积层提高模型效果的思路是完全可行的。

综上CSPNet的结构我们完全解释清晰了。

SPP模块详解

YOLOv4这一版本引入了空间金字塔池化技术(SPP:Spatial Pyramid Pooling)

图例如下:

SPP背景介绍

卷积层对所有的输入size都能正常运行,但是对于最后的检测头,若是采用了FC层(FC层的具体输出维度是固定的)就会产生对输入图像size的要求,这也是传统的CNN架构通常要求输入图像具有固定尺寸的原因,这一要求限制了网络的灵活性,直接resize又会导致图像尺寸信息的丢失。为了克服这一限制,许多研究者提出了不同的解决方案,其中之一就是空间金字塔池化(Spatial Pyramid Pooling,SPP)。SPP通过引入多层次的池化结构,有效地解决了图像尺寸固定的问题,使得CNN能够处理不同尺寸和尺度的图像。

什么是空间金字塔池化(SPP)?

        空间金字塔池化(SPP)的核心思想是通过在多个空间尺度上进行池化,从而生成一个固定长度的特征向量。具体来说,SPP方法通过在卷积神经网络的最后一层卷积层上添加一个池化层,将特征图分成多个不同大小的区域进行池化操作。这些池化操作可以是1×1、2×2、4×4等不同的空间网格,这样能够在不同的尺度上提取图像的特征。最终,来自各个尺度的池化特征会被拼接在一起,形成一个固定长度的特征向量。

空间金字塔池化层的工作原理可以通过以下几个步骤来概括:

  1. 输入特征图:最后一个卷积层生成的特征图,其空间尺寸根据输入图像的大小而不同。
  2. 多层次池化:SPP层将特征图分成多个不同大小的空间区域(如1×1、2×2、4×4等),并在每个区域内进行池化操作。这样,SPP层从不同尺度提取特征。
  3. 特征拼接:池化后的特征会被拼接在一起,形成一个固定长度的特征向量。
  4. 传递至全连接层:这个固定长度的特征向量被传递给全连接层,用于最终的分类或其他任务。

通过这一过程,SPP层能够有效地从不同尺寸的图像中提取重要特征,并为后续的高层任务提供稳健的输入。

PANet网络详解

背景与挑战

实例分割任务的主要挑战在于如何精确地分割图像中的每个实例,尤其是当不同实例之间存在重叠、形状复杂或者尺寸差异较大时。虽然像Mask R-CNN这样的基于深度学习的方法已经取得了较好的结果,但它们仍然面临以下问题:

  • 特征丢失: 网络中的高层特征提供了丰富的语义信息,但缺乏足够的细节。相反,低层特征包含更多的局部细节信息,却缺乏语义理解。
  • 边界模糊: 复杂实例的边界分割往往不够精细,导致误分割和漏分割现象。
  • 多尺度问题: 不同尺寸的物体在图像中可能有很大的差异,现有的分割方法在处理小物体和大物体时常常表现不佳。

        为了克服这些问题,PANet提出了一种新的路径聚合策略,将低层次的细节信息与高层次的语义信息进行有效融合,从而提高了实例分割的准确性。

从FPN网络到PANet网络

FPN通过自底向上的特征金字塔模型给低维特征数据提高了更高维的特征向量支持,简单来说较低层的数据通常用于检测小目标 ,高层特征用于检测大目标。

随着网络深度的加深,越深的网络会丢失越来越多的细节信息以保持对大范围特征信息的识别,而较低层的网络虽然保留了更多信息,但是却没有经过足够多的处理获取更高层级的特征信息。所以在以上的背景下,FPN被提出了,这使得小目标的检测头在保留大量细节信息的基础上也可以获得高层级特征向量。

也许有人就会问了,那为什么没有从低层直接向高层连接的向量给高层检测头提高更多的细节信息呢?没错,答案就是PANet层!

        图中b图展示了在左侧FPN层之后再次进行了PANet层,底层特征信息被传递给了高维数据

        PANet通过路径聚合模块,将多层次的特征进行有效融合。网络不仅仅依赖于高层的抽象语义信息,同时也保留了低层次的局部细节,从而更好地适应不同尺寸、不同复杂度的物体。这种多尺度特征融合方法使得PANet在处理大物体和小物体时,均能获得较好的分割效果。 

CSPDarknet-53模型

终于来到了我们今天的正题:YOLOv4的网络结构

模型图如下:

YOLOv4的网络结构图

YOLOv4 CSPDarknet-53 主干网络部分如下: 

标YOLOv4 CSPDarknet-53 主干网络题
大家可以参考以下YOLOv3模型的结构图:

YOLOv3的详解可以查看以下博客:

YOLO系列正传(二)YOLOv3论文精解(上)——从FPN到darknet-53-CSDN博客

其实,细心的读者可以发现,主干网络的逻辑是近乎一致的。

CSP模块改进说明

YOLOv3中的Residual残差模块和CSPNet思想结合构建了CSPBlock模块,由于使用了CSP模块,密集层也无需有瓶颈层了,全部都是一样的维度.其对比如下:

左图:YOLOv3Darknet-53网络残差结构,右图:YOLOv3CSP魔改后的残差结构 

可以看出,YOLOv4改进点无非就是以下两点:

  • Residual没有使用瓶颈层,提高了计算效率(毕竟瓶颈层是对计算是有负面影响的)
  • 使用CSP进行跨阶段连接,提升了特征提取能力

SPP模块改进说明

在YOLOv4中,SPP(Spatial Pyramid Pooling)模块是为了增强模型在处理不同尺度的物体时的表现。YOLOv4在模型中加入了SPP模块,旨在通过多尺度特征池化来捕获更多的上下文信息,帮助检测不同尺寸的物体。下面我将详细解释YOLOv4中SPP模块的设计。

SPP模块主要是为了达成以下目标:

  • 多尺度特征提取:SPP模块通过使用不同大小的池化层(max-pooling)来捕捉不同尺度的信息。这使得网络能够在不增加额外计算量的情况下,提取多尺度的上下文信息。
  • 增强局部特征的上下文信息:通过对不同大小的区域进行池化,SPP模块能够更好地理解输入图像的全局上下文信息,帮助模型对不同尺度的物体做出更准确的预测。

SPP模块的结构

在YOLOv4的cfg文件中,SPP模块的实现如下:

### SPP ###
[maxpool]
stride=1
size=5[route]
layers=-2[maxpool]
stride=1
size=9[route]
layers=-4[maxpool]
stride=1
size=13[route]
layers=-1,-3,-5,-6
### End SPP ###

解释每一部分

[maxpool]:SPP模块在YOLOv4中包含三个不同大小的maxpool层,每个层使用不同的池化窗口大小,分别是5x59x913x13。这些池化层分别作用于不同尺度的区域来提取特征。

  • 第一层:池化大小为5x5,stride为1。这是最小的池化层,用于捕获较小范围的上下文信息。
  • 第二层:池化大小为9x9,stride为1。它比第一个池化层捕获更大的上下文信息。
  • 第三层:池化大小为13x13,stride为1。这是最大的池化层,可以捕获最大范围的上下文信息。

[route]:这些route层将不同池化层的输出连接在一起,以形成一个多尺度的特征图。

  • layers=-2:将来自前一层的输出连接到当前层。
  • layers=-4:将离当前层更远的输出连接起来,进行多尺度的特征融合。
  • layers=-1,-3,-5,-6:最终将所有池化层的输出(5x5, 9x9, 13x13池化的结果)通过route层合并到一起,形成一个丰富的特征图。

PANet网络改进说明

YOLOv4检测头图例如下:

其中P3、P4、P5是FPN金字塔的输出,后面的N3、N4、N5是PANet网络的输出。

我们可以清晰的看见FPN有一个由下向上的路径,PANet有一个由上向下的路径。这样网络不仅仅依赖于高层的抽象语义信息,同时也保留了低层次的局部细节,从而更好地适应不同尺寸、不同复杂度的物体。很好的补齐了FPN的不足和缺失。

 总结

至此,我们详细讲解了CSPNet、SPP、PANet的相关重点,以及YOLOv4模型网络CSPDarknet-53的模型结构内容!

最后,各位广大读者!看到这您也知道准备一篇类似的博客实属不易,还请多多点赞收藏哦!

相关文章:

YOLO系列正传(五)YOLOv4论文精解(上):从CSPNet、SPP、PANet到CSPDarknet-53

系列文章 YOLO系列基础 YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客 YOLO系列正传 YOLO系列正传(一)类别损失与MSE损失函数、交叉熵损失函数-CSDN博客 YOLO系列正传(二)YOLOv3论文精解(上)——从FPN到darknet-53-C…...

【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计

引言 在当今快节奏的生活中,咖啡早已不仅仅是提神醒脑的饮品,更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计,通过将咖啡与情感、魔法元素相结合,创造出一个充满想象力和治愈感…...

AIGC在电影与影视制作中的应用:提高创作效率与创意的无限可能

云边有个稻草人-CSDN博客 目录 引言 一、AIGC在剧本创作中的应用 1.1 剧本创作的传统模式与挑战 1.2 AIGC如何协助剧本创作 1.3 未来的剧本创作:AI辅助的协同创作 二、AIGC在角色设计中的应用 2.1 传统角色设计的挑战 2.2 AIGC如何协助角色设计 三、AIGC在…...

第三百四十六节 JavaFX教程 - JavaFX绑定

JavaFX教程 - JavaFX绑定 JavaFX绑定同步两个值:当因变量更改时,其他变量更改。 要将属性绑定到另一个属性,请调用bind()方法,该方法在一个方向绑定值。例如,当属性A绑定到属性B时,属性B的更改将更新属性A…...

IDEA+Docker一键部署项目SpringBoot项目

文章目录 1. 部署项目的传统方式2. 前置工作3. SSH配置4. 连接Docker守护进程5. 创建简单的SpringBoot应用程序6. 编写Dockerfile文件7. 配置远程部署 7.1 创建配置7.2 绑定端口7.3 添加执行前要运行的任务 8. 部署项目9. 开放防火墙的 11020 端口10. 访问项目11. 可能遇到的问…...

vue Promise使用

new Promise((resolve, reject) > { ... }) 是 JavaScript 中创建 Promise 实例的语法。Promise 是一种用于处理异步操作的对象,它代表了一个异步操作的最终完成(或失败)及其结果值。 Promise 的基本结构 javascript 深色版本 const my…...

Tomcat调优相关理解

什么是QPS? 是Queries Per Second 的缩写,是指服务器每秒查询数,比如定义一个a接口,该接口是10QPS,那么就是指该接口每秒可以处理10个请求 springboot默认并发处理数是多少? springboot并发处理要看serv…...

uni-app开发-识图小程序-主要功能以及首页实现

目录 一:功能介绍 二:代码实现 一:功能介绍 识图小程序首页主要是识图类型的展示列表,目前只有四种类型的图像识别,分别是车牌,发票,电表,身份证。可以分别识别车牌号码,身份证号码,发票号码,和电表度数。点击对应的类型图标会跳转到识图页面,每个分类上面展示该…...

vue3 ref reactive响应式数据,赋值的问题、解构失去响应式问题

在 Vue3 中,使用 ref 和 reactive 创建响应式数据时,赋值操作和解构赋值存在一些需要注意的事项。以下是对这些问题的详细解答以及代码示例: ref 和 reactive 的基本用法 ref:主要用于基本数据类型(如 Number、String、…...

算法常用库函数——C++篇

前言 本文主要记录、整理、回顾在算法考试中常用的一些库函数,技巧等,不断更新中~ list 常用方法 在一般c编程中,对于数组这样的数据结构,一般都使用vector居多,貌似list用的很少。但实际list也十分强大&#xff0c…...

怎么把多个PDF合并到一起-免费实用PDF编辑处理工具分享

>>更多PDF文件处理应用技巧请前往 96缔盟PDF处理器 主页 查阅! 序言 我之前的文章也有介绍过如何使用96缔盟PDF处理器对PDF文件合并或者批量合并的介绍,但是当时是使用DMPDFUtilTool1.0版本进行的,当时的功能尚不完善,还不支…...

RFC协议简要介绍——有关TCP拥塞控制的RFC

1.RFC Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在R…...

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人,它能像一位经验丰富的工程师,理解你的问题,并从 Speckle 文档中精准地找到答案。更厉害的是,它甚至可以帮你生成代码片段!🚀 本文将详…...

香橙派5Plus启动报错bug: spinlock bad magic on cpu#6, systemd-udevd/443

一、问题 如图: 接上调试串口,每次启动都会报错。不过使用过程中没有发现有什么影响。 百度查阅,有一位博主提到,但是没有细说解决方案: spinlock变量没有初始化_spinlock bad magic on-CSDN博客https://blog.csdn.n…...

电子应用设计方案74:智能家庭对讲系统设计

智能家庭对讲系统设计 一、引言 智能家庭对讲系统作为智能家居的重要组成部分,为家庭成员之间以及与访客的沟通提供了便捷、高效的方式。本设计方案旨在打造一个功能强大、稳定可靠、操作简便且具有良好扩展性的智能家庭对讲系统。 二、系统概述 1. 系统目标 - 实…...

node js 过滤空白行

data.trim().split(\n).filter(user > user); 只过滤文件开头和结尾的空白行。 data.split(\n).map(token > token.trim()).filter(token > token); 这种方法不仅移除了文件开头和结尾的空白行,还确保了每一行内部的多余空白也被清理掉。此外,…...

武泳樽携手AI AD Manager荣获红点奖,智能广告管理系统备受瞩目

近日,由著名设计师武泳樽主导设计的AI AD Manager在2024年红点奖评选中荣获大奖,这一殊荣不仅彰显了他在创新设计领域的卓越实力,更巩固了AI AD Manager作为智能广告技术标杆的地位。凭借独特的用户体验设计、尖端的AI驱动功能和出色的技术融合,AI AD Manager在激烈的国际竞争中…...

Express.js 有哪些常用的中间件?

在使用 Express.js 开发应用程序时,中间件(Middleware)是处理请求和响应的关键组件。它们可以执行各种任务,如解析请求体、添加HTTP头部、记录日志等。以下是一些常用的中间件: body-parser 用于解析传入的请求体。它…...

WordPress File Upload插件 任意文件读取漏洞复现(CVE-2024-9047)(附脚本)

0x01 产品描述: File Upload插件是一款功能强大的WordPress站点文件上传插件,它允许用户在WordPress站点中的文章、页面、侧边栏或表单中轻松上传文件到wp-contents目录中的任何位置。该插件使用最新的HTML5技术,确保在现代浏览器和移动设备上都能流畅运行,同时也兼容旧的浏…...

qt QZipReader详解

1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...