【CV论文笔记】ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

本文主要用于介绍旷世于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改进的地方和设计思想理念。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容