当前位置: 首页 > 编程日记 > 正文

AABO:自适应最优化Anchor设置,性能榨取的最后一步 | ECCV 2020

编译 | VincentLee

来源 | 晓飞的算法工程笔记

Introduction

目前,主流的目标检测算法使用多种形状的anchor box作为初始预测,然后对anchor box进行回归调整,anchor box的配置是检测算法中十分重要的超参数。一般而言,anchor box的配置都是简单地通过人为指定,比如Faster R-CNN经典的的9种形状,也可以像YOLO一样通过k-means对数据集进行分析,得出特定的配置。

为了人工设置超参数的环节,近年来很多关于超参数优化问题(HPO, hyper-parameter optimization)的研究,最有效的方法为贝叶斯优化(BO)和bandit-based策略。在分析了当前方法的优劣后,论文提出一种自适应的anchor box优化方法AABO,该方法基于贝叶斯优化和Sub-Sample方法,能够自动切高效地搜索到最优的anchor设置,榨干主流目标检测算法的潜力。

Relative Method


这里先对论文经常提及的3种超参数搜索方法进行简单的介绍,方便下面的理解。

Bayesian optimization

超参数的验证通常需要进行模型训练,会耗费大量的时间,所以贝叶斯优化的核心是使用替代模型(prior function)来代理目标模型,替代模型一般为概率分布模型。在得到替代模型后,使用采集函数(acquisition function)从候选集中选择一组合适的超参数进行测试,采集函数需要能够很好地平衡exploitation和exploration,测试则是使用目标模型进行正常的训练和验证,最后将当前结果加入观测数据中,用于训练替代模型,反复进行上述的操作。

贝叶斯优化的完整流程如上面所示,在每轮的迭代中基于替代模型和采集函数获取一组超参数,然后使用目标模型进行验证,最后将验证结果加入观测数据集并更新替代模型。

Hyperband

Bandit-based方法在限定资源的情况以高效的策略寻找最优超参数,资源可为时间、迭代次数等,而Hyperband是经典的bandit-based方法。Hyperband在Successive Halving算法的基础上进行了扩展,每次选取一批超参数进行多轮迭代,每轮迭代将资源均匀地分配给待验证的超参数组合,每轮结束时保留超参数组合进行下一轮。

Hyperband的完整流程如上面所示,为单超参数分组可分配的最大资源,包含两个循环,外循环负责控制每次验证的初始可分配的资源数以及验证的分组数,逐步增加和减少,分组由随机采样所得。内循环则进行Successive Halving算法,共进行次迭代,逐步增加每组的可分配资源,并且每次保留最优的分组。

BOHB

实际上,上面的两种经典超参数方法都有其各自的优缺点,贝叶斯优化虽然搜索高效,但是容易陷入局部最优解,而Hyperband虽然搜索比较全面,但效率不够高。所以,BOHB结合了贝叶斯优化和Hyperband进行超参数优化。

图1

BOHO的完整流程如上所示,可简单地认为将Hyperband的随机采样替换为贝叶斯优化进行采样,然后将Hyperband的超参数组合及其对应的输出加入到观测数据中,用于更新替代模型。需要注意的是,BOHO的替代模型是一个多维核密度估计(KDE)模型,类似于TPE(Tree Parzen Estimator)。如论文提到的,BOHO有一个比较严重的问题,对于难学习的样本,一般需要较长的训练周期,而由于BOHO使用HyperBand进行快速验证,所以不一定能完整地测出超参数的真实准确率,导致最终的结果有偏差。

Preliminary Analysis


Default Anchors Are Not Optimal

图2

随机采样100组不同的anchor设置,每组包含3种尺寸和3种长宽比,然后与Faster R-CNN的默认anchor配置进行性能对比。结果如上图所示,红线为默认设置的性能,可以看到,默认设置并不是最优的。

Anchors Influence More Than RPN Structure

图3

使用BOHB同时搜索RPN head结构以及anchor设置,RPN head的搜索空间如上图所示。

结果如上表所示,可以看到anchor设置搜索带来的性能提升在一定程度上要高于RPN head结构搜索。‍‍

Search Space Optimization for Anchors

论文通过分析目标bbox的分布特性,设计了紧密的搜索空间,主要基于以下两个特性。

Upper and Lower Limits of the Anchors

论文对COCO数据集目标的尺寸和长宽比进行统计,并且得到了ratio的上界和下界:

图4

统计结果如上图所示,其中蓝点为每个目标,黄线分别为上界和下界,中间的黑色长方形为BOHB搜索实验的搜索空间。可以看到,有一部分的搜索空间在上界和下界之外,是无效的搜索,所以约束搜索空间在上界和下界之间是有必要的。另外,图中有5个红色的框,是论文为RPN的每层设定的对应搜索空间,下面会提到。

Adaptive Feature-Map-Wised Search Space

图5

论文对FPN每层的输出进行了统计,结果如上图所示。可以看到,不同层包含不同数量和不同形状的输出,随着层数的增加,anchor的数量越少,长宽比范围也越小。

图6

基于上面的分析,论文设计了自适应FPN的搜索空间,图4中的5个红框与上下界之间的区域即为FPN每层对应的搜索空间。

具体搜索如上图所示,每层都有独立的搜索空间,层数越大,anchor的数量、尺寸范围和长宽比范围越小。实际上,与图4的黑矩形框搜索空间对比,这种自适应FPN搜索空间更大,而且每层较小的搜索空间有助于HPO算法的更集中地进行搜索。

Bayesian Anchor Optimization via Sub-sampling

图7

论文提出的搜索方法如图7所示,包含BO和子采样方法,分别用于选择潜在的设置以及为不同的设置分配不同的计算资源。整体思路和BOHB类似,将其中的Hyperband替换成了Sub-Sample方法。

Bayesian Optimization

论文在实现时,BO模块与与BOHB类似,使用TPE(Tree Parzen Estimator)作为核密度函数进行建模,TPE包含两个概率密度函数:,分别表示结果好的概率和结果差的概率,其中为当前的观测数据,为当前观测数据的最优结果,采样时取最大的超参数组合。需要注意的是,由于Hyperband只保证最种输出的结果的准确性,其它结果由于在中途就停止了,资源不足,输出不一定准确,直接用这些结果来对进行训练会造成很大的误差,所以需要一个更好的方法来解决这个问题。

Sub-Sample Method

Sub-Sample也是bandit-based方法,在资源有限的情况,尽可能测试出优质的候选超参数组合。定义为候选超参数组合,Sub-Sample方法基于观测数据进行选择, 为当前观测点相对于上一个观测点的收益。

Sub-Sample方法如上所示,首先对所有超参数组合进行最小资源的测试,得到一批观测数据,然后每轮选取已使用资源最多超参数组合作为leader,若其它组合优于leader,则赋予其资源,否则赋予leader资源,判断当前组合是否优于leader组合有以下两个规则:

第一条规则根据观测次数进行判断,为非负单调阈值,用于控制每个超参数的最小观测次数,一般设为。第二条规则根据两个组合的近期收益进行判断,收益更高即为优。

Experiment

COCO数据集上搜索到的最优anchor组合

在不同的数据集上进行对比

嵌入SOTA方法进行对比

与其它方法的对比实验

Conclustion

论文提出超参数优化方法AABO,该方法核心基于贝叶斯优化和Sub-Sample方法,能够自适应的搜索最优的anchor设置。从实验结果来看,AABO能够仅通过anchor设置优化,为SOTA目标检测方法带来1.4%~2.4%的性能提升。

  • 参考内容

    BOHB -- https://nni.readthedocs.io/zh/latest/Tuner/BohbAdvisor.html

  • 论文:

    AABO: Adaptive Anchor Box Optimization for Object Detection via Bayesian Sub-sampling

  • 论文地址:

    https://arxiv.org/abs/2007.09336

更多精彩推荐
  • 首次在手机端不牺牲准确率实现BERT实时推理,比TensorFlow-Lite快近8倍,每帧只需45ms

  • Python让你成为AI 绘画大师,简直太惊艳了!(附代码))

  • 关于Python 3.9,那些你不知道的事

  • 腾讯回应 Wecom 是企业微信海外版;美国地方法院紧急叫停微信禁令;Vue 3 发布 | 极客头条

  • 曾是谷歌程序员,抛下百万年薪创业,4 年成就 7 亿用户,今身价百亿!

相关文章:

Android列表控件选项中添加进度框ProgressBar实现

今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦&am…

写一个通用数据访问组件

出处:http://www.csharp-corner.com willsound(翻译) 我收到过好多Email来问我如何用一个通用的数据提供者(data provider)在不失自然数据提供者(native data provider)稳定而强大功能的前提下来访问不同的数据源(data sources).一个小伙子…

InstallShield 2015 LimitedEdition VS2012 运行bat文件

转载:http://www.cnblogs.com/fengwenit/p/4271150.html 运行bat文件 网上很多介绍如何运行bat的方法,但我这个是limted 版本,不适用。 1. 打开 Define Setup Requirements and Actions –> Custom Actions 2. 右健 After Register Product –> Ne…

理解C#中的string类型

作者:未知目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类…

最全总结!聊聊 Python 操作PDF的几种方法

作者 | 陈熹来源 | 早起Python前言本文主要涉及:os 模块综合应用glob 模块综合应用PyPDF2 模块操作基本操作PyPDF2 导入模块的代码常常是:from PyPDF2 import PdfFileReader, PdfFileWriter这里导入了两个方法:PdfFileReader 可以理解为读取器…

three.js(六) 地形法向量生成

2019独角兽企业重金招聘Python工程师标准>>> 上一节采用 分形算法生成地形的高度值, 接着我们需要生成每个顶点的法向量。 three.js 的PlaneGeometry 自带有法向量, 法向量分为两种 即 平面法向量 和 平面每个定点法向量。 因此一个n*n 块组成…

ASP.NET中使用多个runat=server form

作者&#xff1a;未知ASP.NET 在同一个页面不支持多个 runatserver forms&#xff0c;要解决这个问题&#xff0c;可以把每个 form 放在一个单独的 panel 控件中&#xff0c;这样用户就可以简单地通过单选按钮在不同 panel 间切换。代码如下&#xff1a;2FormExample.aspx<%…

激发企业大“智慧” | 深度赋能AI全场景 揭秘你不知道的移动云

2020年是人工智能技术发展的关键年。疫情之下&#xff0c;世界见证了人工智能在抗击疫情中发挥的积极作用&#xff1b;今年4月&#xff0c;国家发改委正式将人工智能确定为新基建的重要领域之一。在历史机遇下&#xff0c;AI已实现"质变和量变"&#xff0c;正迈入与技…

ExtJS 4.x 得到资源树上任意的节点对象

上半年做ExtJS 4.x 的时候&#xff0c;遇到过对资源树操作的情况&#xff1a; Ext.tree.Panel 如下图&#xff1a;目的&#xff1a; 直接根据每个节点的{任意key : 对应value}&#xff0c;就能找到匹配的节点对象 代码如下&#xff1a; refs : [ { selector : rtree, …

【转载】mysql常用函数汇总

转载地址&#xff1a;http://www.jb51.net/article/40179.htm 一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制&#xff08;OCT返回八进制&#xff0c;HEX返回十六进制&#xff09;CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e&#xff08;自然对数的底&…

有关java的一些话

2019独角兽企业重金招聘Python工程师标准>>> 跟着做完TankWar&#xff0c;java才算是入门了&#xff0c;真正学习java从看尚学堂马士兵老师的视频开始&#xff0c;至今三个月已过&#xff0c;感谢马老师的精彩讲解&#xff0c;您才是我真正的java入门老师&#xff0…

ADO.NET 2.0中的SqlCommand.ExecutePageReader

http://blog.joycode.com/liuhuimiao/在.NET 2.0 PDC或Beta1中&#xff0c;可以看到SqlCommand对象新增了个ExecutePageReader方法&#xff0c;该方法实现了分页读取数据的功能。对于分页读取数据&#xff0c;在ADO.NET1.1中&#xff08;当然2.0也适合&#xff09;一般常用动态…

组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战

来源 | MyEncyclopedia上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法&#xff0c;通过不断自我对弈&#xff0c;最终实现从零棋力开始训练直至能够打败任何高手。在本篇中&#xff0c;我们在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法…

2020职场人裸辞三大原因:不开心、工资低、没有盼头

近期&#xff0c;脉脉发布了《2020职场人裸辞现状调研报道》&#xff0c;报道显示2020最让职场人想裸辞的三大原因为&#xff1a;不开心、工资低、没有盼头。报告数据中还显示&#xff0c;工资不满预期是最让人想要裸辞的主要原因&#xff0c;但有超过6成职场人表示&#xff0c…

Oracle PL/SQL编程学习笔记:Merge方法的使用

Oracle11g的Merge很强大&#xff01; 1 create or replace procedure BRANCE_REPORT_MERGE is2 3 begin4 Merge into BRANCHREPORT desttable5 using TEMP_BRANCHREPORT tmptable6 on (desttable.SENDER_IDtmptable.SENDER_ID and desttable.BRANCH_IDtmptable.BRANCH_ID…

2.0中获取数据库连接统计数据

作者&#xff1a; http://blog.joycode.com/liuhuimiao/.NET 2.0中的SqlConnection多了一个StatisticsEnabled属性和ResetStatistics()、RetrieveStatistics()两个方法&#xff0c;用于获取SQLServer的连接统计数据。当然&#xff0c;这样做是以性能损耗为代价的&#xff0c;但…

Python学习day5作业-ATM和购物商城

Python学习day5作业Python学习day5作业ATM和购物商城作业需求ATM&#xff1a;指定最大透支额度可取款定期还款&#xff08;每月指定日期还款&#xff0c;如15号&#xff09;可存款定期出账单支持多用户登陆&#xff0c;用户间转帐支持多用户管理员可添加账户、指定用户额度、冻…

60分钟看懂HMM的基本原理

作者 | 梁云1991来源 | Python与算法之美HMM模型&#xff0c;韩梅梅的中文拼音的缩写&#xff0c;所以又叫韩梅梅模型&#xff0c;由于这个模型的作者是韩梅梅的粉丝&#xff0c;所以给这个模型取名为HMM。开玩笑&#xff01;HMM模型&#xff0c;也叫做隐马尔科夫模型&#xff…

获取远程网卡MAC地址

出自&#xff1a; http://blog.joycode.com/liuhuimiao/朋友mingal急问我有关获取远程网卡MAC地址的ASP.net实现。我一开始以为是获取本机MAC地址&#xff0c;说了几种方法给他。由于他还需要获取服务器&#xff08;本机&#xff09;相关信息&#xff0c;如硬盘序列号、CPU信息…

[hadoop源码阅读][9]-mapreduce-概论

hadoop的mapreduce的运行流程大概就是如下图所示了 如果要是文字描述,估计要大篇幅了,大家可以参考下面的参考文档. 参考文档 1.http://caibinbupt.iteye.com/blog/336467 2.http://hadoop.apache.org/docs/r0.19.2/cn/mapred_tutorial.html 3.http://developer.yahoo.com/hado…

【小白的CFD之旅】小结及预告

这是小白系列的索引&#xff0c;后续会继续更新。 已更新的部分 01 引子02 江小白03 老蓝04 任务05 补充基础06 流体力学基础07 CFD常识08 CFD速成之道09 初识FLUENT10 敲门实例11 敲门实例【续】12 敲门实例【续2】13 敲门实例【续3】14 实例反思15 四种境界16 流程17 需要编程…

Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了

作者 | 刘早起来源 | 早起Python导语&#xff1a;很多同学在学习机器学习时往往掉进了不停看书、刷视频的&#xff0c;但缺少实际项目训练的坑&#xff0c;有时想去练习却又找不到一个足够完整的教程&#xff0c;本项目翻译自kaggle入门项目Titanic金牌获得者的Kernel&#xff…

input type右对齐与只读的

右对齐的 <input type"text" style"background:#efefef; text-align:right" readonly value"this" /> 只读的input <input type"text" name"nodeCode" readonly value"<%functionNodeForm.getNodeCode()%…

如何从sdcard读取文件

2019独角兽企业重金招聘Python工程师标准>>> 首先&#xff0c;我们必须明白文件储存格式是有许多种的&#xff0c;如utf-8,unicode等。 那么&#xff0c;我们如何将文件原封不动的读取出来呢&#xff0c;我们可以设定&#xff0c;文件储存的绝对路径为filepath。则代…

HDU 2034 人见人爱A-B

人见人爱A-B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 77157 Accepted Submission(s): 21509 Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目&#xff0c;就是{A}{B}&#…

Java中的包,类的导入,静态导入

包的作用 1. 为了更好的组织代码&#xff0c;能够将自己的代码与代码库的代码分离。 2. 在需要合作完成的工作中&#xff0c;可以使用分包的方式来尽量的减少类命名的冲突。 Sun公司推荐程序员使用公司域名的反向字符作为公司项目的起始包名&#xff1a;如 baidu.com --> c…

实现800*600,1024*768两套分辨率方案

下面这段代码&#xff0c;可以实现800*600,1024*768两套分辨率方案。 <html><head><title>Untitled Document</title><script language"javascript">function go(){var myWidthscreen.widthif (myWidth>800){window.location.repl…

倒计时 4 天!高通人工智能应用创新大赛颁奖典礼线上隆重举行

经过7 个月的激烈角逐&#xff0c;由高通公司&#xff08;Qualcomm&#xff09;、中国智谷重庆经开区、CSDN、Testin云测、OPPO、极视角、中科创达、创业邦联合主办&#xff0c;重庆经开区高通中国中科创达联合创新中心协办&#xff0c;TensorFlow Lite 作为开源技术合作伙伴的…

IOS分享扩展使用JS脚本

2019独角兽企业重金招聘Python工程师标准>>> 实现一个分享扩展插件&#xff0c;功能是从Safari网页中截取当前网页的图片内容 基本的步骤总结在下面&#xff1a; 1.创建一个JS文件&#xff0c;命名为MyJavascriptFile.js&#xff0c;文件的功能是解析safari网页内容…

电脑人会得哪些病----------关注健康,关爱生命!

作者&#xff1a;未知 随着科技水平的提高&#xff0c;现代办公室综合症&#xff0c;特别是高科技病渐渐成为现代职业病。电脑可以说是本世纪最伟大的发明之一&#xff0c;有了它&#xff0c;人们工作、生活、学习的方式都出现了划时代的改变&#xff0c;随着网络与电脑的普及&…