Google出品,EfficientNet在目标检测达到最新SOTA | CVPR 2020
作者 | tanmingxing,rpang,qvl
来源 | 晓飞的算法工程笔记()
介绍
目前目标检测领域,高精度的模型通常需要很大的参数量和计算量,而轻量级的网络则一般都会牺牲精度。因此,论文希望建立一个可伸缩的高精度且高性能的检测框架。论文基于one-stage的检测网络范式,进行了多种主干网络、特征融合和class/box预测的结构尝试,主要面临两个挑战:
高效多尺度特征融合(efficient multi-scale feature fusion)
FPN是目前最广泛的多尺度融合方法,最近也有PANet和NAS-FPN一类跨尺度特征融合方法。对于融合不同的特征,最初的方法都只是简单地直接相加,然而由于不同的特征是不同的分辨率,对融合输出特征的共享应该是不相等的。为了解决这一问题,论文提出简单但高效加权的bi-directional feature pyramid network(BiFPN),该方法使用可学习的权重来学习不同特征的重要性,同时反复地进行top-down和bottom-up的多尺度融合
模型缩放(model scaling)
论文认为除了缩放主干网络和输入图片的分辨率,特征网络(feature network)和box/class预测网络的缩放对准确率和性能也是很重要的。作者借鉴EfficientNet,提出针对检测网络的混合缩放方法(compound scaling method),同时对主干网络,特征网络和box/class预测网络的分辨率/深度/宽度进行缩放
最后,论文将EfficientNet作为主干,结合BiFPN和混合缩放,提出新的检测系列EfficientDet,精度高且轻量,COCO上的结果如图1,论文的贡献有以下3点:
提出BiFPN,一个加权的双向特征网络,能够用以更快的多特征融合
提出新混合缩放方法,能同时规则地缩放主干网络、特征网络、box/class网络和分辨率
基于BiFPN和混合缩放,提出新的检测器系列EfficientDet,能够在准确率达到高精度的情况下结构更加精简
BiFPN
Problem Formulation
定义多尺寸特征,论文的目标是找到变化函数来高效融合不同的特征,输出新特征。具体地,图2a展示了top-down FPN网络结构,一般FPN只有一层,这里应该为了对比写了repeat形式。FPN获取3-7层的输入,代表一个分辨率为的特征层
top-down FPN操作如上所示,为上采用或下采样来对齐分辨率,通常是特征处理的卷积操作
Cross-Scale Connections
top-down FPN受限于单向的信息流,为了解决这一问题,PANet(图2b)增加了额外的bottom-up路径的融合网络,NAS_FPN(图2c)使用神经架构搜索来获取更好的跨尺度特征网络的拓扑结构,但需要大量资源进行搜索。其中准确率最高的是PANet,但是其需要太多的参数和计算量,为了提高性能,论文对跨尺寸连接做了几点改进:
去除所有单输入的节点,原因很简单,如果节点只有单输入而不包含特征融合,对特征融合的贡献是不够,这样也算得出一个简化的PANet,如图2e
将同层的输入直接连接到输出节点,融合更多的节点而不带来过多的消耗,得出图2f结构
不像PANet只包含一个top-down和bottom-up路径,论文将此结构作为层,并且重复多次从而融合出更高维度的特征,后面会细讲
Weighted Feature Fusion
大多的特征融合方法都将输入特征平等对待,而论文观察到不同分辨率的输入对融合输出的特征的贡献应该是不同的。为了解决这一问题,论文提出在融合时对输入特征添加额外的权重预测,主要有以下方法:
Unbounded fusion
,是可学习的权重,可以是标量(per-feature),也可以是向量(per-channel),或者是多维tensor(per-pixel)。论文发现标量形式已经足够提高准确率,且不增加计算量,但是由于标量是无限制的,容易造成训练不稳定,因此,要对其进行归一化限制
Softmax-based fusion
,利用softmax来归一化所有的权重,但softmax操作会导致GPU性能的下降,后面会详细说明
Fast normalized fusion
,Relu保证,保证数值稳定。这样,归一化的权重也落在,由于没有softmax操作,效率更高,大约加速30%
BiFPN集合了双向跨尺寸的连接和快速归一化融合,level 6的融合操作如上,为top-down路径的中间特征,是bottom-up路径的输出特征,其它层的特征也是类似的构造方法。为了进一步提高效率,论文特征融合时采用depthwise spearable convolution,并在每个卷积后面添加batch normalization和activation
EfficientDet
EfficientDet Architecture
EfficientDet的结构如图3所示,基于one-stage检测器的范式,将ImageNet-pretrained的EfficientNet作为主干,BiFPN将主干的3-7层特征作为输入,然后重复进行top-down和bottom-up的双向特征融合,所有层共享class和box网络
Compound Scaling
之前检测算法的缩放都是针对单一维度的,从EfficientNet得到启发,论文提出检测网络的新混合缩放方法,该方法使用混合因子来同时缩放主干网络的宽度和深度、BiFPN网络、class/box网络和分辨率。由于缩放的维度过多,EfficientNet使用的网格搜索效率太慢,论文改用heuristic-based的缩放方法来同时缩放网络的所有维度
Backbone network
EfficientDet重复使用EfficientNet的宽度和深度因子,EfficinetNet-B0至EfficientNet-B6
BiFPN network
论文以指数形式来缩放BiFPN宽度(#channels),而以线性形式增加深度(#layers),因为深度需要限制在较小的数字
Box/class prediction network
box/class预测网络的宽度固定与BiFPN的宽度一致,而用公式2线性增加深度(#layers)
Input image resolution
因为BiFPN使用3-7层的特征,因此输入图片的分辨率必需能被整除,所以使用公式3线性增加分辨率
结合公式1-3和不同的,论文提出EfficientDet-D0到EfficientDet-D6,具体参数如Table 1,EfficientDet-D7没有使用,而是在D6的基础上增大输入分辨率。
Experiments
模型训练使用momentum=0.9和weight decay=4e-5的SGD优化器,在初始的5%warm up阶段,学习率线性从0增加到0.008,之后使用余弦衰减规律(cosine decay rule)下降,每个卷积后面都添加Batch normalization,batch norm decay=0.997,epsilon=1e-4,梯度使用指数滑动平均,decay=0.9998,采用和的focal loss,bbox的长宽比为,32块GPU,batch size=128,D0-D4采用RetinaNet的预处理方法,D5-D7采用NAS-FPN的增强方法。
Table 2展示了EfficientDet与其它算法的对比结果,EfficientDet准确率更高且性能更好。在低准确率区域,Efficient-D0跟YOLOv3的相同准确率但是只用了1/28的计算量。而与RetianaNet和Mask-RCNN对比,相同的准确率只使用了1/8参数和1/25的计算量。在高准确率区域,EfficientDet-D7达到了51.0mAP,比NAS-FPN少使用4x参数量和9.3x计算量,而anchor也仅使用3x3,非9x9。
论文在实际的机器上对模型的推理速度进行了对比,结果如图4所示,EfficientDet在GPU和CPU上分别有3.2x和8.1x加速。
Ablation Study
Disentangling Backbone and BiFPN
论文对主干网络和BiFPN的具体贡献进行了实验对比,结果表明主干网络和BiFPN都是很重要的。这里要注意的是,第一个模型应该是RetinaNet-R50(640),第二和第三个模型应该是896输入,所以准确率的提升有一部分是这个原因。另外使用BiFPN后模型精简了很多,主要得益于channel的降低,FPN的channel都是256和512的,而BiFPN只使用160维,这里应该没有repeat
BiFPN Cross-Scale Connections
Table 4展示了Figure 2中同一网络使用不同跨尺寸连接的准确率和复杂度,BiFPN在准确率和复杂度上都是相当不错的
Softmax vs Fast Normalized Fusion
Table 5展示了不同model size下两种加权方法的对比,在精度损失不大的情况下,论文提出的fast normalized fusion能提升26%-31%的速度
figure 5展示了两种方法在训练时的权重变化过程,fast normalizaed fusion的变化过程与softmax方法十分相似。另外,可以看到权重的变化十分快速,这证明不同的特征的确贡献是不同的。
Compound Scaling
论文对比了混合缩放方法与其它方法,尽管开始的时候相差不多,但是随着模型的增大,混合精度的作用越来越明显。
结论
论文提出BiFPN这一轻量级的跨尺寸FPN以及定制的检测版混合缩放方法,基于这些优化,推出了EfficientDet系列算法,既保持高精度也保持了高性能,EfficientDet-D7达到了SOTA。整体而言,论文的idea基于之前的EfficientNet,创新点可能没有之前那么惊艳,但是从实验来看,论文推出的新检测框架十分实用,期待作者的开源。
论文地址:
https://arxiv.org/abs/1911.09070
相关文章:

存储过程和存储函数初步
2019独角兽企业重金招聘Python工程师标准>>> 存储过程和函数初步 简单的来说,存储过程就是一条或者多条 SQL 语句的集合,可视为批处理文件,但是其作用不仅限于批处理。 ###存储程序可以分为存储过程和函数。 MySQL 中创建存储过程…

asp.net 入门的五个步骤
作者: rob howard 步骤 1:下载和安装 .net sdk asp.net 是作为 .net sdk 的一部分提供的,它是创建、生成和测试基于 .net framework 的应用程序所需要的所有技术的集合。要下载和安装 .net sdk,请前往 msdn online .net 开发人…
我帮公司财务写了个“群发工资条”的Python脚本
作者 | 黄伟呢来源 | 数据分析与统计学之美介绍这是一个很好的Python自动化的案例。对于小公司,采用手动方式一个个发送邮件还是可以的。如果一个上百号,上千号,或者更大规模的公司,我们再一个个发送工资条邮件,就太浪…

[转] vim的复制粘贴小结
转载自: http://blogread.cn/it/article.php?id304 用vim这么久了,始终也不知道怎么在vim中使用系统粘贴板,通常要在网上复制一段代码都是先gedit打开文件,中键粘贴后关闭,然后再用vim打开编辑,真的不爽;上…

CCNA基础 IP地址子网划分
例:1.2.3.4/28 解析0:https://ws2.sinaimg.cn/large/006aKfj6jw1fa09e02m53j30u01hc7av.jpg 解析1:子网数量:2^n-x ( N表示 "/" 后面的数字;X表示8或16或24 ) (子网数量需要减去8或16视情况决…

一位IT從業人員的心路歷程
一位IT從業人員的心路歷程作者:章立民「Statgraphics統計繪圖入門詳論」是我的第一本著作,時值1990年9月,當時我還是一位大三升大四的學生。屈指算算,14年來,我已經撰寫了60本以上的書籍(簡體版未計算在內),…
面了大厂的 Python 岗后,炸了!
听说 Python 很难学?难在哪里?听说学完不知道做什么,为什么?结合我最近这些年的 Python 学习、开发经验,发现 90% 的人在初学 Python 时都会遇到下面这些问题——1. 没经验根本不知道从何学起,而且应用方向…

{} 与 function() { } , 选用空对象{}来存放keyValue
虽说js里面什么都能当对象,也能用填鸭式方法任意给对象添加属性,属性赋值.但是有些js内置的对象,类型属性也是没办法覆盖的。 贪多必失,写了一个用操作url 的js工具类,这个类上面有个属性叫queryString,我原…

java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单&#…

实例解说.Net构架下的加密编程
yesky(张悦■yesky) http://www.yesky.com/SoftChannel/72342380484755456/20031225/1756613.shtml 很久以前就一直想写一个加密程序,但是一直感到太麻烦而没有动手,不过在前段时间学习.NET的过程中发现.NET的框架中封装了与加密有关的类。而且要在.NE…
人工智能新手入门学习路线!附学习资源合集
有段时间没跟大家分享编程资源福利了!今天为大家整理了人工智能新手入门学习路线,同时附700分钟的学习资源合集,相信这套福利可以帮你顺利入行AI!文末领取全部资料。一、AI基础好课学习资料整理(约317分钟)…

数据还原到指定时间点的处理示例
--创建测试数据库CREATE DATABASE DbGO--对数据库进行备份BACKUP DATABASE Db TO DISKc:\db.bak WITH FORMATGO--创建测试表CREATE TABLE Db.dbo.TB_test(ID int)--延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点…

kvm cpu的亲和性绑定配置
1.CPU的绑定配置进程的处理器亲和性(process affinity):指将进程绑定到特定的一个或多个cpu上去执行,而不允许将进程调度到其他cpu上。物理cpu:表示真实的cpu个数逻辑cpu:表示所有拥有一个完整真实cpu功能的…
李开复对话Yoshua Bengio:AI技术的下一个突破
7月23日,在SGInnovate主办的“深度科技(Deep Tech)造福人类”活动上,创新工场董事长兼CEO李开复与Element AI联合创始人Yoshua Bengio进行了一场对话,讨论了人工智能的未来发展。Yoshua Bengio是深度学习三大发明人之一…

单链表功能大全
单链表很全的例子,增加,删除,排序,都有了 #include <stdio.h>#include <stdlib.h>typedef struct node{int nDate;struct node *pstnext;}Node;//链表输出void output(Node *head){Node *p head->pstnext;while(N…

Access外键 级联更新、删除
工具栏-->"关系"。 打开主表和从表。 将主表的字段拖动到从表的对应字段。 (两个字段要求类型相同。 如果主表是自动编号,那么从表用长整型.) Access添加外键约束(1)"实施完整性约束"(2)"左联接"(3)"实…

20161124网络爬虫技术学习
参考书籍:《自己动手写网络爬虫》 网络爬虫的基本操作是抓取网页。 “打开”网页的过程其实就是浏览器作为一个浏览的“客户端”,向服务器端发送了一次请穷求,把服务器端的文件“抓”到本地,再进行解释,展现。更进一步…

关于何种情况下使用DataGrid、DataList或Repeater的一些讨论
作者:Scott Mitchell [概述] WEB开发自从有了基于脚本的WEB编程技术(如ASP)以来,经历了一个漫长的过程。通过使用微软的ASP.Net技术,传统的ASP中大量的、单调乏味的、重复性的编程工作成为了历史…

UDP客户端不用绑定吗IP和端口?
2019独角兽企业重金招聘Python工程师标准>>> 书上都是这么说的,UDP客户端不用绑定IP和端口,操作系统会给它自动分配端口。。。。 但是虽然没有显示绑定,但是操作系统却似乎做了些隐蔽的事情。 首先,在客户端࿰…
算法实现太难了?机器学习也需要开源软件
作者 | Soren Sonnenburg等译者 | 刘畅出品 | AI科技大本营(ID:rgznai100)导读:开源工具已经趋于成熟,这使其能构建大规模的自然场景下的系统。与此同时,机器学习领域为各种应用开发了大量强大的学习算法。但是&#x…

数据库备份定期删除程序的开发。
第一.最近客户的服务器数据库备份每天都在进行,随着数据量的不断的增加,备份也在不断的进行变大。 第二.于是一些问题就出现了客户的服务器的磁盘的空间有限,定期数据库备份文件太大而导致无法进行保存问题。 第三.从而导致了服务器宕机以及服…

Repeater控件的分页问题
作者:zhoubinmail.sdu.edu.cn以前做ASP的时间不算短,可是做ASP.NET我是个新手。前几天做项目,遇到一个问题,要求比较复杂的数据格式显示,用DataGrid非常难实现,后来改用了Repeater控件来实现。不过这样就带…
华为昇腾AI全栈知识深入解读,师资培训沙龙深圳场圆满落幕!
头图 | 视觉中国极度缺乏AI人才,已成为中国人工智能产业发展道路上的瓶颈。在国家政策的支持下,众高校初建AI专业者甚多,但高校教师应掌握哪些知识储备来传道授业,大家都是“摸着石头过河”。将高校AI人才培养教学大纲与厂商成熟落…

[转载] 信息系统项目管理师考试论文写作要点
来源:信管网 网址:http://www.cnitpm.com/pm/4323.html (1)在论文写作之前,先不要急着动笔,认真把题看清楚,选择自己熟悉的论文(考试时,一般是二选一)&#x…

POM.xml 标签详解
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他…

DataRow的序列化问题
来源:CSDN 作者:kroll 在.net里,DataRow类型的对象是不支持序列化的,那么如果在一个需要序列化的对象中含有DataRow类型的字段该怎么办呢?呵呵,幸好Datatable是支持序列化的。因此,我们可以自定…

mass Framework event模块 v4
event.js // // 事件模块(包括伪事件对象,事件绑定与事件代理) // $.define("event",document.dispatchEvent ? "node" : "node,event_fix",function(){// $.log("已加载target模块")var rhoverH…
美国 AI 博士:什么都不会怎么学 Python?
我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的:先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, tuple 等数据结构,然后再介绍字符串处理和正则表达式࿰…

puppet 初识
【puppet初识】学习目录 领导说saltstack太慢 机器量一旦上来,saltstack就力不从心,所以要将saltstack转向puppet。【安装背景】系统centos 6.5软件地址:http://downloads.puppetlabs.com/puppet/master: 192.168.100.10agent: 192.168.100.13因为puppe…

ColorMatrix 彩色矩阵
选择自 hbzxf 的 Blog 首先对装配脑袋给出上两片文章的友好回复,还有网友Fisherman一起探讨ColorMatrix话题表示感谢!ColorMatrix (彩色矩阵) 类位于System.Drawing.Imaging命名空间 先看看下面的代码 ColorMatrix cm newColorMatrix(newfloat[][]{ n…