博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构虽简单,但性能强悍——3个小型卷积神经网络简介
阅读量:3922 次
发布时间:2019-05-23

本文共 2430 字,大约阅读时间需要 8 分钟。

原文链接:

摘要: 本文介绍了三种小型结构的卷积神经网络,在降低计算复杂度的前提下,其性能也不错。此外,无需使用高性能计算机就可以进行仿真,适合初学者仿真体验。

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

MobileNet

文章链接:

       MobileNet使用深度可分离卷积(depthwise separable Convolutions),这种卷积块结构首先由引入。深度可分离卷积由两部分组成,分别为深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。
       假设二维特征图(feature map)进行标准卷积操作,输入特征图经过卷积操作后进行输出,如图所示,其计算复杂度为D2fMND2kDf2∗M∗N∗Dk2。其中输入特征图的维度为DfDfMMNN分别表示输入通道数以及输出通道数,DkDk是卷积核大小。

1

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

2

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

3

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

ShuffleNet

文章链接:

       ShuffleNet原创了三种混洗单元(Shuffle unit),如下图所示每个单元都是由逐群卷积(pointwise group convolution)和信道混洗(channel shuffle)组成。

4

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

5

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

EffNet

文章链接:

       EffNet为空间可分离卷积(spatial separable convolutions),这与MobileNet的深度可分离卷积非常相似。

6

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

7

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

总结

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

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

    8

转载地址:http://cegrn.baihongyu.com/

你可能感兴趣的文章
C# 在自定义的控制台输出重定向类中整合调用方信息
查看>>
C# 9 新特性 —— 补充篇
查看>>
Asp.Net Core使用Skywalking实现分布式链路追踪
查看>>
浅谈CLR基础知识
查看>>
Xamarin使XRPC实现接口/委托远程调用
查看>>
如何成功搞垮一个团队?
查看>>
.NET开源5年了,这些宝藏你还没get?
查看>>
【日常排雷】 .Net core 生产环境appsetting读取失败
查看>>
从内存中释放Selenium chromedriver.exe
查看>>
如何在 C# 中使用 MSMQ
查看>>
小试elsa
查看>>
巧用 Lazy 解决.NET Core中的循环依赖关系
查看>>
微前端架构在容器平台的应用
查看>>
C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项
查看>>
仓储模式到底是不是反模式?
查看>>
【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0
查看>>
为什么人和人的差距这么大?
查看>>
ML.NET 推荐引擎中一类矩阵因子分解的缺陷
查看>>
微软2020开源回顾:止不住的挨骂,停不下的贡献
查看>>
说说 RabbiMQ 的应答模式
查看>>