目标检测-One Stage-EfficientDet

news2024/9/23 21:19:52

文章目录

  • 前言
  • 一、EfficientNet
    • EfficientNet-B0 baseline
      • MBConv
    • 参数优化
    • EfficientNet B0-B7 参数
  • 二、EfficientDet
    • BiFPN
    • 复合缩放方法
  • 总结


前言

EfficientDet是google在2019年11月发表的一个目标检测算法系列,其提出的背景是:之前很多研究致力于开发更高效的目标检测架构,如one-stage、anchor-free或压缩现有模型,尽管这些方法往往能获得更好的效率,但它们通常会牺牲准确性。并且这些研究并未关注工业应用上的资源约束问题。

EfficientDet精度与速度全面领先于YOLO V3, MaskRCNN, RentinaNet, NAS-FPN这些常见目标检测模型,其backbone基于EfficientNet

ps:EfficientNet提出的背景

  • 一些著名的卷积网络中(如AlexNet,VGG,ResNet等),其网络参数、层数、输入大小都是固定的,对为什么这样设置尚未有完备的解释。
  • 在实际工程应用中,很多时候可能需要对网络进行一定程度的修改,但如何修改,修改哪些地方尚未有明确指导,在之前的一些论文中,基本都是通过改变输入分辨率resolution,网络的深度depth以及Channels的宽度width(即通道数)这3个参数中的一个来提升网络的性能,而EfficientNet同时探索上述三个参数的影响。
    在这里插入图片描述

提示:以下是本篇文章正文内容,下面内容可供参考

一、EfficientNet

EfficientNet-B0 baseline

EfficientNet一共有B0-B7个版本,EfficientNet-B0的网络框架如下图(B1-B7就是在B0的基础上修改Resolution,Depth以及Width)
在这里插入图片描述
在这里插入图片描述

上图中可以看出EfficientNet总共分成了9段(Stage):

  • Stage1就是一个卷积核大小为3x3步距为2的普通卷积层(包含BN和激活函数Swish)
  • Stage2~Stage8都是在重复堆叠MBConv结构(最后一列的Layers表示该Stage重复MBConv结构多少次)
  • Stage9由一个普通的1x1的卷积层(包含BN和激活函数Swish)一个平均池化层和一个全连接层组成。

ps: 表格中每个MBConv后会跟一个数字1或6,这里的1或6就是倍率因子n即MBConv中第一个1x1的卷积层会将输入特征矩阵的channels扩充为n倍,其中k3x3或k5x5表示MBConv中逐通道卷积层DW(Depthwise Conv)所采用的卷积核大小。Channels表示通过该Stage后输出特征矩阵的Channel

ps:逐通道卷积层DW(Depthwise Conv)是深度可分离卷积的组成部分,深度可分离卷积(depthwise separable convolution)由逐通道卷积depthwise(DW)和逐点卷积pointwise(PW)两个部分组成,相比于普通卷积,通过将乘法运算变为加法运算, 在能够保证同样卷积精度的情况下, 极大的降低计算成本。

  • 如下图所示,参数量由5 * 5 * 3 * 256=19,200极显著下降至5 * 5 * 1 + 1 * 1 * 3 * 256=793
    在这里插入图片描述

MBConv

MBConv结构如下图,包含一个用于升维的1x1的普通卷积层(包含BN和Swish激活),逐通道卷积层DW(包含BN和Swish激活),压缩和激励模块SE,一个用于降维的1x1的普通卷积层(包含BN)以及Dropout层
在这里插入图片描述

ps:压缩和激励(Squeeze-and-Excitation, SE)模块用于发掘并刻画feature map中channel-wise feature间的关系,并显式地进行特征重标定,以提升有用的特征、抑制作用不太大的特征。SE block以微小的计算成本为现有的先进的神经网络架构带来了性能改进。SE Nets在ILSVRC 2017竞赛中赢得了第一名,并将top-5错误率显著减少到2.251%,相对2016年的第一名取得了∼25%的改进。

SE模块由一个全局平均池化,两个全连接层组成。第一个全连接层的节点个数是输入该MBConv特征矩阵channels的 1 4 \frac{1}{4} 41 ,且使用Swish激活函数。第二个全连接层的节点个数等于Depthwise Conv层输出的特征矩阵channels,且使用Sigmoid激活函数。
在这里插入图片描述
MBConv的具体网络拓扑图如下:
在这里插入图片描述

参数优化

根据以往的经验:

  • 增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。
  • 增加网络的width能够获得更高细粒度的特征并且也更容易训练,但对于width很大而深度较浅的网络往往很难学习到更深层次的特征
  • 增加输入网络的图像分辨率resolution能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量

论文的目标是:给定资源约束(计算力FLOPS、内存Memory)下,最大限度地提高模型精度(其实就是通过搜索手段进行参数优化 ( d , w , r ) (d,w,r) (d,w,r)),公式如下:

ps:

  • 要优化参数首先要有一个baseline模型,论文通过神经结构搜索(Neural Architecture Search,NAS)创建了EffcientNet B0 baseline模型,当然也可使用其他现有的模型进行,如MobileNets、ResNets等。
  • 关于NAS,是一种神经架构搜索技术,对比传统网络的超参搜索,NAS主要的区别是深度网络结构搜索的重点在于如何拼接不同的结构模块和操作,以及如何降低模型评估的计算消耗,具体相关原理参见原文及相关论文,这里不做具体描述。

在这里插入图片描述

其中,

  • ⊙ i = 1... s ⊙_{i=1...s} i=1...s表示连乘运算
  • d用来缩放深度 L ^ i \widehat{L}_i L i,i对应的是上表中的stage
  • r用来缩放分辨率即影响 H ^ i \widehat{H}_i H i W ^ i \widehat{W}_i W i
  • w就是用来缩放特征矩阵的channel即 C ^ i \widehat{C}_i C i

ps:

  • FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
  • FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

接着作者又提出了一个复合缩放方法 ( compound scaling method) ,在这个方法中使用了一个混合因子 ϕ \phi ϕ去统一的缩放width,depth,resolution参数,具体的公式如下:
在这里插入图片描述
因此 ( d , w , r ) (d,w,r) (d,w,r)搜索问题变为 α , β , γ \alpha, \beta, \gamma α,β,γ搜索问题,具体步骤如下:

  1. 固定 ϕ = 1 \phi=1 ϕ=1,并基于上面给出的公式(2)和(3)进行grid search,得到EfficientNet-B0最佳参数为 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15
  2. 固定 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15,在EfficientNet-B0的基础上使用不同的 ϕ \phi ϕ分别得到EfficientNetB-1至EfficientNetB-7

ps:因为考虑到提升网络的深度是最有效的策略,因此将其他两个维度的缩放进行了平方操作。当一个网络缩放完毕后,它的FLOPS提升的倍数为 α ⋅ β 2 ⋅ γ 2 \alpha \cdot \beta^2 \cdot \gamma^2 αβ2γ2,约束 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha \cdot \beta^2 \cdot \gamma^2 ≈ 2 αβ2γ22,则将FLOPS的增长范围控制到了 2 ϕ 2^\phi 2ϕ

EfficientNet B0-B7 参数

通过搜索得到的 EfficientNet B0-B7 的参数如下:
在这里插入图片描述
模型精度和速度对比如下:
在这里插入图片描述

二、EfficientDet

基于one-stage的检测模型,从骨架网络、特征融合和 class/box 网络的角度,提出两种创新方法:

  1. 高效的多尺度特征融合----之前的工作都是直接将不同尺度的特征相加,不做任何区分;但是作者发现,不同的尺度的特征对融合后的输出特征有着不同的贡献,因此作者提出了BiFPN,通过学习不同尺度特征的权重来表明不同尺度特征的重要性,同时重复使用自上而下和自下而上两种多尺度特征融合方式。

  2. 模型缩放----之前的工作为了提升准确率都是选择使用大的骨架网络或者大的输入图像,但是作者发现放大特征融合网络或 box/class 预测网络也很重要。受到EfficientNet的启发,作者提出一种复合缩放方法,同时缩放backbone的分辨率/深度/宽、特征融合网络、box/class 预测网络。

BiFPN

加权双向特征网络BiFPN(Bidirectional Feature network)是EfficientDet的核心, 全称是"Bidirectional Feature Pyramid Network ", 可轻松快速地进行多尺度特征融合

  • 关于FPN网络我们已经不陌生,在One Stage(YOLOv3)和Two Stage(Mask RCNN)网络中都有应用,主要用于进行从上自下的进行特征融合,从而解决不同场景图像中对象尺度差异很大的问题。

  • 但FPN在实际应用中会面临高层级特征和较低层级特征之间的路径较长的问题,如在大型Backbone 如Resnet-152中,FPN低层信息经过多层网络到高层的时候,由于路径过长导致部分低层级特征丢失,然而低层级的特征对于大型实例的识别其实是很有用的, 此时需要一个能缩短低层级信息到高层级通过路径的方法,因此出现了PANet,在FPN之上添加了一个额外的自下而上的特征融合。

  • 同时Google提出了一种类似的神经架构搜索方法 NAS-FPN,用于创建多尺度特征的融合路径,尽管NAS-FPN获得了更好的性能,但它在搜索过程中需要数千个GPU小时,并且由此产生的特征网络是不规则的,因此难以解释和使用。

Efficient的作者在研究中发现:

  1. 如果一个节点只有一个输入边并且没有特征融合, 那么它对特征网络的融合贡献较小, 这个节点可以删除(Simplified PANet)。
  2. 如果原始输入与输出节点处于同一级别, 则在它们之间添加一条额外的连接路径, 以便在不增加成本的情况下融合更多功能(BiFPN),这点其实跟skip connection很相似。
  3. 将每个双向(自上而下&自下而上)路径作为一个特征网络层, 并且重复叠加相同的特征网络层多次, 以实现更高层次的特征融合(BiFPN Layers)。 具体重复几次是速度和精度之间的权衡, 因此会在下面的复合缩放部分介绍。
    在这里插入图片描述

复合缩放方法

backbone
在EfficientNet中已经给出了backbone的复合缩放方法,EfficientDet使用Image-Net预训练的EfficientNet作为backbone网络

特征融合网络
像在EfficientNet中一样以指数方式增长BiFPN宽度(channels), 但是由于深度需要四舍五入为小整数, 因此线性增加了深度(layers),具体而言,对值{1.2、1.25、1.3、1.35、1.4、1.45}的列表执行网格搜索,并选择最佳值1.35作为BiFPN宽度缩放因子。形式上,BiFPN的宽度和深度用以下方程进行缩放:
在这里插入图片描述
Box/Class 预测网络
宽度保持与BiFPN相同, 但深度(layers)线性增加
在这里插入图片描述
输入图像分辨率
由于BiFPN中使用了特征级别3–7, 因此输入分辨率必须可除以2⁷= 128, 因此我们使用以下公式线性提高分辨率
在这里插入图片描述
复合缩放的总结图如下所示:
在这里插入图片描述

通过改变 ϕ \phi ϕ(0-6), 作者得到了以下不同计算量和参数量的8个模型, 由于 ϕ \phi ϕ≥7的模型过于庞大, 因此D7相对D6值增加了图像分辨率.
在这里插入图片描述


总结

EfficientDet分别包含了从D0~D7总共八个算法,对于不同的设备限制,能给到SOTA的结果,在广泛的资源约束下始终比现有技术获得更好的效率。特别是在单模型和单尺度的情况下,EfficientDet-D7在COCO test-dev上达到了最先进的52.2AP,具有52M参数和325B FLOPs,相比与之前的算法,参数量缩小了4到9倍,FLOPs缩小了13到42倍。

在这里插入图片描述

EfficientDet使用神经网络搜索最优架构的优势, 同样使它的不足. 因为EfficientDet的预训练成本是巨大的, EfficientDet的作者使用 32 个V3 TPU 在batch_size为128的数据集上训练, 才达到各项SOTA的成绩. 而普通人拥有的硬件资源是有限的, 从0开始训练完整模型需要的时间和硬件成本过高。如果用时间换成本的方式可以接近但是很难达到相似的精度。

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

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

相关文章

【面试高频算法解析】算法练习5 深度优先搜索

前言 本专栏旨在通过分类学习算法,使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目,帮助您深度理解每种算法,避免出现刷了很多算法题,还是一知半解的状态 专栏导航 二分查找回溯(Backtracking&…

华为bgp之多级RR及团体属性、正则表达式多种应用案例

1、实现总部和分部的oa、财务网段互通 2、分部之间oa也能互通 3、分部之间不能互通财务 主要用到bgp自定义团体属性、一级二级RR配置、bgp正则表达式匹配规则 R1 router id 1.1.1.1 //配全局地址池,又可以给ospf用也可以给bgp用 interface GigabitEthernet0/0/0 …

紫光展锐5G扬帆出海 | 欧洲积极拥抱更多5G选择

和我国一样,欧洲不少国家也在2019年进入5G商用元年:英国在2019年5月推出了5G商用服务,该国最大的移动运营商EE(Everything Everywhere)最先商用5G;德国在2019年年中推出5G商用服务,德国电信、沃达丰和 Telefonica是首批…

【AI视野·今日NLP 自然语言处理论文速览 第六十七期】Mon, 1 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 1 Jan 2024 Totally 42 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Principled Gradient-based Markov Chain Monte Carlo for Text Generation Authors Li Du, Afra Amini, Lucas…

php-ffmpeg运用 合并视频,转码视频

下载 官网 windows 版本 添加环境变量 合并视频 public function test_that_true_is_true(): void{ini_set(memory_limit,-1); //没有内存限制set_time_limit(0);//不限制执行时间//ffmpeg配置$path [ffmpeg.binaries > D:\soft\ffmpeg\bin/ffmpeg.exe,ffprobe.binaries…

面试算法98:路径的数目

题目 一个机器人从mn的格子的左上角出发,它每步要么向下要么向右,直到抵达格子的右下角。请计算机器人从左上角到达右下角的路径的数目。例如,如果格子的大小是33,那么机器人从左上角到达右下角有6条符合条件的不同路径。 分析…

排序算法——关于快速排序的详解

目录 1.基本思想 2.基本原理 2.1划分思想 2.2排序过程 (1)选择基准值 (2)分割过程(Partition) (3)递归排序 (4)合并过程 2.3具体实例 2.4实现代码 2.5关键要…

配置文件的创建和部署

配置描述文件(Configuration Profiles)的格式为xml,其提供了一个非常容易的方式去给电脑、移动设备或用户定义一些设置或限制,你可以使用Jamf Pro去创建这样的配置文件。 (配置文件的负载) 有关配置文件的配…

HarmonyOS 开发基础(五)Button

HarmonyOS 开发基础(五)Button Entry Component struct Index {build() {Row() {Column() {// Button:ArkUI 的基础组件 按钮组件// label 参数:文字型按钮Button(我是按钮)// width:属性方法,设置组件的宽…

git本地创建分支并推送到远程关联起来

git本地创建分支并推送到远程关联起来 git本地基于当前分支创建个新的分支,然后推送到远程,并把本地新创建的分支和远程分支关联 在当前分支下,新建分支 git checkout -b test推送到远程仓库 git push origin test将本地分支和远程分支关联…

推荐几个免费的HTTP接口Mock网站和工具

在前后端分离开发架构下,经常遇到调用后端数据API接口进行测试、集成、联调等需求,比如: (1)前端开发人员很快开发完成了UI界面,但后端开发人员的API接口还没有完成,不能进行前后端数据接口对接…

Vue电商后端管理API接口测试

引言 最近有人在学习接口自动化测试时没有接口练手,其实接口的话,要么找第三方提供的,要么自己开发。第三方在线API需要认证,并且普通的话每天调用次数有一定的限制。自己开发的话,只要不停电,想怎么用就怎…

百度吉利合作造车生态,极越“智价比”能否带来科技平权?

文|AUTO芯球 作者|文泽 临近年关,车企迎来“降价潮”。为了获得更好的年终成绩单,包括上汽大众、比亚迪、长安汽车、智己汽车等20多家品牌推出了购车补贴、限时优惠等措施,优惠幅度最高近20万元。 在此背景下,新车发布一个多月…

读算法霸权笔记12_数据科学

1. 公平与公正 1.1. 公平大多数时候只是副产品 1.2. 由贪婪或偏见导致的不公正一直发生在我们身边 1.2.1. 如果承认法律面前人人平等,或者作为选民的大众应该被平等对待,我们就不能允许模型把我们分为不同的群体进行区别对待 1.3. 对于数学模型来说&…

常用python代码大全-使用Python的requests模块发送HTTP请求

要使用Python的requests模块发送HTTP请求,你需要首先确保已经安装了这个模块。如果没有安装,可以通过以下命令进行安装: pip install requests一旦安装完成,你可以按照以下步骤发送HTTP请求: 1.导入requests模块&…

61.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏红字公告功能的逆向分析

内容来源于:易道云信息技术研究院VIP课 上一节内容:游戏公告功能的逆向分析与测试-CSDN博客 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:63e04cc40f649d10ba2f4f…

Qt qDebug基本的使用方法详解

目录 qDebug基本用法输出字符串输出变量值1输出变量值2支持流式输出输出十六进制去除双引号和空格调试输出级别 自定义类型输出自定义日志信息的输出格式示例占位符设置环境变量 关闭QDebug输出Qt工程VS工程 在VS工程中如何查看qDebug输出 DebugView下载 qDebug基本用法 qDebug…

初识大数据,一文掌握大数据必备知识文集(12)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

一文详解动态 Schema

在数据库中,Schema 常有,而动态 Schema 不常有。 例如,SQL 数据库有预定义的 Schema,但这些 Schema 通常都不能修改,用户只有在创建时才能定义 Schema。Schema 的作用是告诉数据库使用者所希望的表结构,确保…

C++ OpenGL 3D GameTutorial 1:Making the window with win32 API学习笔记

视频地址https://www.youtube.com/watch?vjHcz22MDPeE&listPLv8DnRaQOs5-MR-zbP1QUdq5FL0FWqVzg 一、入口函数 首先看入口函数main代码&#xff1a; #include<OGL3D/Game/OGame.h>int main() {OGame game;game.Run();return 0; } 这里交代个关于C语法的问题&#x…