ShuffleNet V2学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhongqianli/article/details/86745699

paper:《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design》

导语

神经网络架构的设计目前主要由计算复杂度的间接指标(即FLOPs)来指导。但是,直接指标(如速度)还依赖于其他因素,如内存访问成本(MAC)和平台特点。
作者指出过去在网络架构设计上仅注重间接指标 FLOPs 的不足,并提出两个基本原则和四个实用准则来指导网络架构设计,最终得到了无论在速度还是精度上都超越先前最佳网络(如 ShuffleNet V1、MobileNet 等)的 ShuffleNet V2。

引言

度量计算复杂度的常用指标是浮点运算数,即 FLOPs。然而,FLOPs 是一种间接指标。它只是本文真正关心的直接指标(如速度或延迟)的一种近似形式,通常无法与直接指标划等号。将 FLOPs 作为衡量计算复杂度的唯一标准是不够的,这样会导致次优设计。
间接指标 (FLOPs) 和直接指标(速度)之间存在差异的原因可以归结为两点:(1)内存访问成本;(2)并行度。

设计原则

研究者提出了高效网络架构设计应该考虑的两个基本原则:第一,应该用直接指标(例如速度)替换间接指标(例如 FLOPs);第二,这些指标应该在目标平台上进行评估。

实用准则

提出了设计高效网络架构需要遵循的准则:
•G1. 相同的通道宽度可最小化内存访问成本(MAC);
•G2. 过度的组卷积会增加 MAC;
•G3. 网络碎片化(例如 GoogLeNet 的多路径结构)会降低并行度;
•G4. 元素级运算不可忽视。

本文总结出一个高效的网络架构应该:(1)使用「平衡」的卷积(相同的通道宽度);(2)考虑使用组卷积的成本;(3)降低碎片化程度;(4)减少元素级运算。

ShuffleNet V2

ShuffleNet V1 回顾

根据 ShuffleNet V1,轻量级网络的主要挑战是在给定计算预算(FLOPs)时,只能获得有限数量的特征通道。为了在不显著增加 FLOPs 情况下增加通道数量,ShuffleNet V1 采用了两种技术:逐点组卷积核和类瓶颈(bottleneck-like)结构然后引入「channel shuffle」操作,令不同组的通道之间能够进行信息交流,提高精度。其构建模块如图 3(a)(b) 所示。
如第二部分所述,逐点组卷积和瓶颈结构都增加了 MAC(G1 和 G2)。这个成本不可忽视,特别是对于轻量级模型。另外,使用太多分组也违背了 G3。捷径连接(shortcut connection)中的元素级「加法」操作也不可取 (G4)。因此,为了实现较高的模型容量和效率,关键问题是如何保持大量且同样宽的通道,既没有密集卷积也没有太多的分组。

通道分割【caffe中的Slice操作】

为此,本文引入一个简单的操作——通道分割(channel split)。如图 3© 所示。在每个单元的开始,c 特征通道的输入被分为两支,分别带有 c−c’ 和 c’个通道。按照准则 G3,一个分支仍然保持不变。另一个分支由三个卷积组成,为满足 G1,令输入和输出通道相同。与 ShuffleNet V1 不同的是,两个 1×1 卷积不再是组卷积。这部分是为了遵循 G2,部分是因为分割操作已经产生了两个组。
卷积之后,把两个分支拼接起来,从而通道数量保持不变 (G1)。然后进行与 ShuffleNet V1 相同的「Channel Shuffle」操作来保证两个分支间能进行信息交流
「Shuffle」之后,下一个单元开始运算。注意,ShuffleNet V1 [15] 中的「加法」操作不再存在。像 ReLU 和深度卷积这样的操作只存在一个分支中。另外,三个连续的操作「拼接」、「Channel Shuffle」和「通道分割」合并成一个操作。根据 G4,这些变化是有利的。
对于空间下采样,该单元经过稍微修改,详见图 3(d)。通道分割运算被移除。因此,输出通道数量翻了一倍。
本文提出的构造块 ©(d),以及由此而得的网络,被称之为 ShuffleNet V2。基于上述分析,本文得出结论:由于对上述四个准则的遵循,该架构设计异常高效。
上述构建模块被重复堆叠以构建整个网络。为简单起见,本文令 c’ = c/2。整个网络结构类似于 ShuffleNet V1(见表 5)。二者之间只有一个区别:前者在全局平均池化层之前添加了一个额外的 1×1 卷积层来混合特征,ShuffleNet V1 中没有该层。与 ShuffleNet V1 类似,每个构建块中的通道数量可以扩展以生成不同复杂度的网络,标记为 0.5×、1× 等。

在这里插入图片描述
在这里插入图片描述

实现

https://github.com/farmingyard/ShuffleNet

内容主要摘自文章《ECCV 2018 | 旷视科技提出新型轻量架构ShuffleNet V2:从理论复杂度到实用设计准则》:https://www.sohu.com/a/244491616_418390

扫描二维码关注公众号,回复: 5179180 查看本文章

猜你喜欢

转载自blog.csdn.net/zhongqianli/article/details/86745699