CNN更新换代!性能提升算力减半,还即插即用
传统的卷积运算,要成为过去时了。
Facebook和新加坡国立大学联手提出了新一代替代品:OctConv(Octave Convolution),效果惊艳,用起来还非常方便。
OctConv就如同卷积神经网络(CNN)的“压缩器”。用它替代传统卷积,能在提升效果的同时,节约计算资源的消耗。
比如说一个经典的图像识别算法,换掉其中的传统卷积,在ImageNet上的识别精度能获得1.2%的提升,同时,只需要82%的算力和91%的存储空间。
如果对精度没有那么高的要求,和原来持平满足了的话,只需要一半的浮点运算能力就够了。
想实现这样的提升,怕不是要把神经网络改个天翻地覆吧?
根本不需要,OctConv即插即用,无需修改原来的网络架构,也不用调整超参数,方便到家。
就是这个新一代的卷积,让GAN的主要创造者、AI大牛Ian Goodfellow迫不及待,不仅转发力荐,还表示要持续关注进展,开源时再发推告诉大家。
OctConv也获得了众网友的认可。短短5个小时,Goodfellow的推文就收获了700赞,网友直呼“Excellent work!”
所以,OctConv到底是什么神仙网络?
算力↓↓,准确率↑↑
我们先来看看它效果究竟如何。
比如说经典的图像识别算法:ResNet-50,换了新的卷积运算会带来什么变化?
上图中粉红色的折线就是不同参数配置的OctConv对ResNet-50的影响。左起第二个粉红圆点显示了一种比较均衡的配置:比原版(最右黑点)略高的精度,所需的浮点算力却只有原版的一半。
其他折线代表的各种图像识别网络,小到ResNet-26、DenseNet,大到ResNet-200,在OctConv加持下,都体现出了成绩的提升和算力需求的下降。
调节OctConv的参数α,可以在性能提升和算力节约之间寻找平衡。
降低算力需求的同时,OctConv还能够缩短神经网络推断所需的时间。比如ResNet-50的推断时间,就会随着参数α的增大而逐步缩短。保持精度不变,推断时间能缩短到74毫秒,也就是原来的62%。
对大、中、小型的模型,研究人员们分别测试了OctConv会如何影响它们的图像分类能力。
大型神经网络ResNet-152用了OctConv后,仅用22.2GFLOP的算力,Top-1分类准确率就能达到82.9%。
OctConv的适用范围也不仅限于图像识别。
无论是2D还是3D的CNN,都能实现这种提升。论文不仅测试了ResNet、ResNeXt、DenseNet、MobileNet、SE-Net等2D CNN在ImageNet上的图像分类能力,还测试了C2D、I3D等视频行为识别算法改用OctConv之后的性能变化。
像压缩图像一样压缩卷积
OctConv节约的计算力,都是从哪儿省出来的?
对于普通卷积运算,所有输入和输出特征映射具有相同的空间分辨率。
实际上,一张图片可以分成粗略结构(低频部分)和边缘细节(高频)两个部分,比如一张企鹅照片能分离出两个成分:
企鹅身上毛色相近的部分、背景颜色变化比较缓慢,属于低频信息,信息量较少;而两种毛色交接的部分、企鹅身体边缘的颜色变化剧烈,属于高频信息,信息量较多。
既然这样,我们完全可以将信息量较少的低频部分压缩一下,减少冗余空间。
类似地,卷积层的输出特征映射和拍摄的照片一样,也可以被视为不同频率信息的混合,进行相似的处理。
研究人员从图片的频率分离和压缩中受到启发。Octave Convolution的思路就是对卷积网络也进行类似操作,压缩低频部分,分别处理高低频两个部分的数据,并在二者之间进行信息交换,从而减少卷积运算对存储和计算量的消耗。
为了适应新的特征表示,文章推广了传统卷积,提出了OctConv。Octave是指八音阶,在音乐中降低八音阶代表频率减半。
OctConv中低频部分张量的大小是0.5h×0.5w,长宽正好是的高频部分h×w的一半,从而节省了张量的存储空间和计算量。
虽然OctConv压缩了低频部分的信息,但同时也有效地扩大了原始像素空间中的感受野(receptive field),可以提高识别性能。
实现过程
对于普通的卷积方法,以W表示k×k的卷积核,X和Y分别表示输入和输出张量,X和Y的映射关系为:
(p, q)是X张量中的位置坐标,(i, j)表示所取的近邻范围。
而OctConv的目标是分开处理张量中的低频和高频部分,同时实现的高频和低频分量特征表示之间的有效通信。
我们将卷积核分成两个分量:
W=[WH, WL]
同时实现高低频之间的有效通信。因此,输出张量也将分成两个分量:
Y=[YH, YL]
YH=YH→H+YL→H,YL=YL→L+YH→L
其中YA→B表示从A到B的特征映射后更新的结果。YH→H和YL→L是频率内的信息更新,YL→H和YH→L是频率间的信息更新。
因此YH不仅包含自身的信息处理过程,还包含从低频到高频的映射。
为了计算这些项,我们将卷积核每个分量进一步分为频率内和频率间两个部分:
WH=WH→H+WL→H,WL=WL→L+WH→L
张量参数可以用更形象的方式表示:
△OctConv的卷积核
这种形式有些类似于完全平方公式a^2+b^2+ab+ba,两个平方项WH→H、WL→L是频率内张量,两个交叉项是频率间张量WL→H、WH→L
△OctConv的卷积核的“交叉”处理过程,红色箭头表示高低频之间的信息交换
输出张量的计算方式和前面普通卷积的方式相同:
在OctConv中比例α是一个可以调节的参数,就是前文提到过的那个可调节参数。在整个网络内部层中令αin = αout = α,第一层中αin = 0,αout = α,最后一层中αin = α,αout = 0。
OctConv的另一个非常有用的特性是低频特征映射有较大的感受野。与普通卷积相比,有效地将感受野扩大了2倍。这会进一步帮助每个OctConv层从远处捕获更多的上下文信息,并且有可能提高识别性能。
华人一作
这篇论文是Facebook联合新加坡国立大学共同完成的。
其中,Yunpeng Chen、Haoqi Fang、Bing Xu,、Zhicheng Yan、Yannis Kalantidis、Marcus Rohrbach等6人均来自Facebook AI实验室。
一作Yunpeng Chen,中文名为陈云鹏,2015年本科毕业于华中科技大学,去年开始在Facebook实习。
陈云鹏现就读于新加坡国立大学博士,师从颜水成和冯佳时,两人也均为这篇论文的作者。今年毕业后,陈云鹏将成为Facebook的一名研究员。
此前作为一作,陈云鹏已有4篇论文被CVPR、NeurIPS、ECCV和IJCAI等顶会接收,主攻深度学习于视觉交叉领域的研究。
颜水成是新加坡国立大学的终身教授的颜水成,现在也是360副总裁、人工智能研究院院长和首席科学家。
他主要研究计算机视觉、机器学习与多媒体分析领域,目前发表学术论文近500篇,被引次数超2.5万次,曾三次入选全球高引用学者。目前,颜水成有诸多荣誉加持,并评为IEEE Fellow, IAPR Fellow和ACM杰出科学家等。
冯佳时现任新加坡国立大学电子与计算机工程系助理教授,为机器学习与视觉实验室负责人。
本科在中国科学技术大学毕业后,冯佳时在新加坡国立大学读博,此后又去UC伯克利人工智能实验室从事博士后研究,研究方向为图像识别、深度学习及面向大数据的鲁棒机器学习。
传送门
论文地址:
https://export.arxiv.org/abs/1904.05049
— 完 —
欢迎关注磐创博客资源汇总站:http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/
CNN更新换代!性能提升算力减半,还即插即用的更多相关文章
- SQL Server 2014里的性能提升
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!! 缓存池扩展(Buffer Pool Extensions) 缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如S ...
- YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧
最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但 ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...
- C# 程序性能提升篇-2、类型(字段类型、class和struct)的错误定义所影响性能浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...
- Web 应用性能提升 10 倍的 10 个建议
转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...
- async/await 的基本实现和 .NET Core 2.1 中相关性能提升
前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 ...
- 在MongoDB中创建一个索引而性能提升1000倍的小例子
在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我们介绍了MongoDB的常见索引的创建语法.部分同学还想看看MongoDB的威力到底有多大,所 ...
- 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...
随机推荐
- 前端面试题(HTML、CSS部分)
HTML.CSS部分: 一.html5有哪些新特性.移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5? 新特性: HTML5 现在已经不是 SGML 的 ...
- 前端开发--nginx番外篇
Centos7下Nginx开发使用(背景: 阿里云ECS Centos7) 安装和启动 安装教程 Centos7安装Nginx实战 需要主意的如下: 文中第四步 4.配置编译参数命令:(可以使用./c ...
- springmvc 的@ResponseBody 如何使用JSONP?
JSONP解释 在解释JSONP之前,我们需要了解下”同源策略“这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载额文 ...
- # 爬虫连载系列(1)--爬取猫眼电影Top100
前言 学习python有一段时间了,之前一直忙于学习数据分析,耽搁了原本计划的博客更新.趁着这段空闲时间,打算开始更新一个爬虫系列.内容大致包括:使用正则表达式.xpath.BeautifulSoup ...
- Linux下git使用
一.安装 本人使用的是centos 7,首先安装git 1.下载git:wget https://Github.com/Git/Git/archive/v2.3.0.tar.gz 2.下载之后解压:t ...
- 深入理解React key
一 react 组件元素的 diff 算法 二 key 的理解 概述 react 中的key 属性,它是一个特殊的属性,它的出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key ...
- [JS]使用JavaScript实现简易俄罗斯方块
[JS]使用JavaScript实现简易俄罗斯方块 首先,大家可以点击此处来预览一下游戏效果,随后将会以此为模板讲解如何使用JavaScript实现这样一个简易的俄罗斯方块项目(以下简称"该 ...
- js 小练习题
<script> /*1.结论,IIFE中运行顺序3,1,执行test(4),会传递参数*/ /*var a=5; var test = (function(a){ console.log ...
- node 微信授权 获取openid
node获取微信授权拿到openid 需要了解的网站 1.微信授权. 先说一下流程(一张图代替所有): 流程步骤: 1.用户同意,获取code. 2.通过code获取网页授权access_toke ...
- synchronized实现原理及其优化-(自旋锁,偏向锁,轻量锁,重量锁)
1.synchronized概述: synchronized修饰的方法或代码块相当于并发中的临界区,即在同一时刻jvm只允许一个线程进入执行.synchronized是通过锁机制实现同一时刻只允许一个 ...