美文网首页
【CV论文笔记】ShuffleNet V2: Practical

【CV论文笔记】ShuffleNet V2: Practical

作者: 蘑菇轰炸机 | 来源:发表于2020-02-26 23:04 被阅读0次

    本文主要用于介绍旷世于2018年提出的一种轻型网络ShuffleNet V2。本笔记主要为方便初学者快速入门,以及自我回顾。

    论文链接:https://arxiv.org/pdf/1807.11164.pdf

    基本目录如下:

    1. 摘要
    2. 核心思想
    3. 总结

    ------------------第一菇 - 摘要------------------

    1.1 论文摘要

    当前,神经网络的架构设计总是基于一些内在(indirect)的计算复杂度指标,比如,FLOPs。然而,一些直接性的指标,比如,速度,又取决于其他很多的因素,比如内存空间大小和计算平台。因此,本文在设计网络架构的时候,将不仅仅只考虑FLOPS,还将去考虑更多的直接性指标。在一系列严格控制的实验条件下,本论文提出了一系列有助于提高网络计算效率的建议。同时,我们还提出了一种新的架构,ShuffleNet V2,实验也同时表明,我们的模型在速度和时效性上都表现优异。

    ------------------第二菇 - 核心思想------------------

    2.1 如何评价模型的时效性?

    现在的CNN系列的网络模型已经发展的很好了,更深更多级联方式的网络架构带来了准确率的大幅度提升,但是,除了准确性,模型的时效性也越来越受到重视。在真实的工业界应用场景中,通常追求的不是绝对高的准确率,而是在给定的平台上,在限制时间内达到一定的准确率范围即可。因此,本文更关注的事情就是如何在保证一定准确率的情况下,提高模型的时效性。

    通常,广泛使用的评估模型时效性的指标是FLOP (number of float-point operations)。FLOP本质上来说是一种内在的评价性指标(indirect metric),确实能给出一个近似的估计,但是,经常不能直接跟我们所关心的直接性指标(direct metric)划等号,如下图所示,

    关联性分析.jpg

    从上图我们可以看出,那些拥有相似FLOPs的网络,却各自有不同的速度(GPU上更为明显),因此,我们可以看出在评估网络时效性的时候仅仅用FLOPs值是不够的。而造成非直接度量标准(FLOPs)和直接度量标准(实际运行速度)有所偏差的主要原因有以下2条。

    1)FLOPs并没有考虑到一些能明显影响速度的指标。

    • 一个就是内存访问成本(MAC),在进行组卷积的时候,可能会是算力更强的GPU的瓶颈。而这种消耗我们在设计网络架构的时候不得不考虑进去。
    • 另一个点就是模型并行计算的程度(degree of parallelism),自然并行化程度高的模型计算的速度更快。

    2)在不同的计算平台上,拥有相同FLOPs的网络也会有不同的计算时效性,并且采用不同的库也会有不同的影响,如下图所示,

    不同平台的计算时效示意图.jpg

    基于上述的观察,作者提出了在考量网络时效性时候的2条准则,
    1)直接考量指标应该代替间接考量指标。
    2)所有的指标应该都在给定的目标平台上去实验。

    基于以上2条准则,作者详细分析了ShuffleNetv1和MobileNetv2的运行时间,并结合理论与实验提出了以下4条十分实用的指导原则。

    2.1.1 Equal channel width minimizes memory access cost (MAC).

    同等通道大小能够最小化MAC。

    对于轻量级的CNN网络来说,我们通常都会采用深度可分离卷积(depthwise separable convolutions),因此,众所周知,这种网络最大的耗时点就在点卷积那步(1*1卷积)。现在假定我们的输入通道是c_1输出通道是c_2,特征图的空间大小是h*w,那么很明显,我们1*1卷积的FLOPs就等于hwc_1c_2,对应的MAC就是(假设内存足够),

    MAC = hw(c_1 + c_2) + c_1c_2

    其中前一项是去读取特征图,后一项是去读取卷积核参数。我们根据均值不等式(c_2 = \frac{B}{hwc_1}),

    MAC \geqslant \sqrt{hwB} + \frac{B}{h*w}

    因此我们知道,仅当c_1 = c_2的时候,MAC取最小值。当然这只是理论上的结论,结合作者的实验分析结果(固定FLOPs,改变c_1:c_2),如下图所示,

    实验结果1.jpg

    所以从表中我们确实不难发现当输入和输出当通道数相同时,计算的效率达到最大。

    2.1.2 Excessive group convolution increases MAC

    组卷积的过量使用会增加MAC。

    组卷积的原理大家都是知道的,因此其对应的MAC就是(假设是1*1的分组卷积),

    MAC = hw(c_1 + c_2) + \frac{c_1c_2}{g}

    毫无疑问,随着g的增长,MAC也会增长。而其FLOPs就为hwc_1c_2/g

    结合作者的实验(固定FLOPs,改变组数量),结果如下表所示,

    实验结果2.jpg

    注意上图的c是总的通道数,所以很明显我们可以看到随着组数的增加,计算的速度也在下降。因此作者在这里也提醒了,最终的分组数的选择应该根据自己的应用场景和应用平台而谨慎选择,单纯的使用更多的分组数是不明智的选择。

    2.1.3 Network fragmentation reduces degree of parallelism

    网络碎片化会降低并行度。

    现在很多的网络都会倾向于设计出更多的分支结构来提高准确率,但是更多的分支其实意味着更低的计算效率,因此,就这个问题,作者也设计了多种网络结构如下图所示,

    实验结构图.jpg

    相应的实验结果(保证FLOPs是相同的)如下所示,

    实验结果3.jpg

    因此从上图应该可以很清晰的看到单个卷积的操作效率是最高的,而这也可以解释为更多的分支意味着需要更多的卷积核加载和同步操作。

    2.1.4 Element-wise operations are non-negligible

    不能忽略元素级别的操作。

    我们通常在考量FLOPs的时候,并不会去关心那种元素级别的操作,比如ReLU, AddTensor, AddBias等等,但其实从上面那张占比图来看,我们就会发现元素级别的操作也是很耗时的,他们主要耗时的点就是过大的MAC,这里作者通过实验发现如果把ResNet模块中的ReLU和shortcut移除的话,会带来20%速度的提升。具体的实验结果如下,

    实验结果4.jpg

    因此,总结上面4条实验结论为(摘自原论文),
    1)use ”balanced“ convolutions (equal channel width)
    2)be aware of the cost of using group convolution
    3)reduce the degree of fragmentation
    4)reduce element-wise operations

    2.2 ShuffleNet V2设计思想理解

    这里贴一个第一代的阅读笔记,方便大家理解后文。
    ShuffleNetV1论文笔记

    仔细分析一下ShuffleNet的第一代版本,我们可以发现在第一代中大量使用了1*1的组卷积,这显然违背了上面的第2条,另外还采用了类似ResNet中的bottleneck layer,即输入和输出通道数不同,又违背了第1条,同时还用了更多的分组违背了第3条,还有shortcut连接,违背了第4条。。。。。。

    可以,把自己的上一代的缺点说了个遍。。。总之就是不大行。。。于是推出了新一代ShuffleNet,和第一代的结构对比图如下所示,

    结构对比图.jpg

    可以很清晰的看到,引入了一种新的操作,Channel Split

    整体可以分为这几个步骤来描述,
    1)对输入通道进行划分,通道数为c'c-c',实际实现就是一半一半。
    2)左边的分支做同等映射,右边的分支包含3个连续的卷积,并且输入和输出通道相同,符合第一条。且取消了组卷积,符合第二条。
    3)然后将左右俩个分支相连接(保证了通道数与输入仍是一致的),紧接着再对连接后的通道做channel shuffle,保证信息的交流。

    而对于下采样模块,就没有Split操作了,而是直接一个分支复制一份输入,最后再连接,相当于特征空间大小减半,通道数翻倍。

    至此整一套ShuffleNetV2的设计理念已经讲清楚了~至于效果实验部分,大家可以看原论文~有关的源码分析可以看这篇文章

    总之,读完这篇论文的感受就是,给我们这些佛系调参工程师,提供了很多宝贵的意见~以及对整个网络的设计细节有了更深刻的理解~强烈推荐相关人员也精度一下这篇论文~

    ------------------第三菇 - 总结------------------

    3.1 总结

    到这里,整篇论文的核心思想已经说清楚了。本论文主要在ShuffleNetV1的基础上又提出了改良版ShuffleNet V2,并对各自改进提供了充实的理论依据,还同时提出了4条设计准则,为后续发展奠定了基础。

    简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对整个ShuffleNet V2网络相比于ShuffleNetV1改进的地方和设计思想理念。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

    相关文章

      网友评论

          本文标题:【CV论文笔记】ShuffleNet V2: Practical

          本文链接:https://www.haomeiwen.com/subject/ygkwchtx.html