mobilenet全攻略

我们还可以分析整个网络的参数和计算量分布,如表2所示。 对于参数也主要集中在1×1卷积,除此之外还有就是全连接层占了一部分参数。 对了,作者还在论文中分析整个了网络的参数和计算量分布,如下图所示。 上图左边是标准卷积层,右边是V1的卷积层,虚线处是不相同点。

图1 CNN在ImageNet上的表现(来源:CVPR2017) 然而,在某些真实的应用场景如移动或者嵌入式设备,如此大而复杂的模型是难以被应用的。 首先是模型过于庞大,面临着内存不足的问题,其次这些场景要求低延迟,或者说响应速度要快,想象一下自动驾驶汽车的行人检测系统如果速度很慢会发生什么可怕的事情。 所以,研究小而高效的CNN模型在这些场景至关重要,至少目前是这样,尽管未来硬件也会越来越快。

mobilenet: MobileNet V2

步长为2时,因为input与output的尺寸不符,因此不添加shortcut结构,其余均一致。 可以发现,作为轻量级网络的V1在计算量小于GoogleNet,参数量差不多是在一个数量级的基础上,在分类效果上比GoogleNet还要好,这就是要得益于深度可分离卷积了。 mobilenet VGG16的计算量参数量比V1大了30倍,但是结果也仅仅只高了1%不到。

大家感兴趣的话,可以参考曲晓峰老师的这个回答如何评价 Google 最新的模型 MnasNet? 所以我们只要认为MnasNet是一个比MobileNet精度和实时性更高的模型就行了。 也就是说,对低维度做ReLU运算,很容易造成信息的丢失。 mobilenet 而在高维度进行ReLU运算的话,信息的丢失则会很少。

首先是一个3×3的标准卷积,s2进行下采样。 然后就是堆积深度可分离卷积,并且其中的部分深度卷积会利用s2进行下采样。 然后采用平均池化层将feature变成1×1,根据预测类别大小加上全连接层,最后是一个softmax层。

mobilenet: 深度学习那些事儿

使用1×1卷积来构建最后层,这样可以便于拓展到更高维的特征空间。 这样做的好处是,在预测时,有更多更丰富的特征来满足预测,但是同时也引入了额外的计算成本与延时。 一旦通过体系结构搜索找到模型,我们就会发现最后一些层以及一些早期层计算代价比较高昂。 于是作者决定对这些架构进行一些修改,以减少这些慢层的延迟,同时保持准确性。

该图是AlexNet网络中不同层的GPU和CPU的时间消耗,我们可以清晰的看到,不管是在GPU还是在CPU运行,最重要的“耗时杀手”就是conv,卷积层。 也就是说,想要提高网络的运行速度,就得到提高卷积层的计算效率。 也就是说,不管输入通道数是多少,经过第一个PW逐点卷积升维之后,深度卷积都是在相对的更高6倍维度上进行工作。 这就解释了为什么深度卷积的卷积核有不少是空。 针对这个问题,可以这样解决:既然是ReLU导致的信息损耗,将ReLU替换成线性激活函数。 真相只有一个: 2016年6月,谷歌提出了MobileNetV1,由于各种原因当时没有挂上arxiv,一直到2017年4月才提交。

mobilenet: MobileNet的TensorFlow实现

并且同时,作者认为随着网络的深入,应用非线性激活函数的成本会降低,能够更好的减少参数量。 作者发现swish的大多数好处都是通过在更深的层中使用它们实现的。 因此,在V3的架构中,只在模型的后半部分使用h-swish。 在相同的权值参数数量的情况下,相较标准卷积操作,可以减少数倍的计算量,从而达到提升网络运算速度的目的。 首先利用3×3的深度可分离卷积提取特征,然后利用1×1的卷积来扩张通道。 用这样的block堆叠起来的MobileNetV1既能较少不小的参数量、计算量,提高网络运算速度,又能的得到一个接近于标准卷积的还不错的结果,看起来是很美好的。

mobilenet

虽然本人没有接触过NAS,但是我已经闻到了金钱的味道。 在深度卷积的过程中,我们得到了8×8×3的输出特征图,我们用256个1×1×3的卷积核对输入特征图进行卷积操作,输出的特征图和标准的卷积操作一样都是8×8×256了。 在真实的移动端应用场景,像MobileNet这样类似的网络将是持续研究的重点。 Convolution和pointwise convolution,整个网络有28层(这里Avg Pool和Softmax不计算在内)。

资源受限的NAS,用于在计算和参数量受限的前提下搜索网络来优化各个块(block),所以称之为模块级搜索(Block-wise Search) 。 输入一个12×12×3的一个输入特征图,经过5×5×3的卷积核卷积得到一个8×8×1的输出特征图。 如果此时我们有256个特征图,我们将会得到一个8×8×256的输出特征图。 其实介绍MobileNetV1(以下简称V1)只有一句话,MobileNetV1就是把VGG中的标准卷积层换成深度可分离卷积就可以了。

回到之前的MobileNet的资源分布,95%的1×1卷积和优化的网络结构就是MobileNet能如此快的原因了。 NetAdapt,用于对各个模块确定之后网络层的微调每一层的卷积核数量,所以称之为层级搜索(Layer-wise Search)。 第0点,关于MnasNet也是基于NAS的,也不是很了解。

mobilenet: 激活函数h-swish

好巧不巧,谷歌的另一团队,同时提出了Xception。 所有才有了两个结构都是基于深度可分离卷积的相似争论。 自从2017年由谷歌公司提出,MobileNet可谓是轻量级网络中的Inception,经历了一代又一代的更新。 当然,这些也不是那么绝对的,因为毕竟MobileNet速度快不快,与CONV1x1运算的优化程度密切相关。 如果使用了定制化的硬件(比如用FPGA直接实现3×3的卷积运算单元),那么im2col就失去了意义而且反而增加了开销。

  • 本文的主角MobileNet属于后者,其是Google最近提出的一种小巧而高效的CNN模型,其在accuracy和latency之间做了折中。
  • V3也利用swish当作为ReLU的替代时,它可以显著提高神经网络的精度。
  • 当然,这些也不是那么绝对的,因为毕竟MobileNet速度快不快,与CONV1x1运算的优化程度密切相关。
  • 好巧不巧,谷歌的另一团队,同时提出了Xception。
  • 使用1×1卷积来构建最后层,这样可以便于拓展到更高维的特征空间。

卷积神经网络(CNN)已经普遍应用在计算机视觉领域,并且已经取得了不错的效果。 mobilenet 图1为近几年来CNN在ImageNet竞赛的表现,可以看到为了追求分类准确度,模型深度越来越深,模型复杂度也越来越高,如深度残差网络(ResNet)其层数已经多达152层。 也就是说,1×1卷积不需要im2col的过程,所以底层可以有更快的实现,拿起来就能直接算,大大节省了数据重排列的时间和空间。 这样可以更清楚的看到卷积的定义进行卷积操作(上图上半部分),内存访问会非常不规律,以至于性能会非常糟糕。 而Im2col()以一种内存访问规则的方式排列数据,虽然Im2col操作增加了很多数据冗余,但使用Gemm的性能优势超过了这个数据冗余的劣势。 按照卷积计算,实线标注出卷积计算中的访存过程(对应数据相乘),我们可以看到这一过程是非常散乱和混乱的。

目前的研究总结来看分为两个方向:一是对训练好的复杂模型进行压缩得到小模型;二是直接设计小模型并进行训练。 不管如何,其目标在保持模型性能(accuracy)的前提下降低模型大小(parameters size),同时提升模型速度(speed, low latency)。 本文的主角MobileNet属于后者,其是Google最近提出的一种小巧而高效的CNN模型,其在accuracy和latency之间做了折中。 在写这篇文章的时候看到了一篇文章Why MobileNet and Its Variants (e.g. ShuffleNet) Are Fast? ,这也让我有了一样的一个问题,这篇文章主要是从结构方面进行了讨论,从深度可分离卷积到组卷积的参数计算量等,因为之前的文章都有写过,在这里就不赘述了,感兴趣的同学可以翻阅下之前的文章。 作者认为,当前模型是基于V2模型中的倒残差结构和相应的变体(如下图)。

mobilenet: MobileNetV3-Small

可以看到使用深度可分离卷积与标准卷积,参数和计算量能下降为后者的九分之一到八分之一左右。 比较大,那么如果采用3×3卷积核的话,depthwise separable convolution相较标准卷积可以降低大约9倍的计算量。 mobilenet 一句话来介绍im2col操作的话,就是通过牺牲空间的手段(约扩增K×K倍),将特征图转换成庞大的矩阵来进行卷积计算。 所以,需要改进的地方就是要保留高维特征的前提下减小延时。 这样的话最后一组特征现在不是7×7(下图V2结构红框),而是以1×1计算(下图V3结构黄框)。 可以用一个近似函数来逼急这个swish,让swish变得硬。

V3也利用swish当作为ReLU的替代时,它可以显著提高神经网络的精度。 但是呢,作者认为这种非线性激活函数虽然提高了精度,但在嵌入式环境中,是有不少的成本的。 原因就是在移动设备上计算sigmoid函数是非常明智的选择。

作者选择的是基于ReLU6,作者认为几乎所有的软件和硬件框架上都可以使用ReLU6的优化实现。 mobilenet 其次,它能在特定模式下消除了由于近似sigmoid的不同实现而带来的潜在的数值精度损失。 mobilenet 图像分类的实验,主要是在以上的网络上进行的,ShuffleNet是V1的版本使用了分组卷积和shuffling, 也使用了类似的残差结构(c)中的(b)。 换句话说,就是对一个n维空间中的一个“东西”做ReLU运算,然后(利用T的逆矩阵T-1恢复)对比ReLU之后的结果与Input的结果相差有多大。

mobilenet

第3点引入SE模块,主要为了利用结合特征通道的关系来加强网络的学习能力。 先不仔细讨论,之后在【深度回顾经典网络】系列的时候再详细讨论吧,感兴趣的同学,可以看看这一篇文章。 就像之前所说的:只有在更深层次使用h-swish才能得到比较大的好处。 所以在上面的网络模型中,不论大小,作者只在模型的后半部分使用h-swish。 MobileNetV3,是谷歌在2019年3月21日提出的网络架构。 首先,引入眼帘的是这篇文章的标题,“searching”一词就把V3的论文的核心观点展示了出来——用神经结构搜索(NAS)来完成V3。

mobilenet: MobileNet V3

由香港SEO公司 featured.com.hk 提供SEO服務

柯文思

柯文思

Eric 於國立臺灣大學的中文系畢業,擅長寫不同臺灣的風土人情,並深入了解不同範疇領域。