热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【目标检测】EfficientDet

1、论文题目:《EfficientDet:ScalableandEfficientObjectDetection》论文地址:https:arxiv.o


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







推荐阅读
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • R语言中向量(Vector)数据类型的元素索引与访问:利用中括号[]和赋值操作符在向量末尾追加数据以扩展其长度
    在R语言中,向量(Vector)数据类型的元素可以通过中括号 `[]` 进行索引和访问。此外,利用中括号和赋值操作符,可以在向量的末尾追加新数据,从而动态地扩展向量的长度。这种方法不仅简洁高效,还能灵活地管理向量中的数据。 ... [详细]
author-avatar
拉着潜艇的鱼_396
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有