目录
预备知识
1. 回顾MobileNet V1的核心思想---深度可分离卷积
2.ShuffleNet主要有两个创新点
2.1 分组卷积与1×1分组卷积
2.2 channel Shuffle(通道重排)
2.3 通道重排过程
3. ShuffleNet网络结构
3.1 ShuffleNet unit
3.2 不同分组数的ShuffleNet网络结构
4. ResNet、ResNeXt、ShuffleNetV1 基本单元 FLOPs 对比
5. 推荐阅读
预备知识
卷积神经网络概述
https://www.bilibili.com/video/BV1sb411P7pO
https://www.bilibili.com/video/BV1gb411P7JD
卷积神经网络精讲
https://www.bilibili.com/video/BV1K7411W7So?p=5
https://www.bilibili.com/video/BV1K7411W7So?p=6
经典卷积神经网络结构
https://www.bilibili.com/video/BV1K7411W7So?p=11
谷歌轻量化卷积神经网络MobileNet V1
https://www.bilibili.com/video/BV16b4y117XH
1. 回顾MobileNet V1的核心思想---深度可分离卷积
Howard 等人提出的 MobileNet V1利用深度可分离卷积对标准的卷积操作进行了分解,如图3所示.
深度可分离卷积可分为深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)两个操作:
(1)深度卷积对于每个输入通道采用不同的卷积核,即一个通道对应一个卷积核,卷积操作是按照通道进行分解的;
(2)逐点卷积是卷积核大小为 1×1 的标准卷积,作用在输入的所有通道上,将来自不同通道的特征进行融合.
对于任意大小的图像,应用深度可分离卷积能节省多少时间呢?假设对于一个大小为 H×W×D 的输入图像,我们要进行 2D 卷积(步幅=1,填充=0),使用 Nc 个大小为 h×h×D 的卷积核。这将把输入层 (H×W×D) 转换为输出层 (H−h+1×W−h+1×Nc)。所需的乘法运算总量为:Nc×h×h×D×(H−h+1)×(W−h+1)。
另一方面,对于相同的转换,深度可分离卷积所需的乘法运算总量为:
D×h×h×1×(H−h+1)×(W−h+1)+Nc×1×1×D×(H−h+1)×(W−h+1) =(h×h+Nc)×D×(H−h+1)×(W−h+1)。
深度可分离卷积和二维卷积之间的乘法运算比率是:
简化后得到:
对于大多数现代架构来说,输出层通常有许多通道,例如几百个甚至几千个【这样会导致深度可分离卷积的主要计算量集中在 1×1 的逐点卷积上。】。在这样的层中(Nc>>h),上述表达式简化为 1/(h×h)。这意味着在这种渐近情况下,如果使用 3 x 3 的滤波器,2D 卷积的计算量是深度可分卷积的 9 倍;如果使用 5 x 5 的滤波器,则是 25 倍。
深度可分离卷积的主要计算量集中在 1×1 的逐点卷积上还可根据MobileNet论文中表2.
因此:深度可分离卷积的主要计算量集中在 1×1 的逐点卷积上。为解决这个问题,ShuffleNet提出了 Group 逐点卷积,将逐点卷积进行分组卷积操作,以降低在逐点卷积操作方面的计算消耗。
2.ShuffleNet主要有两个创新点
Group Pointwise Convolution(1×1分组卷积);channel Shuffle(通道重排)。
2.1 分组卷积与1×1分组卷积
分组卷积(Grouped Convolutions)是一种卷积操作,最早由 AlexNet 引入并在 ResNeXt 和 MobileNet 等模型中广泛使用。与传统的卷积不同,分组卷积将输入特征通道分成多个小组,并在每个小组上分别进行卷积操作,最后将各个组的结果进行拼接。它可以减少计算复杂度,提高卷积操作的效率,特别是在处理大量特征通道时。
上图来源:CondenseNet: An Efficient DenseNet using Learned Group Convolutions
标准卷积参数量:3×3×12×6=648;分组卷积参数量:3×3×(12/3)×(6/3)*3=216
1×1 分组卷积是分组卷积的一种特殊情况,其中卷积核的大小为 1×1。1×1 卷积本身已经是一个非常高效的操作,通常用于降低通道维度或进行通道间的线性组合。而通过在 1×1 卷积中引入分组卷积,则可以进一步减少计算量。
1×1 分组卷积的原理:
-
1×1 卷积:使用 1×1 大小的卷积核,只在通道维度上进行计算,不改变空间维度。它的作用通常是对输入特征进行通道混合,即每个输出通道是输入所有通道的加权求和。
-
分组卷积:在常规分组卷积中,输入通道被分成若干组,每个组独立应用卷积核。
将两者结合,1×1 分组卷积的操作流程如下:
- 将输入特征通道划分为若干组,每组单独进行 1×1 卷积。
- 各组之间的卷积是独立的,卷积核只在组内的通道上进行运算,组与组之间不会有任何信息共享。
- 最终将各个组的结果拼接成完整的输出特征图。
举例:
假设输入张量的大小为 H×W×C,其中 H 和 W 是空间尺寸,C 是通道数。若使用 1×1 分组卷积,并且将通道分成 4 组,则每个组的卷积核只作用于 C/4 个通道,输出也相应是 4 组卷积结果的拼接。
2.2 channel Shuffle(通道重排)
图 (a)为一般分组卷积,造成分组之间信息无法流通; 图 (b)和图 (c)为通道混洗(channel shuffle)操作.
ShuffleNet首先将输入通道分组,在每个组中进行单独的卷积运算.如果单纯地堆叠分组卷积操作,会造成各个组之间的信息无法流通,影响网络的表达能力.为了让分组卷积能够得到其他分组产生的特征,ShuffleNet 提出了混洗(shuffle)操作,将来自不同组的特征重新进行排列,使得新的分组中包含来自之前各个组的特征,保证了各个组之间的信息流通.
2.3 通道重排过程
3. ShuffleNet网络结构
3.1 ShuffleNet unit
(a)图表示具有3×3 DWConv(depthwise convolution)卷积模块的BottleNeck模块。
(b)图表示具有1×1 GConv(pointwise group convolution) 和channel shuffle 的ShuffleNet unit。
(c)图表示stride=2时的ShuffleNet unit。
3.2 不同分组数的ShuffleNet网络结构
4. ResNet、ResNeXt、ShuffleNetV1 基本单元 FLOPs(只考虑乘法) 对比
给定输入尺寸大小为c×h×w,bottleneck通道数为m。
c=256;m=64 c=256;m=4;g=cardinality=32
5. 推荐阅读
知乎:如何看待 Face++旷视科技出品的轻量高效网络 ShuffleNet ?https://ww.zhihu.com/question/62243686
知乎:如何评价shufflenet V2 ? https://www.zhihu.com/question/287433673/answer/455350957
知乎:轻量级神经网络“巡礼”(-)-- ShuffleNetV2:https://zhuanlan.zhihu.com/p/67009992