【目标检测】EfficientDet

news2024/12/24 21:41:26

1、论文

题目:《EfficientDet: Scalable and Efficient Object Detection》
论文地址: https://arxiv.org/pdf/1911.09070.pdf
代码地址: https://github.com/bubbliiiing/efficientdet-pytorch

2、摘要

Google Brain团队在CVPR 2020上提出了新架构EfficientDet目标检测模型,结合EfficientNet和新提出的BiFPN,实现新的SOTA结果。EfficientDet更重要的贡献是将EfficientNet复合缩放的思路进行延伸, 把架构决策明确化为可扩展的框架, 并且为不同的应用场景提供了D0-D7种方案, 实现了速度和精度之间的均衡, 使用者无需复杂调参, 便能轻松应用于对象检测中的其他用例。EfficientDet-D7的性能更是非常的惊人,在326B FLOPS,参数量52M的情况下,COCO 2017 validation数据集上取得了51.0的mAP,和AmoebaNet+NAS-FPN相比,FLOPS仅为其十分之一的情况下取得了更好的结果。
在这里插入图片描述
贡献:

  • BiFPN:高效的双向跨尺度链接和加权特征融合
  • Compound scaling:可以同时扩大backbone、feature network、box/class 预测网络和分辨率
  • 基于前两个贡献,提出了EfficientDet

3、BiFPN

3.1 跨尺度链接

先来探讨几个特征网络
在这里插入图片描述
FPN
通过横向连接将自下而上的路径与自上而下的路径进行组合来实现高低层级特征的融合。
在这里插入图片描述
在这里插入图片描述
Fully-connected FPN
使用全连接层神经网络训练的特征网络。

NAS-FPN
使用神经架构搜索方法自动设计特征网络的架构,具有很高的准确率和延迟权衡。

Fully-connected FPN和NAS-FPN计算成本高,非常耗时、而且设备要求很高。

PANet
在这里插入图片描述
在FPN的自上而下的路径后,添加了自下而上的路径来缩短低层级信息传输到高层级的路径,防止路径过长导致低层特征丢失。并使用自适应功能池来捕获所有级别的信息, 将高层级丰富的语义特征与位于较低层的高分辨率特征图中的准确定位信息相结合。除此之外,它使用上采样层与原始Backbone中的特征图横向连接, 以产生语义丰富的特征,保留空间信息。

PANet实际上在准确性上强于NAS-Net, 因此在应用领域,更多人使用PANet,但是PANet的参数和计算量更多,它的计算成本也有点高。

Simplified PANet
在这里插入图片描述
为了实现优化的交叉链接,作者对PANet进行修改:如果一个节点只有一个输入边并且没有特征融合, 那么它对特征网络的融合贡献较小,这个节点就可以删除。

3.2 BiFPN(跨尺度链接)

在这里插入图片描述
在Simplified PANet基础上,(a)如果原始输入与输出节点处于同一级别,则在它们之间添加一条额外的连接路径,以便在不增加成本的情况下融合更多功能(BiFPN),这点其实跟skip connection很相似。(b)将每个双向(自上而下&自下而上)路径作为一个特征网络层,并且重复叠加相同的特征网络层多次,以实现更高层次的特征融合(BiFPN Layers)。具体重复几次是速度和精度之间的权衡,因此会在下面的Compound scaling复合缩放部分介绍,最终优化后的BiFPN如上图右图所示。

3.3 加权特征融合

多尺度特征融合旨在聚合不同分辨率的特征。尽管我们获得了优化的特征网络,但是我们同样面临一个和之前的FPN,PANET一样的困境,那就是特征融合阶段所有的节点输入权重都是均等的,我们做的仅仅是简单的相加。但实际上,由于不同特征的分辨率不同,这些特征对最终融合后输出特征的贡献通常是不相等的,我们需要对不同特征节点的输入有所偏重,然而手动分配权重繁琐且无法泛化,因此我们可以用神经网络去训练权重的分配,让网络自己学习最佳值。
作者分析了三种加权特征融合方式:

  • 无限融合Unbounded fusion:
    在这里插入图片描述
  • 基于Softmax的融合Softmax-based fusion:

在这里插入图片描述

  • 快速归一化融合Fast normalized fusion:
    在这里插入图片描述
    举例说明:
    在这里插入图片描述

3.4 构建BiFPN

在这里插入图片描述
(1)通过EfficientNet作为backbone提取每一层的特征图,两次下采样获得P6、P7,P3、P4、P5通过1×1卷积调整通道数,这样就得到了P1_in、P2_in、P3_in、P4_in、P5_in、P6_in、P7_in。
注意,在构建BiFPN的第一步时,需要构建两个P4_in和P5_in

(2)对P7_in进行上采样(为了使P7_in与P6_in的shape相等),上采样后与P6_in融合,然后再使用3×3卷积(为了消除上采样的混叠效应),得到P6_td;对P6_td进行上采样,上采样后与P5_in1融合,然后再使用3×3卷积,得到P5_td;对P5_td进行上采样,上采样后与P4_in1融合,然后再使用3×3卷积,得到P4_td;对P4_td进行上采样,上采样后与P3_in融合,然后再使用3×3卷积,得到P3_out。

(3)对P3_out进行下采样,下采样后与P4_td、P4_in2融合,然后再使用3×3卷积,得到P4_out;对P4_out进行下采样,下采样后与P5_td、P5_in2融合,然后再使用3×3卷积,得到P5_out;对P5_out进行下采样,下采样后与P6_td、P6_in融合,然后再使用3×3卷积,得到P6_out;对P6_out进行下采样,下采样后与P7_in融合,然后再使用3×3卷积,得到P7_out。

(4)将获得的P3_out、P4_out、P5_out、P6_out、P7_out作为P3_in、P4_in、P5_in、P6_in、P7_in,重复步骤2、3即可。
注意:此时P4_in1、P4_in2不需要分开,P5同理。对于EffiicientDet B0来讲,还需要重复2次。

4、复合缩放Compound Scaling

使用复合系数φ对网络宽度,深度和分辨率进行均匀缩放。其中α,β,γ是可以通过小网格搜索确定的常数。φ是用户指定的系数,控制用于模型缩放的资源数量。下图是不同模块的复合缩放的总结图:
在这里插入图片描述
通过改变公式a,b,c中的ϕ(0-6),作者得到了以下不同计算量和参数量的8个模型,如下表所示。由于ϕ≥7的模型过于庞大, 因此D7相对D6值只是增加了图像分辨率。
在这里插入图片描述

5、EfficientDet网络结构

下图展示了整个EfficientDet网络结构,很大程度遵循了one stage。使用ImageNet数据集的预训练网络EfficientNets作为backbone;提出的BiFPN作为特征网络,它从backbone的第3-7层获取特征(P3、P4、P5、P6、P7)并且重复使用自上而下和自下而上的双向特征融合;这些融合后的特征被送入了分类和边界框回归网络来生成目标类别和预测的boundingbox。分类和边界框回归网络权重在所有层的特征之间共享。
在这里插入图片描述

6、举例说明EfficienDet的实现思路

相关内容参考up主:Bubbliiiing的博客,以EfficientNet-B0和EfficientDet-D0为例,进行EfficientDet的解析。

6.1 预测部分

主干网络
EfficientDet采用EfficientNet作为主干特征提取网络。EfficientNet-B0对应EfficientDet-D0;EfficientNet-B1对应EfficientDet-D1;以此类推。由复合缩放表格可知,以EfficientNet-B0作为backbone时,EfficientDet-D0的输入图像大小是512×512×3。

BiFPN加强特征提取
根据3.3BiFPN的构建过程,我们获得了P3_out、P4_out、P5_out、P6_out、P7_out,为了和普通层区分我们称之为有效特征层。

从特征层获取预测结果
将获得五个有效特征层通过ClassNet+BoxNet就可以获得预测结果。对于EfficientDet-D0来说:

  • ClassNet采用3次64通道的卷积和1次num_anchors x num_classes的卷积。
    num_anchors指的是该特征层所拥有的先验框数量;num_classes指的是网络一共对多少种类的目标进行检测;num_anchors x num_classes的卷积用于预测该特征层上每一个网格上每一个预测框对应的种类。
  • BoxNet采用3次64通道的卷积和1次num_anchors x 4的卷积。
    num_anchors指的是该特征层所拥有的先验框数量;4指的是用来调整先验框的4个回归参数;num_anchors x 4的卷积用于预测该特征层上每一个网格上每一个先验框的变化情况。

后处理
得到最终的预测结果还要进行得分排序与非极大抑制筛选(这部分基本是所有目标检测通用的部分)

  • 取出每一类得分大于confidence_threshold的框和得分
  • 利用框的位置和得分进行非极大抑制
    注意:
    (1)每个特征层所用的ClassNet是同一个ClassNet,每个特征层所用的BoxNet是同一个BoxNet
    (2)Efficientdet解码过程就是将对应的先验框的左上角和右下角进行位置的调整,调整完的结果就是预测框的位置了。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.2 训练部分

(1)正负样本匹配:
把和真实框重合程度在0.5以上的作为正样本,在0.4以下的作为负样本,在0.4和0.5之间的作为忽略样本。
(2)计算损失Loss(Loss分为两个部分):

  • Smooth Loss:获取所有正标签的框的预测结果的回归loss
  • Focal Loss:获取所有未被忽略的种类的预测结果的交叉熵loss
    由于在EfficientDet的训练过程中,正负样本极其不平衡,即存在对应真实框的先验框可能只有若干个,但是不存在对应真实框的负样本却有上万个,这就会导致负样本的loss值极大,因此引入了Focal Loss进行正负样本的平衡。

7、效果

参考原论文或者博文:https://blog.csdn.net/williamhyin/article/details/108331279?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166028482916781667868960%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166028482916781667868960&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~hot_rank-2-108331279-null-null.142v40pc_search_integral,185v2control&utm_term=EfficientDet&spm=1018.2226.3001.4187

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

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

相关文章

Liunx 对函数库的理解

一、前言 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时…

PCB入门学习— CHIP类PCB封装的创建

目录 2.12 原理图PCB封装完整性的检查 3.1 CHIP类PCB封装的创建 学习目录 2.12 原理图PCB封装完整性的检查 然后点接受变更。 www.digikey.com搜索规格的网站。 3.1 CHIP类PCB封装的创建 放焊盘——确定大小——画丝印——确定原点EFC。 创建一个PCB元件库,Ct…

React(coderwhy)- 07(路由)

认识React-Router 认识前端路由 ◼ 路由其实是网络工程中的一个术语:  在架构一个网络时,非常重要的两个设备就是路由器和交换机。  当然,目前在我们生活中路由器也是越来越被大家所熟知,因为我们生活中都会用到路由器&#x…

红黑树:比AVL抽象、自由的、更广泛的近似平衡树

RBT与AVL树的比较 AVL:高度要求差不超过1红黑树:RBT要求最长路径不超过短路径的2倍,不需要像AVL一样太平衡,稍微自由,所以旋转较少。 AVL和RBT树性能比较: 插入同样的数据,AVL树旋转更多&…

本地生活配送行业黑马,带你一键读懂闪飞侠

电商的黄金十年已经过去,本地生活的黄金市场才刚刚开启,本地生活市场的增长对同城配送的影响得有多大?2020年的新冠疫情,爆发了同城即时配送的投资新机遇!即时配送用户已超5亿。而随着即时配送行业的广泛应用&#xff…

【 Vue3 + Vite + setup语法糖 + Pinia + VueRouter + Element Plus 第三篇】(持续更新中)

在第二篇我们主要学习了路径别名,配置.env环境变量,封装axios请求,以及使用api获取数据后渲染 Element Plus表格 本期需要掌握的知识如下: 封装列表模糊查询组件实现新增 编辑 删除 模糊查询 重置 功能实现表单校验功能实现组件间传值 下期…

Compose跨平台第一弹:体验Compose for Desktop

前言 Compose是Android官方提供的声明式UI开发框架,而Compose Multiplatform是由JetBrains 维护的,对于Android开发来说,个人认为学习Jetpack Compose是必须的,因为它会成为Android主流的开发模式,而compose-jb作为一…

TikTok三大流行趋势 钛动带你看懂TikTok

武汉瑞卡迪电子商务有限公司:近日,TikTok for Business发布了《Whats Next 2023 TikTok 全球流行趋势报告》,就2023年TikTok三大趋势主题进行了介绍。 钛动科技作为TikTok官方授权代理商,是TikTok生态服务最齐全的出海服务商,凭借出色的技术与服务能力,钛动斩获了T…

论 G1 收集器的架构和如何做到回收时间用户设定

目录G1 概念JVM的内存分代假设让用户设置应用的暂停时间G1 概念 G1其实是Garbage First的意思,它不是垃圾优先的意思,而是优先处理那些垃圾多的内存块的意思。 在大的理念上,它还是遵循JVM的内存分代假设。 JVM的内存分代假设 JVM的内存分代…

https如何加密解密?

背景 我们知道,https,在网络传输中,加密。具体来说是数据加密。//客户端和服务器,写数据的时候,都会加密。即1.客户端——》服务器 2.服务器——》客户端。 如何加密 解密? 加密解密 想要加密和解密&am…

【Mysql篇】数据库事务

目录 数据库事务数据库事务介绍 JDBC事务处理 事务的ACID属性 数据库的并发问题 数据库提供的4种事务隔离级别: 在MySql中设置隔离级别 数据库事务数据库事务介绍 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。 事务处理(…

Day1. Spring

1 课程描述IoC基础容器,主要涉及Bean对象的管理。AOP面向切面编程,主要涉及切面配置,声明式事务控制Spring整合Web环境。Web层解决方案-SpringMVC.1.1 IoC、DI和AOP思想的提出由于传统的JavaWeb出现的问题:问题1:层与层…

【问题记录】Process finished with exit code -1073740791 (0xC0000409) 注:LSTM股票预测案例中

目录 1. 问题来源2. 问题解决1. 问题来源 在跑一段 LSTM&神经网络 股票预测的代码时,遇到了下述报错,报错提示为: Process finished with exit code -1073740791 (0xC0000409) 报错截图为: 下面是整个报错的内容,这里我也截取下来了: H:\Python学习专用\深度学习\LS…

ECMAScript基础入门

JavaScript(浏览器端)ECMAScript(语法API)DOMBOM es6开始let代替var声明变量(初始化后可重新赋值),而const声明常量(初始化后不可重新赋值,否则会报错) con…

Java调用百度OCR接口实现文字识别

博主在项目开发中需要完成一个文字识别功能,由于之前有过使用百度云平台接口进行身份证识别的经历,因此这次也是自然而然的再次选择了百度AI平台,首先需要开通百度通用文字识别功能。 然后我们需要创建一个应用: 然后我们就可以…

TensorFlow 基础(一)张量

文章目录BasicsAbout shapesIndexingSingle-axis indexingMulti-axis indexingManipulating ShapesMore on dtypesReferencesimport tensorflow as tf import numpy as npBasics 张量是具有统一类型(dtype)的多维数组。它和 NumPy 中的 np.arrays 是非常…

C进阶_C语言_函数与指针_C语言指针进阶

上一篇博客http://t.csdn.cn/GYCiM 我们了解了指针相关知识,今天来了解函数和指针的关系。 目录 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 qsort 冒泡排序模拟实现qsort 函数指针 我们知道,数组指针是指向数组的指针。 int arr[…

Ribbon负载均衡服务调用

文章目录一. 什么是Ribbon二. Ribbon负载均衡三. Ribbon负载均衡策略四. Ribbon饥饿加载一. 什么是Ribbon PS: 本篇文章文作者学习笔记,技术参考价值不大。 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡的工具。 简单的说&#x…

Allegro174版本新功能介绍之改变报表字体大小

Allegro174版本新功能介绍之改变报表字体大小 Allegro在升级到174的时候,默认show element的字体是非常小的,类似下图,辨认起来非常困难 但是174是支持把字体调整的大一些的,具体操作如下 选择Setup选择User Preferences

SpringBoot整合java诊断工具Arthas

一、Arthas官方文档https://arthas.aliyun.com/doc/二、springBoot整合方式1、pom文件引入<dependency><groupId>com.taobao.arthas</groupId><artifactId>arthas-spring-boot-starter</artifactId><version>3.6.7</version> </d…