YOLO系列目标检测算法-Scaled-YOLOv4

news/2024/5/19 7:41:22/文章来源:https://blog.csdn.net/qq_39707285/article/details/126968156

YOLO系列目标检测算法目录

  1. YOLO系列目标检测算法总结对比
  2. YOLOv1
  3. YOLOv2
  4. YOLOv3
  5. YOLOv4
  6. Scaled-YOLOv4- 文章链接
  7. YOLOv5- 文章链接
  8. YOLOv6- 文章链接
  9. YOLOv7- 文章链接

本文总结:

  1. 提出一种网络缩放方法,使得基于CSP的YOLOv4可以上下伸缩,以适用于大型/小型网络;
  2. 将CSP应用到各式CNN中,可以减少参数和计算量,提高准确性,减少推理时间,因此CSP化了Backbone、neck和SPP;
  3. 分别分析了对于低端设备和高端设备对模型缩放的研究;
  4. 对于小型模型,限制计算复杂度小于O(whkb^2),选择使用OSANet,并CSP化,得到CSPOSANet;最小化/平衡特征图的大小,在CSPOSANet的计算块之间执行梯度截断,并将它们分割为通道数相等的两条路径;当Cin=Cout时的内存访问成本MAC最小,所以卷积前后保持相同的通道数;
  5. 对于大型模型,能更好地预测物体大小的能力基本上取决于特征向量的感受野,与感受野最直接相关的是stage,分析多个因素对感受野的影响后得出,{sizeinputsize^{input}sizeinput,#stage}的组合效果最好。因此,在执行缩放时,首先对sizeinputsize^{input}sizeinput、#stage执行复合缩放,然后根据实时要求,分别对深度和宽度执行缩放;将一个完全CSP化的YOLOv4-P5,通过缩放,并将其扩展到YOLOv4-P6和YOLOv4-P7;

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。


本章目录

  • 6. YOLO系列目标检测算法-Scaled-YOLOv4
    • 6.1 简介
    • 6.2 模型缩放原理
      • 6.2.1 模型缩放的一般原理
      • 6.2.2 低端设备可缩放的微型模型
      • 6.2.3 高端GPU扩展的大型模型
    • 6.3 Scaled-YOLOv4
      • 6.3.1 SCP-ized YOLOv4
      • 6.3.2 YOLOv4-tiny
      • 6.3.3 YOLOv4-large


6. YOLO系列目标检测算法-Scaled-YOLOv4

6.1 简介

  本文研究表明, 基于CSP方法的YOLOv4目标检测神经网络可以上下伸缩,适用于小型和大型网络,同时保持最佳速度和精度。本文提出了一种 网络缩放方法,不仅仅是修改网络的深度、宽度、分辨率,还修改网络结构

  神经网络算法的计算设备可能是云计算设备、通用GPU、物联网集群或单个嵌入式设备。为了设计有效的目标检测器,模型缩放技术是非常重要的,因为它可以使目标检测器对各种类型的设备实现高精度和实时推理。

  最常见的模型缩放技术是改变Backbone的深度(CNN中卷积层的数量)和宽度(卷积层中卷积滤波器的数量),然后训练适合不同设备的CNN。EfficientNet-B0中使用NAS技术执行复合缩放,包括宽度、深度和分辨率的处理,他们使用这个初始网络,并限定计算量,开始搜索最佳CNN的网络结构,并将其设置为EfficientNet-B1,然后使用线性放大技术获得EfficientNetB2-EfficitentNet-B7的体系结构。

  RegNet中总结并添加了来自广阔参数搜索空间AnyNet的约束,他们发现CNN的最佳深度约为60,还发现当瓶颈比设置为1,cross-stage宽度增加率设置为2.5时,会获得最佳性能。
其他多种轻量级神经网络算法详见系列文章《轻量级神经网络算法》。

  通过对各种目标检测算法的分析后发现,作为YOLOv4的Backbone的 CSPDarknet53几乎与通过网络架构搜索技术获得的所有优化过的架构特征相匹配。CSPDarknet53的深度、瓶颈比、stage间宽度增长率分别为65、1和2。因此,本文基于YOLOv4开发了 模型缩放技术,并提出了 scaled-YOLOv 4。如图1所示,提出的的scaled-YOLOv4具有出色的性能。
在这里插入图片描述
  scaled-YOLOv4的设计过程如下。首先,重新设计了YOLOv4并提出了YOLOv4 CSP,然后基于YOLOv 4 CSP开发了scaled-YOLOv4。在提出的scaled-YOLOv4中,讨论了线性扩大/缩小模型的上下界,并分别分析了小模型和大模型缩放时需要注意的问题。因此,能够系统地开发YOLOv4大型和YOLOv小型模型。

  本文主要贡献总结如下:
(1)针对小模型设计了一种强大的模型缩放方法,可以系统地平衡浅层CNN的计算开销和存储带宽;
(2)设计一种简单而有效的策略来扩大大型目标探测器;
(3)分析所有模型缩放因子之间的关系,然后基于最有利的组划分执行模型缩放;
(4)实验证实,FPN结构本质上是一种一劳永逸(once-for-all )的结构;

  利用上述方法开发了YOLOv4-tiny和YOLOv4-large。

6.2 模型缩放原理

  在对目标检测器执行模型缩放后,下一步是处理将发生变化的定量因素,包括带有定性因素的参数数量。这些因素包括模型推理时间、平均精度等。定性因素将根据所使用的设备或数据库产生不同的增益效应。将在第1小节中分析和设计定量因素。在第2、3小节中,将分别设计在低端设备和高端GPU上的目标检测器相关的定性因素。

6.2.1 模型缩放的一般原理

  在设计有效的模型缩放方法时, 主要原则是,当缩放比例增大/减小时,我们希望增加/减少的量化成本越低/越高,效果越好。

  在本节中,将展示和分析各种通用CNN模型,并试图了解它们在1)图像大小、2)层数和3)通道数变化时的量化成本。选择的CNN有ResNet、ResNext和Darknet。

  对于具有b个base layer通道的k层CNN,
  ResNet layer的计算为:k*[conv(1x1,b/4)] -> conv(3x3,b/4) -> conv(1x1,b)];
  ResNeXt layer的计算为:k*[conv(1x1,b/2) -> gconv(3x3/32,b/2) -> conv(1x1,b)];
  Darknet layer的计算为:k*[conv(1x1,b/2) -> conv(3x3,b)]。

  分别用αβγ表示可用于调整图像大小、层数和通道数的缩放因子,当这些比例因子变化时,表1总结了FLOPs的相应变化。
在这里插入图片描述
  从表1可以看出,计算消耗缩放尺寸和宽度呈平方倍增长,深度呈线性增长
在这里插入图片描述
   CSPNet可以应用于各种CNN架构,同时减少了参数和计算量。此外,它还提高了准确性,减少了推理时间。将其应用于ResNet、ResNeXt和Darknet,并观察计算量的变化,如表2所示。CSP block的结构如上图所示。
在这里插入图片描述
  从表2所示的数字中,可以看到,将上述CNN转换为CSPNet后,新架构可以有效地将ResNet、ResNeXt和Darknet上的计算量(FLOP)分别减少23.5%、46.7%和50.0%。因此,本文使用 CSP-ized化模型作为执行模型缩放的最佳模型。

6.2.2 低端设备可缩放的微型模型

  对于低端设备,设计模型的推理速度不仅受计算量和模型大小的影响,更重要的是必须考虑外围硬件资源的限制。因此,在执行微小模型缩放时,还必须考虑内存带宽、内存访问成本(MAC)和DRAM流量等因素。为了考虑上述因素,设计必须符合以下原则:

  1. 使计算复杂度小于O(whkb2)O(whkb^{2})O(whkb2)
      轻量级模型与大型模型的不同之处在于,它们的参数利用效率必须更高,以便通过少量计算达到所需的精度。在执行模型缩放时,希望计算顺序尽可能低。在表3中,分析了具有有效参数利用率的网络,例如DenseNet和OSANet的计算负载,其中g表示增长率。
    在这里插入图片描述
      对于一般的CNN,表3中列出的g、b和k之间的关系为k<<g<b。因此,DenseNet的计算复杂度为O(whgbk)O(whgbk)O(whgbk),OSANet的计算复杂程度为O(max(whbg,whkg2))O(max(whbg,whkg^{2}))O(max(whbg,whkg2))。以上两个模型的计算复杂度都小于ResNet系列的O(whkb2O(whkb^{2}O(whkb2)。因此, 本文采用OSANet设计计算复杂度较小的小型模型。OSANet的结构图如下图(b)所示。
    在这里插入图片描述

  2. 最小化/平衡特征图的大小
      为了在计算速度方面取得最佳平衡,提出了一个新概念,即在CSPOSANet的计算块之间执行梯度截断。如果将原始CSPNet设计应用于DenseNet或ResNet架构,因为这两种架构的第j层输出是第1到(j-1)层输出的整合,必须将整个计算块视为一个整体。由于OSANet的计算块属于PlainNet架构,因此从计算块的任何层制作CSPNet都可以实现梯度截断的效果。本文使用此功能重新规划基础层的b通道和计算块生成的kg通道,并将它们分割为通道数相等的两条路径,如表4所示。
    在这里插入图片描述
      当通道数为b+kgb+kgb+kg时,如果要将这些通道分成两条路径,最好的分割是将其分成两个相等的部分,例如(b+kg)/2(b+kg)/2(b+kg)/2。当实际考虑硬件的带宽τ时,如果不考虑软件优化,最佳值为ceil((b+kg)/2τ)∗τceil((b+kg)/2τ)*τceil((b+kg)/2τ)τ。本文设计的CSPOSANet可以动态调整信道分配。

  3. 卷积后保持相同的通道数
      为了评估低端设备的计算成本,还必须考虑功耗,而影响功耗的最大因素是内存访问成本(MAC)。通常,卷积运算的MAC计算方法如下:
    在这里插入图片描述
      其中,h、w、Cin、Cout和K分别表示特征映射的高度和宽度、输入和输出的通道数以及卷积滤波器的数量。通过计算几何不等式,可以得出 Cin=CoutC_{in}=C_{out}Cin=Cout时的MAC最小。

  4. 最小化卷积输入/输出(CIO)
    在这里插入图片描述
      CIO是一个可以测量DRAM IO状态的指示器。表5列出了OSA、CSP和本文设计的CSPOSANet的CIO。 当kg>b/2时,提出的的CSPOSANet可以获得最佳CIO。

6.2.3 高端GPU扩展的大型模型

  由于我们希望在放大CNN模型后提高精度的同时并保持实时推理速度,因此在执行复合缩放时,必须在目标检测器的许多缩放因子中找到最佳组合。通常,可以调整目标探测器input、backbone和neck的比例因子。表6总结了可调整的缩放因子。
在这里插入图片描述
  图像分类和目标检测的最大区别在于,前者只需要识别图像中最大占比的类别,而后者需要预测图像中每个目标的位置和大小。在一阶段目标检测器中,每个位置对应的特征向量用于预测该位置上的目标类别和大小。更好地预测物体大小的能力基本上取决于特征向量的感受野。在CNN架构中,与感受野最直接相关的是stage,而特征金字塔网络(FPN)架构告诉我们,更多的stage更适合预测大型物体。在表7中,说明了感受野和几个参数之间的关系。
在这里插入图片描述
  从表7可以看出,宽度缩放可以独立操作。当输入图像尺寸增大时,如果想要对大型目标有更好的预测效果,就必须增加网络的深度或stage数。在表7中列出的参数中,{sizeinputsize^{input}sizeinput,#stage}的组合效果最好。 因此,在执行缩放时,首先对size^input、#stage执行复合缩放,然后根据实时要求,分别对深度和宽度执行缩放。

6.3 Scaled-YOLOv4

  在本节中,讲解为普通GPU、低端GPU和高端GPU设计可缩放的YOLOv4。

6.3.1 SCP-ized YOLOv4

  YOLOv4是为通用GPU上的实时目标检测而设计的。在本小节中,重新设计了YOLOv4得到YOLOv 4 CSP,以获得最佳速度/精度权衡。

  1. Backbone
      在CSPDarknet53的设计中,跨阶段过程的下采样卷积计算不包括在残差块中。因此,可以推断出每个CSPDarknet阶段的计算量为whb2(9/4+3/4+5k/2)whb^{2}(9/4+3/4+5k/2)whb2(9/4+3/4+5k/2)。从上面推导的公式中,可以知道只有当满足k>1时,CSPDarknet stage才比Darknet stage有更好的计算优势。CSPDarknet53中每个stage的残差层数量分别为1-2-8-8-4。为了获得更好的速度/精度权衡,将第一个CSP stage转换为原始的Darknet残差层。

  2. Neck
      为了有效地减少计算量,在YOLOv4中CSP化了PAN架构。PAN的结构如图2(a)所示。它主要整合来自不同特征金字塔的特征,然后通过两组反向Darknet残差层,没有shortcut连接。CSP化之后,新的结构如图2(b)所示,这个新的更新有效地减少了40%的计算量。
    在这里插入图片描述

  3. SPP
      SPP模块最初插入neck第一个计算列表组的中间位置。因此,本文还将SPP模块插入到CSPPAN第一个计算列表组的中间位置

6.3.2 YOLOv4-tiny

  YOLOv4 tiny是为低端GPU设备设计的,设计遵循<低端设备可缩放的微型模型>节中提到的原则。
在这里插入图片描述

  本文使用带有PCB架构的CSPOSANet来构成YOLOv4的Backbone。设置g=b/2g=b/2g=b/2作为增长率,并在最后使其增长到b/2+kg=2bb/2+kg=2bb/2+kg=2b。通过计算,得出k=3k=3k=3,其结构如图3所示。对于每个阶段和neck部分的通道数,遵循YOLOv3-tiny的设计规则。

6.3.3 YOLOv4-large

在这里插入图片描述
  YOLOv4 large是为云GPU设计的,主要目的是实现高精度的目标检测。设计了一个完全CSP化的YOLOv4-P5,并将其扩展到YOLOv4-P6和YOLOv4-P7

  图4展示了YOLOv4-P5、YOLOv 4P6和YOLOv-4-P7的结构。在sizeinputsize^{input}sizeinput、#stage上执行复合缩放,将每个阶段的深度刻度设置为2dsi2^{dsi}2dsi,ds为[1,3,15,15,7,7,7]ds为[1,3,15,15,7,7,7]ds[1,3,15,15,7,7,7]。最后,进一步使用推理时间作为约束来执行额外的宽度缩放。实验表明,当宽度缩放因子等于1时,YOLOv4-P6可以在30 FPS视频上达到实时性能。对于YOLOv4-P7,当宽度比例因子等于1.25时,它可以在16 FPS视频下实现实时性能。

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

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

相关文章

2019Linux系统教程189讲-08_基于LAMP架构部署商城系统

任务需求 1、任务具体要求 使用yum(dnf)工具一键部署LAMP环境 发布电商项目上线 ① 能够实现web界面注册会员账号 ② 能够实现web界面进行后台商品及会员的管理 2、项目选型 ㈠ PHPSHE商城系统概述 PHPSHE商城系统是将商品管理、品牌管理、规格管理、折扣管理、拼团管理、…

【Electron】常用小功能实现合集

一、前言 本篇主要介绍在electron项目开发过程中&#xff0c;一些实用小功能点的实现。比如设置开机自启动、只允许打开一个应用、设置electron项目基地为中文、获取当前的系统数据等等。 二、功能点 接下来咱们就逐一来说一说这些功能点是如何实现的。 1.设置应用开机自启…

MySQL索引结构B+树

数据结构图示例网站&#xff1a;Data Structure Visualization 索引数据结构&#xff1a; 二叉树 红黑树 Hash表 B-Tree B-Tree&#xff0c;特点&#xff1a;&#xff08;每个节点都存储key和data&#xff0c;叶子节点指针为null&#xff09; 1、叶节点具有相同的深度&#x…

y140.第八章 Servless和Knative从入门到精通 -- Serving及实践(四)

5.Serving及实践 5.1 Knative Serving工作模式 Serving的工作模式,上图从一个更大的全景图上了解Serving以及它与istio进行结合的时候它们的工作逻辑,Serving有4个关键组件,最关键的组件就是kservice,kservice本身会有两个非常重要的组件组成,一个叫做configuration也就是…

linux驱动_uart

linux uart驱动基础知识下面链接这篇文章写得很完备&#xff0c;我没必要再介绍了&#xff0c;就写目前项目的代码&#xff0c;方便以后重温。 Linux的tty架构及UART驱动详解 本项目驱动文件包括&#xff1a; /kernel/drivers/sstar/serial/ms_uart.c # 主要实现文件 /kerne…

HTML 头部

html 中 <head> 元素包含了所有的头部标签元素。在 <head> 元素中可以插入脚本(scripts)、样式文件(CSS)及各种 meta 信息。 一般来说&#xff0c;可以添加在头部区域的元素标签有&#xff1a;<title>、<style>、<meta>、<link>、<scri…

借助实例,轻松掌握 Makefile

实例1&#xff1a;hello world 编辑 Makefile all:echo "hello world"编译执行 $ make $ make all 结果输出 语法说明 echo 前面必须只有 TAB&#xff08;即你键盘上的 TAB键&#xff09;&#xff0c;且至少有一个 TAB&#xff0c;不能用空格代替。 实例2&#xff…

python相关知识的巩固-《python与量化投资从基础到实战》的python基础部分

python与量化投资从基础到实战数据格式numpypandasSciPy 插值 积分 优化 图像处理 特殊函数OLS 回归分析插值正态性检验凸优化matplotlib 绘图的始祖&#xff0c;适合绘制简单的统计图表。Seaborn 绘制美观的图表Scikit-Learn 机器学习常用的第三方模块决策树支持向量机朴素贝叶…

Flink SQL解析嵌套Json数据测试过程调研

一、背景 测试需求->流式计算->json嵌套类型数据&#xff0c;流式计算的流程是基于&#xff0c;将配置的任务&#xff0c;转化为flink sql&#xff0c;然后提交到集群上&#xff0c;执行计算任务的过程&#xff0c;所以&#xff0c;除基本功能测试以外&#xff0c;需要考…

前端单元测试---孤勇者级教程

《孤勇者》最近火爆的一塌糊涂&#xff0c;占领了小学生、甚至幼儿园&#xff0c;连我家2岁多的儿子尽然也会哼几句。虽然他以为这首歌是奥特曼的主题曲。 回到正题&#xff0c;现代前端项目的工程化、模板化日益壮大&#xff0c;各种类库框架层出不穷&#xff0c;整个行业俨然…

JavaScript日期库之date-fn.js

前言 用官网的话来说&#xff0c;date-fn.js 就是一个现代 JavaScript 日期实用程序库&#xff0c;date-fns 为在浏览器和 Node.js 中操作 JavaScript 日期提供了最全面、但最简单和一致的工具集。那实际用起来像它说的那么神奇呢&#xff0c;下面就一起来看看吧。 安装 安装的…

新的 WALLET 奖励倍数在 Ambire 上线,现在可以获得特殊福利!

Ambire 钱包奖励那些在以太坊上持续活跃的用户。 &#x1f4e3; 呼叫以太坊的铁杆粉丝&#xff01;我们专门为你们准备了最新的 $WALLET 奖励倍数来帮助你赚取更多的加密货币&#xff0c;前提是你已经保存好 Ambire 账户&#xff08;用于接收奖励&#xff09;。 听上去不错&…

Redis知识点总结-钊兵的笔记

简介 什么是Redis? redis是c语言开发的高性能的k-v形式的NoSQL型数据库&#xff0c;数据存储在内存中&#xff0c;诞生于意大利优点&#xff1a;存取速度快,官方称 读取速度会达到30万次每秒,写速度在10万次每秒,具体限制于硬件.缺点&#xff1a;对持久化支持不够良好,所以r…

flink的Standalone-HA模式安装

前言 本文使用flink1.14.5版本&#xff0c;介绍standalone-HA模式的安装。 此模式时高可用架构&#xff0c;采用zookeeper协调多个JobManager&#xff0c;保持每时每刻有一个运行中的JobManager,其余JobManager处理stand by状态。 因为涉及到运行过程中的状态数据的存储&…

2022年6月,海尔集团提前批算法岗面试题5道|含解析

问题1&#xff1a;介绍一下CE Loss公式 CE Loss就是交叉熵损失&#xff0c;损失函数公式如下&#xff1a; 二分类交叉熵 多分类交叉熵 问题2&#xff1a;介绍一下SVM算法 SVM算法就是支持向量机&#xff0c;是一种二分类模型&#xff0c;它的基本模型是定义在特征空间上的间…

Nginx越界读取缓存漏洞(CVE-2017-7529)

注意&#xff1a;仅用于技术讨论&#xff0c;切勿用于其他用途&#xff0c;一切后果与本人无关&#xff01;&#xff01;&#xff01; 理论知识 range The Range 是一个请求首部&#xff0c;告知服务器返回文件的哪一部分。在一个 Range 首部中&#xff0c;可以一次性请求多个…

[Python]多任务编程--线程

文章目录线程1. 线程的介绍2. 线程的概念3. 线程的作用多线程的使用1. 导入线程模块2. 线程类Thread参数说明3. 启动线程4. 获取当前线程5. 多线程完成多任务的代码6. 获取当前线程名线程执行带有参数的任务1. 线程执行带有参数的任务的介绍2. args参数的使用3. kwargs参数的使…

持续集成与自动化测试

持续集成与自动化测试 微服务化的基石——持续集成 某公司的主要业务是基础监控管理中台的建设。目前的项目还是采用单体模式&#xff0c;将所有功能打包在了一个包中&#xff0c;功能之间的耦合性高不容易进行拆分。未来的目标则是以微服务的架构来进行中台建设。 微服务架构…

一文速学-时间序列分析算法之移动平均模型(MA)详解+Python实例代码

目录 前言 一、移动平均模型(MA) 模型原理 自回归 移动平均模型 自相关系数 常用的 MA 模型的自相关系数 通用&#xff1a; MA(1)模型&#xff1a; MA(2)模型&#xff1a; 自协方差函数 二、Python案例实现 平稳时间序列建模步骤 平稳性检验 输出内容解析&#xff…

【C++】C++ 入门

文章目录一、第一个C程序二、命名空间1、什么是命名空间2、命名空间的定义3、命名空间的使用4、注意事项三、C的输入输出四、缺省参数1、缺省参数的概念2、缺省参数的分类五、函数重载1、函数重载的概念2、函数重载的原理 (重要)六、内联函数 (重要)1、内联函数的概念2、内联函…