EfficientDet论文讲解

目录

EfficientDet

0、摘要

1、整体架构

1.1 BackBone:EfficientNet-B0

1.2 Neck:BiFPN特征加强提取网络

1.3 Head检测头

1.4  compound scaling

2、anchors先验框

3、loss组成

4、论文理解

5、参考资料


EfficientDet

  影响网络的性能(或者说规模)的三大因素:depth(layer的重复次数), width(特征图channels), resolution(特征图宽高)。

  EfficientDet是以EfficientNet作为BackBone提取特征,以BiFPN作为加强特征提取网络。依据复杂度不同分为8个版本,其中网络EfficientNetB0-B6,BiFPN重复次数不同,共同组成成EfficientNetD0-D7。

  下面结合原文,和一些博客资料,展开详细描述。

0、摘要

  为了提高map值,以往的模型都在堆参数(eg:ResNXt),map是提上去了,但是计算量产目忍睹;针对这个问题,本文提出efficientdet,确保牛逼性能(coco 上最高55.1%)的同时,参数量低得一批(模型参数量缩小4-9倍,参数量缩小13-42倍,原因是:借鉴mobileNet,到处使用deep wise conv,BiFPN删除了冗余节点)。创新之处在于:

  1. 提出简洁、快速的多尺度特征融合Neck:BiFPN;
  2. 提出了一种模型缩放方案:即:通过适当地修改:BackBone中特征图分辨率、channels、深度,Neck:BiFPN重复次数,Head(框、类别预测层)中的特征图的channels等多个参数,达到模型最优。(以上参数不是瞎J8乱设置的,也不是和NAS搜索架构那样自动搜索的,而是本文创造的一个公式,参考:1.4  compound scaling
    ,有章可循!)  (注:D0-D7不同版本对应不同的EfficientNetB0-B6,图像输入分辨率也不一样!)

1、整体架构

(注:上图中,变量后缀_U、_D分别表示上采样、下采样)

  EfficientDet是以EfficientNet为backBone提取特征,依据网络复杂度不同都有8个版本,如上图,网络主要包含:

  • BackBone(EfficientNet ):输出5个特征层到BiFPN
  • Neck(BiFPN Layer加强特征提取):处理BackBone输出的5个特征图,之后再输出5个特征层给Head。
  • Head(class&box prediction net):box预测 + class预测

1.1 BackBone:EfficientNet-B0

  对于主干网络,主要依赖MBConvBlock重复提取、压缩特征,如下图,然后将中高低特征层(P3、4、5;P6和P7都是由P5下采样得到的)拿出来,输入到BiFPN层。

  EfficientNet分为B0-B6等7个版本,每个本版中,特征图的分辨率、channels和卷积层的重复次数不同,具体EfficientDet如何使用的,待更新!

1.2 Neck:BiFPN特征加强提取网络

  BiFPN(加权的双向特征金字塔网络,权重矩阵可理解为注意力机制),这里拿FPN、PANet、NAS-FPN作为对比,以下是四种多尺度特征融合结构图:

  四种多尺度特征融合网络

  如下图,PANet精度最好,但是计算量最多(时间开销是BiFPN的1.31倍),所以选择基于PANet改进,得到BiFPN(改进如上图?(d)BiFPN),修改内容如下:

  1. 删除只有一个输入的节点(因为删除的节点只有一个输入,删了之后几乎不改变性能,并且能够降低计算量),如图(b)PANet;
  2. 增加额外的skip连接,加强特征提取;
  3. 重复BiFPN加强特征提取

 三种经典多尺度特征融合网络

   另外,在多尺度特征图融合的时候,我们知道,特征图融合之前,由于分辨率不一样,传统步骤:先将所有两组待融合(下文成为A、B)的特征图进行resize到一样的尺寸,然后直接作加法。

  但是,本文认为A、B的重要程度是一样的,所有给A、B都设定了权重tensor,加上权重后能提升效果。然而新的问题来了,直接加权重tensor可能导致特征值范围不受限制,进而导致训练不稳定,基于此,本文又利用softmax将权重tensor进行了归一化(使得所有权值取值为:[0, 1]),解决了训练不稳定问题。然而(尼玛的),实验表明,利用softmax归一化会导致网络慢得一批,于是,本文又提出了一种快速归一化方法,公式如下:

   相对于softmax,能够提速30%,相当残忍。如下图,给出BiFPN中第六层的计算公式和示意图:

                                     

  小结:BiFPN是基于PANet进行改进的,主要有以下几点:

  • 删除只有一个输入的节点,提升速度;
  • 引入权重tensor,提升精度
  • 改进softmax提升速度
  • 增加skip连接、重复BiFPN次数,进一步加强特征提取

  下面补充下网络解读:

  P6 P7是由P5下采样得到,在将特征输入到BiFPN之前,P3、P4、P5需要调整通道数一致。

  其中,每个MbconvBlock的结构如下图;Block的通用结构如下,其总体的设计思路是Inverted residuals结构和残差结构,在3x3或者5x5网络结构前利用1x1卷积升维,在3x3或者5x5网络结构后增加了一个关于通道的注意力机制,最后利用1x1卷积降维后增加一个大残差边(和MobileNetV2&3类似,都是google一家的东西)。

   在获得P3_out、P4_td、P4_in_2、P5_td、P5_in_2、P6_in、P6_td、P7_in之后,之后需要对P3_out进行下采样,下采样后与P4_td、P4_in_2堆叠获得P4_out;之后对P4_out进行下采样,下采样后与P5_td、P5_in_2进行堆叠获得P5_out;之后对P5_out进行下采样,下采样后与P6_in、P6_td进行堆叠获得P6_out;之后对P6_out进行下采样,下采样后与P7_in进行堆叠获得P7_out。

  将获得的P3_out、P4_out、P5_out、P6_out、P7_out作为P3_in、P4_in、P5_in、P6_in、P7_in,重复2、3步骤进行堆叠即可,对于Effiicientdet B0来讲,还需要重复2次,需要注意P4_in_1和P4_in_2此时不需要分开了,P5也是。

1.3 Head检测头

  通过第二部的重复运算,我们获得了P3_out, P4_out, P5_out, P6_out, P7_out。为了和普通特征层区分,我们称之为有效特征层,将这五个有效的特征层传输过ClassNet+BoxNet就可以获得预测结果了。对于Efficientdet-B0来讲,如下图:

ClassNet采用:

①   :3次64通道的卷积(深度可分离卷积,D0版本是3数)

②   :1次num_anchors x num_classes的卷积(调整通道数,获得最终预测结果;注:num_anchors x num_classes表示channel维度,这里num_anchors一般取值为9)

注:num_anchors指的是该特征层所拥有的先验框数量,num_classes指的是网络一共对多少类的目标进行检测。

BoxNet采用:

①   :3次64通道的卷积

②   :和1次num_anchors x 4的卷积,num_anchors指的是该特征层所拥有的先验框数量,4指的是先验框的调整情况。需要注意的是,每个特征层所用的ClassNet是同一个ClassNet;每个特征层所用的BoxNet是同一个BoxNet。其中:num_anchors x 4的卷积 用于预测 该特征层上 每一个网格点上 每一个先验框的变化情况。

注:num_anchors x num_classes的卷积 用于预测 该特征层上 每一个网格点上 每一个预测框对应的种类。

1.4  compound scaling

  由上文可知,依据不同的复杂度,网络可分为D0-D7等8个版本,这8个版本对应输入图像分辨率、BackBone、Neck、Head都不同,如下表,可以看到其对应搭配关系:

   在上述表格第一列,有一个超参数φ,第二列的输入图像分辨率与其关系式为:

  第三列为BackBone,这里不赘述。

  第四列为Neck中BiFPN的对应卷积核的channels、和BiFPN的重复次数:

  第五列为Head层重复次数,和φ关系为:

2、anchors先验框

每个点9个先验框,三个近似正方形,三个近似横着的矩形,三个近似竖着的矩形。其余的先验框的计算和YOLOV5没啥区别,唯一不同:这里用左上角、右下角两个点表示框的位置。

3、loss组成

loss的计算分为两个部分:
1、Smooth Loss:获取所有正标签的框的预测结果的回归loss。
2、Focal Loss:获取所有未被忽略的种类的预测结果的交叉熵loss。 

4、论文理解

  EfficientDet-D7,在coco上map达到55.1%,77M参数量,410BFloPs计算量。

5、参考资料

原论文:

链接:https://pan.baidu.com/s/1bm772PGnnRQhFKY7LV6rJQ 
提取码:6nl4

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

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

相关文章

Android Gldie复用只取之前decode过的缓存resource,Kotlin

Android Gldie复用只取之前decode过的缓存resource,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.life…

【Linux】服务器与磁盘补充知识,硬raid操作指南

服务器硬件 cpu 主板 内存 硬盘 网卡 电源 raid卡 风扇 远程管理卡 1.硬盘尺寸: 目前生产环境中主流的两种类型硬盘 3.5寸 和2.5寸硬盘 2.5寸硬盘可以通过使用硬盘托架后适用于3.5寸硬盘的服务器 但是3.5寸没法转换成2.5寸 2.如何在服务器上制作raid 华为服务器为例子做…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(一)

熟悉项目环境 1. 苍穹外卖项目介绍1.1 项目介绍1.2 技术选型 2. 开发环境搭建2.1 前端环境2.2 后端环境搭建2.3 Git版本控制2.4 nginx反向代理和负载均衡 3.登录功能4. Swagger4.1 介绍4.2 使用步骤4.3 常用注解 1. 苍穹外卖项目介绍 1.1 项目介绍 苍穹外卖是专门为餐饮企业&…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观,平面的东西。程序开发也好理解就是功能实现。而前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、做鼠…

rust闭包

rust闭包 参考 Rust有三个闭包trait:Fn、FnMut和FnOnce,编译器会根据闭包内代码的行为自动为闭包实现这些trait。 上面这段话超级重要!!! 对于不可变或移动捕获变量的闭包,编译器会实现Fn trait&#xff0…

三维模型几何坐标精度偏差应采用主要措施

三维模型几何坐标精度偏差应采用主要措施 降低倾斜摄影三维模型几何精度偏差是提高模型质量和准确性的关键任务。下面将浅谈降低倾斜摄影三维模型几何精度偏差应采用的主要措施。 1、倾斜角度选择:倾斜角度对于几何精度具有重要影响。选择适当的倾斜角度可以优化视…

项目管理之如何监控项目健康状态

项目管理是一个复杂且关键的过程,涉及到多个关键因素,包括项目名称、项目管理委员会成员、项目经理、项目生命周期的各个阶段以及资源泳道等。如何有效地监控项目的健康状态是确保项目成功的重要环节。本文将详细介绍项目管理全景图及其在风险识别中的应…

JAVA二叉搜索树(专门用来查找)

目录 二叉搜索树又叫二叉排序树,它具有以下特征 二次搜索树的效率 模拟最简二叉搜索树代码 代码片段分析 查找二叉搜索树数据: 如果我们用递归的方法查找数据有什么不一样? 插入数据 删除数据(难点) 二叉搜索树又叫二叉排序树,它具有以下特征…

C++ day3作业

1> 思维导图 2> 自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height), 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void s…

【EMD】1.初识经验模态分解EMD

/*** poject 经验模态分解及其衍生算法的研究及其在语音信号处理中的应用* author jUicE_g2R(qq:3406291309)* * language MATLAB/Python/C/C* EDA Base on matlabR2022b* editor Obsidian(黑曜石笔记软件)* * copyright 2023* …

LED点阵显示原理(取字模软件+Keil+Proteus)

前言 写这个的时候我还是有点生气的,因为发现完全按照书上面的步骤来,结果发现不理想,后面还是自己调试才解决了。-_-说多了都是泪,直接进入正文。 软件的操作还是参考我之前的博客。 LED数码管的静态显示与动态显示&#xff0…

nssm将exe应用封装成windows服务

一、简介 NSSM(Non-Sucking Service Manager)是一个用于在Windows操作系统上管理和运行应用程序作为服务的工具。它提供了一种简单的方法来将任意可执行文件转换为Windows服务,并提供了一些额外的功能和配置选项。 优点: 简单易…

ifream标签中的子页面,操作父页面的元素

问题描述&#xff1a;子页面内容发生变化时&#xff0c;导航栏不会跟切换 解决办法&#xff1a; window.parent.document.getElementById demo html1 <html> <head><meta charset"UTF-8"><!-- import CSS --><link rel"stylesh…

一站式解决方案:体验亚马逊轻量服务器/VPS的顶级服务与灵活性

文章目录 一、什么是轻量级服务器/VPS 二、服务器创建步骤 三、服务器连接客户端(私钥登录) 四、使用服务器搭建博客网站 五、个人浅解及总结 一、什么是轻量级服务器/VPS 亚马逊推出的轻量级服务器/VPS&#xff1a;是一种基于云计算技术的虚拟服务器解决方案。它允许用户…

Spring Boot 整合SpringSecurity和JWT和Redis实现统一鉴权认证

&#x1f4d1;前言 本文主要讲了Spring Security文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&#xff1a;努力…

XShelll-修改快捷键-xftp-修改编辑器

文章目录 1.XShelll-修改快捷键2.Xftp-修改文本编辑器3.总结 1.XShelll-修改快捷键 工具>选项 鼠标键盘&#xff0c;右键编辑&#xff0c;新建快捷键。 复制粘贴改成shiftc,shiftv。更习惯一些。 2.Xftp-修改文本编辑器 xftp修改服务器文件默认的编辑器&#xff0c;是记…

重新思考边缘负载均衡

本文介绍了Netflix在基于轮询的负载均衡的基础上&#xff0c;集成了包括服务器使用率在内的多因素指标&#xff0c;并对冷启动服务器进行了特殊处理&#xff0c;从而优化了负载均衡逻辑&#xff0c;提升了整体业务性能。原文: Rethinking Netflix’s Edge Load Balancing[1] 我…

2023李宏毅机器学习HW05样例代码中文注释版

这里只是 2023 李宏毅机器学习 HW05 样例代码的中文注释版的分享&#xff0c;下面的内容绝大部分是样例代码&#xff0c;补充了小部分函数的功能解释&#xff0c;没有做函数功能上的修改&#xff0c;是 Simple baseline 版本。 notebook 代码下载: [EN] [ZH] 文章目录 作业描述…

lazarus:数据集快速导出为excel、csv、sql及其他多种格式

lazarus被成为快速开发工具&#xff0c;为什么说“快速”&#xff0c;重要的一点是&#xff0c;很多工具是现成的&#xff0c;可以拿来直接就用。比如数据导出&#xff0c;如果需要把数据集导出为excel格式文件&#xff0c;写代码可能需要很多时间。lazarus就不用了&#xff0c…

微信小程序文件上传wx.uploadFile

网页版查看了一下负载要求是这样 wx.uploadFile({url: ${wx.getStorageSync(apiUrl)}//sysFileInfo/upload?token${wx.getStorageSync(token)}, // 仅为示例&#xff0c;非真实的接口地址filePath: files[0].url,name: file,formData: {secretFlag: Y },success: (res) > {…