结构虽简单,但性能强悍——3个小型卷积神经网络简介

简介: 本文介绍了三种小型结构的卷积神经网络,在稍微降低性能的前提下,大大降低了计算复杂度。此外,无需使用高性能计算机即可进行仿真运行,适合初学者仿真体验。

       人工智能、深度学习太火了,火到哪一个领域都有讨论的声音。稍微对深度学习有所了解的人们,尤其是对于计算机视觉领域有所涉猎的人们,当一听到深度学习、卷积神经网络时,脑海里不由得自动脑补这样一幅画面——一台满和负载嗡嗡响的GPU服务器、一台满屏代码不断跳跃的显示屏以及坐在电脑前不断尝试不同卷积神经网络模型的科研人员。这幅场景在各个实验室不断的重复出现,那是不是玩人工智能和深度学习一定都是这样呢?答案是不一定。虽然大多数卷积神经网络都是由于其大型结构而取得非常好的性能,但是这些模型对计算能力有比较高的要求。有些人员只想尝试应用下卷积神经网络、体验下效果,这个时候难道也得配一台高性能计算的服务器吗?如果是这种情况的话,本文将告诉你三种卷积神经网络,这些卷积神经网络在你老的台式机(哪怕是没有GPU)、甚至是你的手机上都能够仿真运行,为你节省一大笔开销,是不是很期待?下面一窥这三种卷积神经网络模型的结构及其性能分析。

MobileNet

文章链接:https://arxiv.org/abs/1704.04861
       MobileNet使用深度可分离卷积(depthwise separable Convolutions),这种卷积块结构首先由Xception引入。深度可分离卷积由两部分组成,分别为深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。
       假设二维特征图(feature map)进行标准卷积操作,输入特征图经过卷积操作后进行输出,如图所示,其计算复杂度为$D_f^2*M*N*D_k^2$。其中输入特征图的维度为$Df$,$M$和$N$分别表示输入通道数以及输出通道数,$D_k$是卷积核大小。

1


       深度卷积在每个输入通道上分别映射一个卷积。因此,其输出通道数与输入通道数相同,其计算成本是$D_f*M*D_k$。

2


       最后的操作是逐点卷积。它是1×1内核大小的卷积,它将由深度卷积创建的特征简单地结合起来,其计算成本是$M*N*D_f$。

3


       深度可分离卷积的计算代价是由深度卷积和逐点卷积两部分代价组成。与一般的卷积操作相比,深度可分离卷积降低了原始计算复杂度的$(1/N+1/D_k^2)$。假设卷积核大小为3x3,则仿真运算量降低了8倍。
       MobileNet同时也提供了两个参数以允许进一步减少运算量。其中一个参数为 瘦身乘子(width multiplier)其取值范围为0~1,用来减少网络的通道数,每一层减少$alpha*N$个通道,该参数能被用来权衡模型性能与仿真等待时间。另外一个参数为 分辨率乘子(resolution multiplier),该参数将缩放输入图像的尺寸,尺寸范围为224~128之间。由于MobileNet使用全局平均池化代替全连接,你可以使用224x22$图像训练该网络,并将训练好的的网络应用于128x128大小的图像上!

ShuffleNet

文章链接:https://arxiv.org/abs/1707.01083
       ShuffleNet原创了三种混洗单元(Shuffle unit),如下图所示每个单元都是由逐群卷积(pointwise group convolution)和信道混洗(channel shuffle)组成。

4


       一个组卷积包含几个卷积,每一组获取部分输入信道。下图是一个组卷积过程,有3组,每一组有3个输入信道。

5


       这种结构极大的降低了计算代价。假设,如果有4个输入信道和8个输出信道,从中选择2组,每组有2个输入信道和4个输出信道。当只有一组时,其计算代价为$D_f^2*D_k^2*4*8$;当有2组时,其计算代价为$D_f^2*D_k^2*2*4$或者$D_f^2*D_k^2*4*4$。至少是减少了2倍的计算代价。在作者的文章中,当组数为8时取得了最好的结果,因此降低计算量是非常重要的。

EffNet

文章链接:https://arxiv.org/abs/1801.06434
       EffNet为空间可分离卷积(spatial separable convolutions),这与MobileNet的深度可分离卷积非常相似。

6


       如图所示,可分离深度卷积以蓝色矩形块表示,它是由一个行内核(1x3)、可分类池化以及列内核(3x1)的深度卷积组成。
       正常深度为3x3的卷积核的计算代价为$3^2*D_f^2*M$。第一个深度为1x3卷积核的计算代价为$3*D_f^2*M$,可分离池化操作将特征图高度减半,具有边际成本。第二个深度为3x1的卷积核的计算代价为$3*D_f^2/2*M$。这样一来,总的计算代价为$1.5*(3*D_f^2*M)$,是原先的一半!
       此外,EffNet相较于MobileNet和ShuffleNet的一个优化操作是在开始时没有“标准卷积”。

7


       MobileNet和ShuffleNet都避免更换第一层,因为它们觉得该层的计算量已经很小了。虽然我尊重这种说法,但我认为每一个优化都是重要的。在优化了网络的其它层之后,第一层适当地变大。实验结果表明,用EffNet块替换第一层后,降低了每个层计算量的30%。

总结

       MobileNet、ShuffleNet以及EffNet这三种卷积神经网络结构都是通过优化计算量构想出来的。每个都用自己的版本取代了经典卷积结构。

  • MobileNetGithub)深度可分离卷积使用一个深度卷积与逐点卷积结构,此外,引入了两超参数,分别为瘦身乘子和分辨率乘子,都是用来减少特征映射空间的维数。
  • ShuffleNetGithub)每组采用逐点卷积,为了结合每个组所产生的特征,引入了混洗层(shuffle layer)。
  • EffNetGithub)使用空间可分离卷积,只是一个简单的深度卷积被分为沿着X轴和Y轴,二者中间有一个池化层。

    8

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

作者信息

Arthur Douillard,深度学习工程师
个人主页:https://www.linkedin.com/in/arthurdouillard/
本文由阿里云云栖社区组织翻译。
文章原标题《3 Small But Powerful Convolutional Networks》,译者:海棠,审校:Uncle_LLD
文章为简译,更为详细的内容,请查看原文

相关文章
|
2月前
|
机器学习/深度学习 存储 算法
【复现】尝试使用numpy对卷积神经网络中各经典结构进行改写复现
【复现】尝试使用numpy对卷积神经网络中各经典结构进行改写复现
38 0
【复现】尝试使用numpy对卷积神经网络中各经典结构进行改写复现
|
2月前
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
40 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
2月前
|
消息中间件 Kubernetes 网络协议
Cilium 系列 -15-7 层网络 CiliumNetworkPolicy 简介
Cilium 系列 -15-7 层网络 CiliumNetworkPolicy 简介
|
2月前
|
存储 缓存 UED
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
3月前
|
消息中间件 NoSQL Linux
workFlow c++异步网络库编译教程与简介
搜狗公司C++服务器引擎,编程范式。支撑搜狗几乎所有后端C++在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理数百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数后端与嵌入式开发需求。 编程范式 结构化并发与任务隐藏回调与内存回收机制
53 0
|
3月前
|
网络协议
使用netwox/TCP协议检测网络性能
使用netwox/TCP协议检测网络性能
|
1月前
|
监控 负载均衡 网络协议
TCP重传与超时机制:解锁网络性能之秘
TCP重传与超时机制:解锁网络性能之秘
65 0
|
12天前
|
存储 缓存 自动驾驶
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
13天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
21天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。