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

Cascade RPN,结构的艺术带来极致提升 | NeurIPS 2019

作者 | VincentLee

来源 | 晓飞的算法工程笔记(ID: gh_084c810bc839)

导读:论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时anchor和feature不对齐的问题,论文创新点足,效果也很惊艳,相对于原始的RPN提升13.4%AR。

  • 论文地址:https://arxiv.org/abs/1909.06720

  • 代码地址:https://github.com/thangvubk/Cascade-RPN

简介

目前,性能高的目标检测网络大都为two-stage(RPN+R-CNN)架构,相对于R-CNN,很少有研究专门去提升RPN的性能。因此,论文着重研究如何提升RPN的性能,解决其探索性的achor定义以及探索性的feature与anchor对齐的局限性。

anchor由尺寸和长宽比定义,常规算法会使用一系列不同尺寸和长宽比的anchor来充分覆盖检测目标。设定合适的尺寸和长宽比是提升性能的关键,这通常需要一顿tuning。

论文重点强调对齐规则,即图片特征和anchor必须是一致的。如图1a所示,由于RPN的anchor是均匀分布的,其方差十分大,难以学习,需要进行迭代回归。但RPN没有类似RoIPool或RoIAlign的手段进行特征对齐,因为RPN的输入很多,性能十分重要,只能进行常规的滑动卷积进行输出,这就造成了anchor和feature的对称问题。如图2b,可以看到Iterative RPN的收益是微乎其微的,这是由于在iterative RPN中,stage2的anchor与其特征不对齐(依然均匀地卷积),如图1c,stage2的输入anchor精调了,但是stage2卷积时使用的特征区域还是精调之前的

论文提出Cascade RPN来系统地解决前面提到的问题,算法主要有两个特点:

  • Cascade RPN使用单anchor,并且结合anchor-based和anchor-free的准则来进行正样本的判定

  • 为了获得多stage精调的好处并且保持特征和anchor对齐,Cascade RPN使用自适应卷积来精调每个stage的anchor,自适应卷积可以当作是个轻量级的RoI Align层

Cascade RPN简单但有效,能比原生RPN高出13.4%AR,并且能集成到two-stage检测器中,如Fast R-CNN和Faster R-CNN分别提升3.1%和3.5%

区域提案网络和变体

文中简单介绍了RPN的概念,如图1a,通过卷积回归当前anchor与GT间的差值来进行精调,相信大家都比较了解了,这里就不再赘述了

迭代RPN和变体

Iterative RPN的架构如图2b所示,通过迭代回归得出不同stage的差值,然后按顺序对anchor进行精调。从结构来看,如上所述,这样的方法收益是微乎其微的,因为其特征与anchor是不对齐的

为了缓解对齐问题,一些研究使用可变形卷积来进行特征图上的空间变换,希望能使得精调后的anchor与变换后的特征对齐,如图2cd。但是这种方法并没有严格的约束去保证特征与变换后的anchor对齐,也很难确定变换后的特征和anchor是否对齐了

Cascade RPN

  • Adaptive Convolution

对于feature map x,标准的二维卷积先通过网格采样,然后与权重w加权求和。由卷积核大小与膨胀(dilation)定义,如对应卷积核大小为3x3和膨胀为1。对于位置p的特征输出y,定义为

在自适应卷积中,网格替换为从输入anchor计算出的偏移

定义为a在特征图上的精调后的anchor,偏移o可以分解为中心偏移和形状偏移

其中,为中心点偏移量,是形状偏移量,由anchor的形状和卷积核大小决定。假设卷积核大小为3x3,则,由于偏移量是小数,采样时使用双线性插值

如图3所示,常规卷积连续地采样特征,空洞卷积则根据膨胀按间隔采样特征,可变形卷积则根据学习的偏移来增大采样的空间位置,这是不规则的。而论文提出的自适应卷积则能保证在anchor内进行采样,是规则的,确保特征与anchor对齐

  • Sample Discrimination Metrics

Cascade RPN每个位置仅使用一个anchor box,然后使用多stage的精调。在判定anchor的正负时,单纯地使用anchor-free或anchor-base方法都是不行的,因为使用anchor-free标准会导致stage2要求太低,而使用anchor-base则会导致stage1不能回归足够多的正样本。因此,Cascade RPN在stage1使用anchor-free标准,即中心点在GT center内即为正,而往后的stage则使用anchor-base标准,根据IoU进行判断

  • Cascade RPN

Cascade RPN的架构如图2e所示,依靠自适应卷积来对齐特征和anchor。在stage1,自适应卷积可以认为是空洞卷积,因为anchor中心偏移为0,膨胀量根据shape而定。stage1的特征输出会连接到下一个阶段,因为其包含当前anchor的空间信息

整体流程如公式1,stage1的anchor集合是均匀分布在图片上的,而在stage,计算出anchor的偏移并通过regressor 计算出回归值,再产生精调的anchor。在最后的阶段,通过classifer计算出分类置信度,然后再进行NMS得出最后的结果

  • Learning

Cascade RPN可以通过多任务的end-to-end方式进行训练,其中是stage回归loss,权重为则是分类的loss,两个loss通过进行权重调整。在实现时,分类使用二值交叉熵而回归使用IoU loss。

实验

实验设置

实验的模型以ResNet50-FPN作为主干,每个特征level使用的尺寸为,,,,。FPN采用two-stage,第一阶段使用anchor-free标准,center-region和ignore-region分别为0.2和0.5,第二阶段使用anchor-based标准,IoU阈值为0.7。multi-task loss的stage-wise权重,平衡权重,NMS阈值为0.8。实验将图片等比缩放为,不使用其余数据增强手段,在8GPU上用SGD训练12个epoch,batch 16,初始学习率为0.02,8周期和11周期降低10倍。RPN的性能用AR来衡量,最终的检测结果则以AP进行衡量

Benchmarking结果

Region Proposal Performance.Table1展示了Cascade RPN与state-of-the-art的RPN研究对比,其中Sharp Mask,GCN-NS,AttractionNet,ZIP结果直接从原文里获取,其余用mmdetection复现。Cascade RPN比原始的RPN提升了13.4%AR,由于遵守了对齐规则,Cascade RPN比其它的方法性能都要优异

Detection Performance.Table2展示了集成进two-stage检测器后的整体性能表现,Fast RCNN使用预先计算的anchor进行训练,而Faster RCNN则是end-to-end的。直接替换RPN的实验结果只有很小收益,需要修改一下实验参数,设定IoU阈值为0.65,只取top300 anchor。从结果看来,top300时在两个框架下分别提升了3.5%mAP和3.7%mAP

消融研究

Component-wise Analysis.  为了进一步了解Cascade RPN性能,进行了component-wise的实验。baseline是anchors为3的RPN,为58.3,当anchor为1时,降到55.8,意味着正样本的大幅减少。而当使用自适应卷积使用时,性能提升为67.8,这意味着对齐在多阶段精调的重要性。混合anchor-free和anchor-based准则带来了0.8%的提升,使用回归统计(对回归差值进行归一化)带来2.9%AR收益,IoU loss带来0.2%的提升

Acquisition of Alignment.  为了研究自适应卷积的性能,进行了Table4实验。从结果可以看出,当仅使用中心偏移时,提升6.1%AR,而当使用中心和形状偏移时,性能达到67.8%

Sample Discrimination Metrics.  Table5展示了采用标准的性能测试,从结果看来,单独使用anchor-free或anchor-based标准是不完美的,同时使用能带来很好的效果

Qualitative Evaluation.  图4的第一和第二行图片为stage1的结果,第三行为stage2的结果,可以看到,stage2的结果要好点

Number of Stages.  Table6展示了stage数量对结果的影响,可以看到2-stage和3-stage性能几乎一样,2-stage是个不错的选择

Extension with Cascade R-CNN.  在Cascade R-CNN上,Cascade RPN能提升0.8%AP

结论

论文提出优化版的Cascade RPN,该架构能够有效地解决RPN中anchor和feature的对齐问题,相对于原始的RPN,能提升13.4%AR,是个很不错的架构。

(*本文为AI科技大本营转载文章,转载请联系原作者)

精彩推荐

人工智能数学基础系列公开课通过人工智能热点问题开始,引出其中蕴涵的数学原理,然后构建解决实际问题的数学模型和方法,兼具趣味性与实用性。

1月16日晚8:00, 哈工大屈教授在线直播课---『看得见 』的数学,带大家解密计算机视觉背后的数学知识!

点击阅读原文,或扫描海报二维码免费报名

加入公开课福利群,每周还有精选学习资料、技术图书等福利发送、60+公开课免费学习

推荐阅读

  • Python 三十大实践、建议和技巧

  • 2020年AI 2000最具影响力学者榜单发布,何恺明排名超过李飞飞

  • 达摩院 2020 预测:模块化降低芯片设计门槛 | 问底中国 IT 技术演进

  • 在调查过基于模型的强化学习方法后,我们得到这些结论

  • 千万不要和程序员一起合租

  • 人工智能的下一个前沿:识别“零”和“无”

  • 十大新兴前端框架大盘点

  • Oracle 抄袭亚马逊的 API 是侵权吗?

  • 2019全年盘点之一:公链生死战场

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置[完整修正实用版]

IISPHPMySQLZend OptimizerGD库phpMyAdmin安装配置[完整修正实用版]IISPHPMySQLZend OptimizerGD库phpMyAdmin安装配置[完整修正实用版][补充]关于参照本贴配置这使用中使用的相关问题请参考关于WIN主机下配置PHP的若干问题解决方案总结这个帖子尽量自行解决,谢谢[url]http://b…

WMI技术介绍和应用——Event Consumer Provider

在《WMI技术介绍和应用——Event Provider》和《WMI技术介绍和应用——接收事件》中,我们展现了如何处理和事件相关的WMI知识。而《WMI技术介绍和应用——接收事件》一文则主要讲解了如何查询事件,这种查询是在我们进程存在时发生的,一旦我们…

shell练习四

2019独角兽企业重金招聘Python工程师标准>>> 模拟linnux登录shell #!/bin/bash echo -n "login:" read name echo -n "passwd:" read passwdif [ $name"aaa" -a passwd"aaa" ]; thenecho "the host and passwd is rig…

WMI技术介绍和应用——总结(完)

断断续续的,历经三年将WMI这个主题给写完了。记得最开始时接触该技术,是因为传统获取CPU序列号的方法总是出错。于是接触了这种已经很老的技术。本着打破砂锅问到底的想法,我决定稍微研究一下,结果越来越深。正好借着年前这点时间…

2020年,大火的Python和JavaScript是否会被取而代之?

作者 | Richard Kenneth Eng 译者 | 明明如月,编辑 | 郭芮 来源 | CSDN(ID:CSDNnews) Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一样跌下神坛…

WaveSwipeRefreshLayout

WaveSwipeRefreshLayout 介绍: 水滴效果的下拉刷新,效果非常不错。 http://itlanbao.com/code/20150815/10000/100423.html 运行效果: 相关代码 android Gallery 图片滚动 BalloonPerformerCountryRankDelightfulMenuDrawableFancyBackground…

Google Test(GTest)使用方法和源码解析——概况

GTest是很多开源工程的测试框架。虽然介绍它的博文非常多,但是我觉得可以深入到源码层来解析它的实现原理以及使用方法。这样我们不仅可以在开源工程中学习到实用知识,还能学习到一些思想和技巧。我觉得有时候思想和技巧是更重要的。(转载请指…

Reddit票选 | 2019年绝对不能错过的机器学习论文

来源 | reddit.com编辑 | 神经星星 神经小兮技术顾问 | 姜汉(openbayes.com)来源 | HyperAI超神经(ID:HyperAI)【导读】回顾 2019 年,人工智能领域时有大事发生,吸引着各界人士的关注。这一年,也…

ASP中的常用服务器检测源码

在写ASP网页时常用的检测代码:服务器现在时间: 引用<% now %>服务器CPU型号: 引用<%Request.ServerVariables("HTTP_UA_CPU")%>当前分辨率: 引用<% Request.ServerVariables("HTTP_UA_PIXELS")%>可显示颜色:[qoute]<%Request.ServerV…

选IDC房时,用脚本截取丢失包和rtt的值作比对

由于业务增长&#xff0c;需要选一个IDC房托管接入。网络质量要求比较高。在IDC给出测试机时&#xff0c;利用smokping来测试&#xff0c;是测出去的包。由于我们在各个地区都有接入机。再从这些接入机去测IDC网络质量&#xff0c;比对指标&#xff1a;丢失的包和rtt返回时延。…

Google Test(GTest)使用方法和源码解析——自动调度机制分析

在《Google Test(GTest)使用方法和源码解析——概况 》一文中&#xff0c;我们简单介绍了下GTest的使用和特性。从这篇博文开始&#xff0c;我们将深入代码&#xff0c;研究这些特性的实现。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 测试用例的自动保存…

D3D中简单的截图方法 (转)

【ZT】D3D中简单的截图方法 试了下&#xff0c;果然可以。在渲染完所有东东后&#xff08;Present之前&#xff09; 获得BackBuffer表面 然后用D3DX的函数保存 voidScreenShot (char*filename) { IDirect3DSurface9 *tmp NULL; IDirect3DSurface9 *back NULL; //生成固定…

2019年,自动化机器学习AutoML技术还火吗? | BDTC 2019

整理 | 王银出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 【导读】12 月 5-7 日&#xff0c;由中国计算机学会主办&#xff0c;CCF 大数据专家委员会承办&#xff0c;CSDN、中科天玑协办的中国大数据技术大会&#xff08;BDTC 2019&#xff09;在北京长城饭店隆重…

第一次使用51cto博客

阿梅第一次使用51cto博客&#xff0c;以后将学习中的总结写到这里来。加油。转载于:https://blog.51cto.com/hopit/1690465

Google Test(GTest)使用方法和源码解析——结果统计机制分析

在分析源码之前&#xff0c;我们先看一个例子。以《Google Test(GTest)使用方法和源码解析——概况 》一文中最后一个实例代码为基准&#xff0c;修改最后一个“局部测试”结果为错误。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; class ListTest : publi…

贾扬清感谢信:阿里开源10年,致敬千万开源人

整理 | 夕颜【导读】2019 年 10 月&#xff0c;有人曾根据 www.gharchive.org 的数据整理出一份 2019 年GitHub 开源贡献排行榜&#xff0c;获取 GitHub 2019 年的 PushEvent&#xff0c;通过分析 GitHub 用户提交记录中的邮件地址&#xff0c;分辨其所属组织。从这份榜单上可…

热烈庆祝我国神七发射成功!

热烈庆祝我国神七发射成功&#xff01;

云计算设计模式(十)——守门员模式

云计算设计模式&#xff08;十&#xff09;——守门员模式 通过使用充当客户端和应用程序或服务之间的代理&#xff0c;验证和进行消毒的请求&#xff0c;并将它们之间的请求和数据的专用主机实例保护的应用程序和服务。这可以提供一个额外的安全层&#xff0c;并限制了系统的攻…

“不会Linux,怎么干程序员?”骨灰级工程师:干啥都不行!

说起优秀程序员的必备技能&#xff0c;我想大家都可以说很多&#xff0c;比如&#xff1a;数据结构、算法、数学、编程语言等等。但是&#xff0c;你可能会忽略了每一个程序员都应该掌握的技能&#xff1a;Linux。想一想&#xff0c;我们日常学习、求职、工作场景的中&#xff…

Google Test(GTest)使用方法和源码解析——Listener技术分析和应用

在《Google Test(GTest)使用方法和源码解析——结果统计机制分析》文中&#xff0c;我么分析了GTest如何对测试结果进行统计的。本文我们将解析其结果输出所使用到的Listener机制。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 解析 源码中&#xff0c;我们…

SSH连接不上Linux的解决方法

SSH连接不上Linux的解决方法: 连续弄了几次&#xff0c;今天早上终于把SSH连接虚拟机连接不通的问题解决了。 先简单说下概要&#xff1a; 主机装的是XP系统&#xff0c;虚拟机用的是red hat Linux。 我用的是nat连接方式是虚拟机内也能上网。 主机是用的校园内寝室共享上网。 …

熬夜翻译完的PureFTPd配置文件

[url]http://www.chinaunix.net[/url] 作者:jeffwu 发表于&#xff1a;2006-07-08 10:31:58 干了个通宵&#xff0c;一边玩一边把配置文件翻译完了&#xff0c;翻得不好的地方还请各位多多提点&#xff0c;少许不是很明白的地方就留在那了。 鼓励转贴&#xff0c;分发&#xf…

挑战NLP、量子计算难题,300多支本科生队伍同场角逐,2020 ASC超算竞赛一触即发...

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;ASC世界大学生超级计算机竞赛&#xff08;ASCStudent Supercomputer Challenge&#xff09;是由中国发起的世界最大规模的大学生超算竞赛&#xff0c;与美国SC、德国ISC并称全球三大超算竞赛&#xff0c;也是目前全球最…

Google Test(GTest)使用方法和源码解析——断言的使用方法和解析

在之前博文的基础上&#xff0c;我们将介绍部分断言的使用&#xff0c;同时穿插一些源码。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 断言&#xff08;Assertions&#xff09; 断言是GTest局部测试中最简单的使用方法&#xff0c;我们之前博文中举得例子…

精品软件 推荐 硬盘物理序列号修改专家

硬盘物理序列号修改专家不是市面上那些简单修改硬盘驱动器的序列号的东西&#xff0c;而是修改硬盘厂商在烧制时刻录在硬盘盒上的&#xff0c;即&#xff08;硬盘物理序列号&#xff09;&#xff0c;大约20位字母数字的组合1、可以解决部分软件封用户电脑&#xff0c;导致这台电…

知识图谱实体链接是什么?一份“由浅入深”的综述

作者 | 尼古拉瓦砾来源 | Paperweekly&#xff08;ID:paperweekly&#xff09;【导读】这个世界充斥着无数的结构化数据&#xff08;wiki&#xff09;和非结构化数据&#xff08;web&#xff09;&#xff0c;然而&#xff0c;如何将两者有效地集成仍然是个非常困难的问题。本文…

Google Test(GTest)使用方法和源码解析——预处理技术分析和应用

预处理 在《Google Test(GTest)使用方法和源码解析——概况》最后一部分&#xff0c;我们介绍了GTest的预处理特性。现在我们就详细介绍该特性的使用和相关源码。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 测试特例级别预处理 Test Fixtures是建立一个固…

出色管理者的时间管理

出色管理者的时间管理不少管理者都有这样的感慨&#xff1a;“忙了一天&#xff0c;也不知道忙了什么&#xff0c;时间还不够用。”其实&#xff0c;只要有效地运用时间&#xff0c;就可以提高工作效率&#xff0c;在相同的时间里做更多的事&#xff0c;而且做得更好&#xff0…

精品软件 推荐 瑞星 杀毒软件 安全软件

一句话评价一下这软件&#xff1a; 功能好&#xff0c;速度一般。功能&#xff1a;设置中心&#xff1a;最后&#xff0c; 下载地址请到官方下载吧。转载于:https://blog.51cto.com/hangtc/1690981

Google Test(GTest)使用方法和源码解析——自定义输出技术的分析和应用

在介绍自定义输出机制之前&#xff0c;我们先了解下AssertResult类型函数。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 在函数中使用AssertionResult AssertionResult只有两种类型&#xff1a; AssertionSuccess()AssertionFailure()要么成功&#xff0…