ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices阅读
ShuffleNet
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
最近学习完ShuffleNet V1,参考DFANN博客,对其总结修改了下
ref:https://blog.****.net/u011974639/article/details/79200559#commentsedit
原文地址: ShuffleNet
代码:
Abstract
我们介绍了一个计算效率极高的CNN架构ShuffleNet,它是专门为计算能力非常有限的移动设备(例如,10-150 MFLOPs)而设计的。该结构利用逐点群卷积(pointwise group convolution)和通道混洗(channel shuffle)两种新的运算方法,在保证计算精度的同时,大大降低了计算成本。ImageNet分类和MS COCO对象检测实验表明,在40 MFLOPs的计算预算下,ShuffleNet的性能优于其他结构,例如,在ImageNet分类任务上,top-1错误(绝对7.8%)比最近的MobileNet[12]低。在基于arm的移动设备上,ShuffleNet比AlexNet实际加速了13次,同时保持了相当的准确性。
Introduction
现许多CNNs模型的发展方向是更大更深,这让深度网络模型难以运行在移动设备上,针对这一问题,许多工作的重点放在对现有预训练模型的修剪、压缩或使用低精度数据表示。
论文中提出的ShuffleNet是探索一个可以满足受限的条件的高效基础架构。论文的Insight是现有的先进basic架构如 Xception具有shuffle操作性能提升较多,这表现出Shuffle操作的重要性。卷积耗费很多计算资源,论文提出了逐点群卷积(pointwise group convolution
)帮助降低计算复杂度;但是使用逐点群卷积会有幅作用,故在此基础上,论文提出通道混洗(channel shuffle
)帮助信息流通。基于这两种技术,我们构建一个名为ShuffleNet的高效架构,相比于其他先进模型,对于给定的计算复杂度预算,ShuffleNet允许使用更多的特征映射通道,在小型网络上有助于编码更多信息。
论文在ImageNet和MS COCO上做了相关实验,展现出ShuffleNet设计原理的有效性和结构优越性。同时论文还探讨了在真实嵌入式设备上运行效率。
Related Work
-
高效模型设计: CNNs在CV任务中取得了极大的成功,在嵌入式设备上运行高质量深度神经网络需求越来越大,这也促进了对高效模型的探究。例如,与单纯的堆叠卷积层,GoogleNet增加了网络的宽度,复杂度降低很多;SqueezeNet在保持精度的同时大大减少参数和计算量;ResNet利用高效的bottleneck结构实现惊人的效果。Xception中提出深度可分卷积概括了Inception序列。MobileNet利用深度可分卷积构建的轻量级模型获得了先进的成果;ShuffleNet的工作是推广群卷积(group convolution)和深度可分卷积(depthwise separable convolution)。
-
模型加速: 该方向旨在保持预训练模型的精度同时加速推理过程。常见的工作有:通过修剪网络连接或减少通道数减少模型中连接冗余;量化和因式分解减少计算中冗余;不修改参数的前提下,通过FFT和其他方法优化卷积计算消耗;蒸馏将大模型的知识转化为小模型,是的小模型训练更加容易;ShuffleNet的工作专注于设计更好的模型,直接提高性能,而不是加速或转换现有模型。
Approch
针对群卷积的通道混洗(Channel Shuffle for Group Convolutions)
现代卷积神经网络会包含多个重复模块。其中,最先进的网络例如Xception和ResNeXt将有效的深度可分离卷积或群卷积引入构建block中,在表示能力和计算消耗之间取得很好的折中。但是,我们注意到这两个设计都没有充分采用3×3卷积配有群卷积,逐点卷积占了93.4%的multiplication-adds。
在小型网络中,昂贵的逐点卷积造成有限的通道之间充满约束,这会显著的损失精度。为了解决这个问题,一个直接的方法是应用通道稀疏连接,例如组卷积(group convolutions)。通过确保每个卷积操作仅在对应的输入通道组上,组卷积可以显著的降低计算损失。然而,如果多个组卷积堆叠在一起,会有一个副作用: 某个通道输出仅从一小部分输入通道中导出,如下图(a)所示,这样的属性降低了通道组之间的信息流通,降低了信息表示能力。
如果我们允许组卷积能够得到不同组的输入数据,即上图(b)所示效果,那么输入和输出通道会是全关联的。具体来说,对于上一层输出的通道,我们可做一个混洗(Shuffle)操作,如上图©所示,再分成几个组,feed到下一层。
对于这个混洗操作,有一个有效高雅(efficiently and elegantly)的实现:
对于一个卷积层分为g组,
- 有g×n g×ng×n个输出通道
- reshape为(g,n) (g,n)(g,n)
- 再转置为(n,g) (n,g)(n,g)
- 平坦化,再分回g gg组作为下一层的输入
示意图如下:
这样操作有点在于是可微的,模型可以保持end-to-end训练.
Shuffle unit
前面我们讲了通道混洗的好处了,在实际过程中我们构建了一个ShuffleNet unit,便于构建实际模型。
-
图(a)是一个残差模块。对于主分支部分,我们可将其中标准卷积g=8),具有shuffle操作性能提升较多,这表现出Shuffle操作的重要性。
Comparison with Other Structure Units
我们对比不同unit之间的性能差异,使用表1的结构,用各个unit控制阶段2-4之间的Shuffle unit,调整通道数保证复杂度类似。
可以看到ShuffleNet的表现是比较出色的。有趣的是,我们发现特征映射通道和精度之间是存在直观上的关系,以38MFLOPs为例,VGG-like, ResNet, ResNeXt, Xception-like, ShuffleNet模型在阶段4上的输出通道为50, 192, 192, 288, 576,这是和精度的变化趋势是一致的。我们可以在给定的预算中使用更多的通道,通常可以获得更好的性能。上述的模型不包括GoogleNet或Inception结构,因为Inception涉及到太多超参数了,做为参考,我们采用了一个类似的轻量级网络PVANET。结果如下:
ShuffleNet模型效果要好点
Comparison with MobileNets and Other Frameworks
与MobileNet和其他模型相比:
相比于不同深度的模型对比,可以看到我们的模型要比MobileNet的效果要好,这表明ShuffleNet的有效性主要来源于高效的结构设计,而不是深度。Generalization Ability
我们在MS COCO目标检测任务上测试ShuffleNet的泛化和迁移学习能力,以Faster RCNN为例:
ShuffleNet的效果要比同等条件下的MobileNet效果要好,我们认为收益源于ShuffleNet的设计。Actual Speedup Evaluation
评估ShuffleNet在ARM平台的移动设备上的推断速度。
三种分辨率输入做测试,由于内存访问和其他开销,原本理论上4倍的加速降低到了2.6倍左右。
Conclusion
论文针对现多数有效模型采用的逐点卷积存在的问题,提出了
组卷积
和通道混洗
的处理方法,并在此基础上提出了一个ShuffleNet unit,后续对该单元做了一系列的实验验证,证明ShuffleNet的结构有效性。
ShuffleNet
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
最近学习完ShuffleNet V1,参考DFANN博客,对其总结修改了下
ref:https://blog.****.net/u011974639/article/details/79200559#commentsedit
原文地址: ShuffleNet
代码:
Abstract
我们介绍了一个计算效率极高的CNN架构ShuffleNet,它是专门为计算能力非常有限的移动设备(例如,10-150 MFLOPs)而设计的。该结构利用逐点群卷积(pointwise group convolution)和通道混洗(channel shuffle)两种新的运算方法,在保证计算精度的同时,大大降低了计算成本。ImageNet分类和MS COCO对象检测实验表明,在40 MFLOPs的计算预算下,ShuffleNet的性能优于其他结构,例如,在ImageNet分类任务上,top-1错误(绝对7.8%)比最近的MobileNet[12]低。在基于arm的移动设备上,ShuffleNet比AlexNet实际加速了13次,同时保持了相当的准确性。
Introduction
现许多CNNs模型的发展方向是更大更深,这让深度网络模型难以运行在移动设备上,针对这一问题,许多工作的重点放在对现有预训练模型的修剪、压缩或使用低精度数据表示。
论文中提出的ShuffleNet是探索一个可以满足受限的条件的高效基础架构。论文的Insight是现有的先进basic架构如 Xception具有shuffle操作性能提升较多,这表现出Shuffle操作的重要性。卷积耗费很多计算资源,论文提出了逐点群卷积(pointwise group convolution
)帮助降低计算复杂度;但是使用逐点群卷积会有幅作用,故在此基础上,论文提出通道混洗(channel shuffle
)帮助信息流通。基于这两种技术,我们构建一个名为ShuffleNet的高效架构,相比于其他先进模型,对于给定的计算复杂度预算,ShuffleNet允许使用更多的特征映射通道,在小型网络上有助于编码更多信息。
论文在ImageNet和MS COCO上做了相关实验,展现出ShuffleNet设计原理的有效性和结构优越性。同时论文还探讨了在真实嵌入式设备上运行效率。
Related Work
-
高效模型设计: CNNs在CV任务中取得了极大的成功,在嵌入式设备上运行高质量深度神经网络需求越来越大,这也促进了对高效模型的探究。例如,与单纯的堆叠卷积层,GoogleNet增加了网络的宽度,复杂度降低很多;SqueezeNet在保持精度的同时大大减少参数和计算量;ResNet利用高效的bottleneck结构实现惊人的效果。Xception中提出深度可分卷积概括了Inception序列。MobileNet利用深度可分卷积构建的轻量级模型获得了先进的成果;ShuffleNet的工作是推广群卷积(group convolution)和深度可分卷积(depthwise separable convolution)。
-
模型加速: 该方向旨在保持预训练模型的精度同时加速推理过程。常见的工作有:通过修剪网络连接或减少通道数减少模型中连接冗余;量化和因式分解减少计算中冗余;不修改参数的前提下,通过FFT和其他方法优化卷积计算消耗;蒸馏将大模型的知识转化为小模型,是的小模型训练更加容易;ShuffleNet的工作专注于设计更好的模型,直接提高性能,而不是加速或转换现有模型。
Approch
针对群卷积的通道混洗(Channel Shuffle for Group Convolutions)
现代卷积神经网络会包含多个重复模块。其中,最先进的网络例如Xception和ResNeXt将有效的深度可分离卷积或群卷积引入构建block中,在表示能力和计算消耗之间取得很好的折中。但是,我们注意到这两个设计都没有充分采用3×3卷积配有群卷积,逐点卷积占了93.4%的multiplication-adds。
在小型网络中,昂贵的逐点卷积造成有限的通道之间充满约束,这会显著的损失精度。为了解决这个问题,一个直接的方法是应用通道稀疏连接,例如组卷积(group convolutions)。通过确保每个卷积操作仅在对应的输入通道组上,组卷积可以显著的降低计算损失。然而,如果多个组卷积堆叠在一起,会有一个副作用: 某个通道输出仅从一小部分输入通道中导出,如下图(a)所示,这样的属性降低了通道组之间的信息流通,降低了信息表示能力。
如果我们允许组卷积能够得到不同组的输入数据,即上图(b)所示效果,那么输入和输出通道会是全关联的。具体来说,对于上一层输出的通道,我们可做一个混洗(Shuffle)操作,如上图©所示,再分成几个组,feed到下一层。
对于这个混洗操作,有一个有效高雅(efficiently and elegantly)的实现:
对于一个卷积层分为g组,