轻量化网络ShuffleNet V1

旷视轻量化网络ShuffleNet V1

(本篇笔记主要是作者根据同济子豪兄的精讲论文视频进行撰写,用于作者自己学习掌握相关知识【精读AI论文】旷视轻量化网络ShuffleNet V1_哔哩哔哩_bilibili

作者:张翔宇、孙健。

他们都是和当年何凯明、任少卿一起写ResNet的,都是微软亚洲研究院。

誉为“AI四小龙”的商汤科技、旷视科技、依图科技、云从科技四家AI独角兽

ReadPaper

在轻量化卷积神经网络里面不仅要考虑参数量、计算量、内存访问量,还要考虑耗时、能耗和碳排放,可以和前沿的各种政策以及it技术结合。

 

上图单位参数量对最终准确率的共享(参数量的效率),

shuffleNet、MobileNet、SqueezeNet的效率都是很高的:参数很高,运算效率很快


孙健


SHuffleNet有两个创新点:

分组1x1卷积

通道重排

原来卷积


分组卷积

可以显著降低参数量和计算量,分组卷积是卷积核分开进行卷积

上述是Mobilenet的原理,逐点卷积和逐通道卷积

a为普通卷积,b是分组卷积

 

分组卷积在很早之前就有了,我查阅相关文献,发现,LeNet-5这篇文章中,1990年写的这个卷积神经网络的最早版本。当时因为算力有限,不得不使用分组卷积的形式引入稀疏连接,如果让一卷核处理所有通道的话,算力达不到要求,所以当时未了折中,使用了稀疏连接。

2012年AlexNet,算力有限,把模型并行在两个GPU上,每个GPU只保留一半的channel,这其实也是一种分组卷积,到2018年,shufflenet也用到了分组卷积,但是这个时候不受算力影响了,而是专门把算力降下去,做轻量化网络。

包括ResNet的残差连接,早在上世纪的LSTM(长短时记忆神经网络)的遗忘门就是一个残差连接。

总结:

有些很好的论文我认为是旧瓶装新酒,一些很早以前就有的概念,我们拿来解决新的问题,发现他是可行的,是新work,这是人工智能一个技术迭代螺旋上升的一个路径。

有些技术是别人已经想到过的,但是你发现它可以用来解决新问题,这就是一种创新。


通道重排(Channel Shuffle)

跨组进行信息交流

先Reshape成g行n列矩阵,在transpose转置一下,最后Flatten,并不费什么算力。

reshape:

实现维度的转换,比如

arr = [1,2,3,4,5,6,7,8,9] 一个一维的list,长度为9

现在,我想把arr变成一个3*3的矩阵,这就可以用的reshape了,两个方法,第一

arr.reshape(3,3)

arr.reshape(-1,3) 这样也可以把arr变成3*3的矩阵,这个-1代表的意思就是,我不知道可以分成多少行,但是我的需要是分成3列,多少行我不关心,

transpose

transpose方法的作用是交换矩阵的两个维度

Flatten层:

用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。

ShuffleNet网络结构

a:把原来的3x3标准卷积改成3x3的depthwise卷积,先在1x1卷积中降维,再在3x3卷积中升维,

分组卷积个数增加后,通道数可以加多,在保证算力不变的情况下,可以显著提升小网络的表示性能,

对于小模型而言,分组数越大,性能提升越明显,

上述证明了分组是有用的,Shuffle是有用的

ShuffleNet论文精读

衡量一个轻量化网络:参数量,计算量,内存访问时,耗时,能耗等

可以和it技术其他人工智能领域结合:例如对抗学习,transformer,Attention,神经架构Nas结合。

也可以与硬件端如嵌入式开发,FPGA,软硬件协同设计,芯片等结合

摘要

我们介绍了一种名为ShuffleNet的计算效率极高的CNN架构,该架构专为计算能力非常有限的移动的设备设计(例如,10- 150MFLOP)。新的架构利用两个新的操作,逐点组卷积和信道混洗,以大大降低计算成本,同时保持准确性。ImageNet分类和MS COCO目标检测实验表明,ShuffleNet优于其他结构,如.在ImageNet分类任务上,在40 MFLOP的计算预算下,比最近的MobileNet [12]更低的top-1错误(绝对7.8%)。在基于ARM的移动终端上,ShuffleNet实现了AlexNet的13倍实际加速,同时保持了相当的精度。

总结
​
本文介绍了名为ShuffleNet一种计算效率极高的CNN架构,应用于有限的移动设备(例如计算处理速度在10百万次到150百万次的浮点运算)。新的架构有两种新的创新,一种是分组卷积,另一种是通道重排,在保证准确性的同时降低计算成本。在ImageNet分类和MSCOCO目标监测的实验过程中都优于其他结构。
​
其中在同等算力40MFLOP的情况下,ShuffleNet错误绝对降低了7.8%。
在基于ARM的移动终端上,SHuffleNet在保证模型的精度情况下,实现了AlexNet的13倍加速。

移动设备
指可以携带和使用的便携式电子设备,可以在不需要外部电源的情况下工作。
​
常见的移动端设备包括:
​
1. 手机
​
2. 平板电脑
​
3. 笔记本电脑
​
4. 可穿戴设备
​
5. 智能家居设备
​
移动端设备通常具有操作系统、应用程序和网络连接能力,使用户能够在任何地方进行各种任务和活动。
边缘设备
边缘设备(Edge devices)是指位于网络边缘或接近数据源的计算设备,其目的是在离数据生成和处理的源头更近的地方进行数据处理、存储和计算。边缘设备可以解决传统云计算模型中数据传输延迟和带宽压力的问题。
​
边缘设备可以是各种物理设备,如智能手机、传感器、摄像头、物联网设备、工业控制系统等。这些设备通常具有一定的计算能力、存储能力和网络连接能力,可以收集、处理和存储数据,并将结果传输到中心服务器或其他边缘设备。
特点:
​
1. 低延迟:由于边缘设备位于数据源附近,可以在接近实时的情况下进行数据处理和响应,减少了传输到云端的延迟。
​
2. 数据本地处理:边缘设备可以在本地对数据进行处理和分析,减少对云端资源的依赖,提高数据隐私和安全性,并减少对网络带宽的需求。
​
3. 离线功能:边缘设备通常具有离线工作能力,即使在没有网络连接的情况下也能执行基本的数据处理和功能。
​
4. 分布式计算:边缘设备可以与其他边缘设备或中心服务器进行协同计算,共享计算任务和资源,提高整体计算能力和效率。
​
边缘计算架构的出现使得在边缘设备上进行数据处理和计算成为可能,可以更好地满足对实时性、安全性和带宽效率的需求,推动了物联网、智能城市、工业自动化等领域的发展。
嵌入式设备:
嵌入式设备(Embedded devices)是指被嵌入到其他系统或产品中,用于执行特定功能的专用计算设备。与通用计算设备(如个人计算机)相比,嵌入式设备通常具有更小、更紧凑、更低功耗的设计,并且专注于特定的任务或应用领域。
​
嵌入式设备广泛应用于各个领域,包括消费电子、汽车、工业自动化、医疗设备、家用电器、通信设备等。它们的功能范围从简单的传感器和执行器到复杂的控制系统和嵌入式计算机。
​
嵌入式设备通常具有以下特点:
​
1. 专用功能:嵌入式设备被设计用于执行特定的任务或提供特定的功能,例如测量、控制、通信、图像处理等。
​
2. 硬件和软件集成:嵌入式设备的硬件和软件通常是紧密集成的,以实现最佳性能和功耗的平衡。
​
3. 实时性要求:许多嵌入式系统需要在严格的实时性要求下工作,例如实时控制系统和嵌入式操作系统。
​
4. 低功耗:由于嵌入式设备通常是电池供电或需要长时间运行,功耗是一个重要考虑因素。
​
5. 小型化:嵌入式设备通常要求小型化和紧凑的设计,以适应各种应用场景。
​
常见的嵌入式设备包括传感器、执行器、单片机、嵌入式系统-on-chip(SoC)、工控机、智能家居设备等。这些设备在各个行业中发挥着重要的作用,使得系统能够实现自动化、智能化和互联互通。
智能终端:
智能终端(Smart terminals)是指具有智能化功能和互联网连接能力的终端设备。这些设备通常具有计算能力、存储能力和网络通信能力,能够进行数据处理、交互和传输。
​
智能终端的功能范围广泛,包括但不限于以下几种:
​
1. 智能手机:智能手机是最常见的智能终端,具备通话、短信、上网、社交媒体、拍照、视频播放等功能。
​
2. 平板电脑:平板电脑具有大屏幕触控界面,适用于上网浏览、电子邮件、办公应用、娱乐等。
​
3. 智能手表和可穿戴设备:智能手表和可穿戴设备集成了计步器、心率监测、通知推送等功能,可连接到智能手机或互联网。
​
4. 智能音箱:智能音箱可以通过语音控制进行音乐播放、语音助手、智能家居控制等。
​
5. 智能电视:智能电视具备互联网连接能力,可以通过应用程序进行视频流媒体、游戏、在线内容观看等。
​
6. 物联网终端设备:物联网终端设备如智能家居设备、智能摄像头、智能门锁等,能够通过互联网进行远程控制和监控。
​
智能终端通过连接互联网和云服务,使用户能够获取各种信息、享受娱乐、进行在线购物、远程控制设备等。这些终端设备的智能化和互联互通特性为我们的生活和工作带来了更多便利和灵活性。

ARM-based
ARM架构和x86架构是两种常见的计算机处理器架构,具有不同的设计理念和应用领域。 ARM架构: - ARM架构(Advanced RISC Machines)是一种精简指令集计算机(RISC)架构。它最初设计用于低功耗、嵌入式系统和移动设备,如智能手机、平板电脑和物联网设备。 - ARM架构的处理器通常具有较低的功耗和高能效,适合移动设备的长电池寿命和散热要求。 - ARM处理器具有可扩展性,从单核心到多核心设计,支持不同级别的性能需求。 - ARM架构的处理器由许多芯片制造商(如Qualcomm、Samsung和Apple)基于ARM指令集设计和制造。 x86架构: - x86架构是一种复杂指令集计算机(CISC)架构,主要用于个人计算机和服务器。它最常见于Intel和AMD等制造商的处理器。 - x86架构的处理器通常具有较高的计算性能,适合高性能计算、桌面应用和服务器领域。 - x86处理器在浮点计算性能上有一定优势,适合进行复杂的数值计算和科学应用。 - x86架构的处理器支持广泛的操作系统,如Windows、macOS和Linux,并且有丰富的软件和工具生态系统。 两种架构之间的主要区别在于其设计理念和应用领域。ARM架构专注于低功耗、移动和嵌入式应用,而x86架构则更适用于高性能计算、桌面应用和服务器领域

10-150MFLOP
10-150MFLOP表示计算机的浮点运算性能范围。FLOP代表每秒浮点运算次数(Floating Point Operations Per Second),是衡量计算机处理速度的一种单位。在这种情况下,10-150MFLOP表示该计算机的浮点运算性能在10到150百万次每秒之间变化。换句话说,该计算机的处理速度在每秒执行10百万次到150百万次浮点运算之间变化。


1.介绍

构建更深更大的卷积神经网络(CNN)是解决主要视觉识别任务的主要趋势。最精确的CNN通常有数百层和数千个通道,因此需要数十亿FLOP的计算。本报告考察了相反的极端:在非常有限的计算预算中追求最佳的准确性,在数十或数百个MFLOP,专注于常见的移动的平台,如无人机,机器人和智能手机。请注意,许多现有的作品专注于修剪,压缩或表示“基本”网络架构的低位。在这里,我们的目标是探索一个高效的基本架构,专门为我们所需的计算范围。

我们注意到最先进的基本架构,如Xception和ResNeXt ,由于昂贵的密集1 × 1卷积,在非常小的网络中效率较低。我们建议使用点态群卷积以降低1 × 1卷积的计算复杂度。为了克服群卷积带来的副作用,我们提出了一种新的通道洗牌操作,以帮助信息在特征通道之间流动。基于这两种技术,我们构建了一个高效的架构ShuffleNet。与VGG、ResNet、ResNext等流行结构相比,对于给定的计算复杂度预算,我们的ShuffleNet允许更多的特征映射通道,这有助于编码更多的信息,对非常小的网络的性能尤其重要。

我们在具有挑战性的ImageNet分类和MS COCO对象检测任务上评估了我们的模型。一系列的控制实验表明了我们的设计原则的有效性和更好的性能优于其他结构。与最先进的架构MobileNet相比,ShuffleNet实现了上级的性能优势,例如。在40 MFLOPs水平下,ImageNet top-1错误绝对降低7.8%。

我们还研究了真实的硬件上的加速比,即。一个现成的基于ARM的计算核心ShuffleNet模型在AlexNet 上实现了13倍的实际加速比(理论加速比为18倍),同时保持了相当的准确性。

总结:
​
本文主要是讲述在有限的计算预算情况下(如无人机、机器人、手机等)进行视觉识别任务。传统的卷积神经网络通常有数百层和数千层通道。需要大量的算力。为此作者直接设计一个本身就高效和轻量化的神经网络模型。
​
当今比较先进的网络模型(如Xception和ResNext),在算力有限的设备中效率较低。,主要原因是密集的1x1卷积操作需要大量算力开销。所以文章提出了分组1x1卷积,并引入了通道重排技术,以便信息直接的流动。
​
​
其中在同等算力40MFLOP的情况下,ShuffleNet错误绝对降低了7.8%。
​
在基于ARM的移动终端上,SHuffleNet在保证模型的精度情况下,实现了AlexNet的13倍加速。
​
​
​
​
​
​
​

Feature Channel
特征通道,也称为特征图或通道,指的是卷积神经网络(CNN)中捕捉输入图像或数据中特定模式或特征的各个组成部分或通道。
​
在CNN中,输入数据通过多层卷积、池化和非线性激活函数进行处理。每个层由一组滤波器或卷积核组成,每个滤波器的输出都是一个特征通道。这些特征通道编码了输入数据的不同方面,例如边缘、纹理、形状或更高层次的语义信息。
​
例如,在CNN的早期层中,特征通道可以捕捉边缘和纹理等低级特征,而更深层次的层可以捕捉更复杂和抽象的特征,如对象的形状或部分。
​
CNN层中的特征通道数量取决于该层应用的滤波器或卷积核的数量。每个滤波器产生一个特征通道作为其输出。通过使用多个滤波器,CNN可以学习和捕捉输入数据的多样特征。
​
特征通道在CNN中的数据表示和转换中起着关键作用。它们使网络能够逐步提取和编码不同抽象层次的相关信息,使网络能够学习适用于各种任务(包括图像分类、目标检测和分割)的具有区分性的特征。


2相关工作

高效的模型设计 过去几年,深度神经网络在计算机视觉任务中取得了成功,其中模型设计发挥了重要作用。在嵌入式设备上运行高质量深度神经网络的需求不断增长,鼓励了对高效模型设计的研究[8]。例如,GoogLeNet 增加了网络的深度,与简单地堆叠卷积层相比,复杂度要低得多。SqueezeNet 显著减少了参数和计算,同时保持了准确性。ResNet 利用高效的瓶颈结构来实现令人印象深刻的性能。SENet引入了一个架构单元,以轻微的计算成本提高性能。与我们同时进行的一个采用强化学习和模型搜索来探索有效的模型设计。所提出的移动的NASNet模型实现了与我们对应的ShuffleNet模型相当的性能(26.0%@564 MFLOP vs.对于ImageNet分类错误,524个MFLOP为26.3%)。但是没有报告非常小的模型的结果(例如复杂度小于150 MFLOP),也不评估移动的设备上的实际推理时间。

总结:介绍近年在嵌入式设备上运行高效的卷积神经网络模型。
​
GoogLeNet:通过增加网络的深度,以较低的复杂度实现了卓越的性能,相较于简单地堆叠卷积层。
SqueezeNet:显著减少了模型的参数和计算量,同时保持了准确性。
ResNet:利用高效的瓶颈结构实现了令人印象深刻的性能,在模型复杂度相对较低的情况下取得了出色的结果。
SENet:引入了一个架构单元,通过轻微的计算成本提高了性能。
​
NASNet模型采用强化学习和模型搜索设计结构,与ShuffleNet进行实验对比
NASNet在复杂度为564 MFLOPs(百万浮点运算次数)的情况下,实现了26.0%的ImageNet分类错误率。
ShuffleNet模型在复杂度为524 MFLOPs的情况下,实现了稍微更好的26.3%的ImageNet分类错误率。
​

分组卷积 组卷积的概念首次在AlexNet 中引入,用于将模型分布在两个GPU上,已经在ResNeXt 和DeepRoots 中很好地证明了其有效性。Xception 中提出的深度可分离卷积推广了Inception系列中可分离卷积的思想。最近,MobileNet 利用了深度可分离卷积,并在轻量级模型中获得了最先进的结果。我们的工作推广了群卷积和深度可分卷积在一个新的形式。

总结:每个卷积不再处理所有输入通道,而是只处理一部分输入通道

通道重排 据我们所知,在以前关于高效模型设计的工作中很少提到通道混洗操作的想法,尽管CNN库cuda-convnet 支持“随机稀疏卷积”层,这相当于随机通道混洗,然后是一个组卷积层。这样的“随机混洗”操作具有不同的目的并且很少被利用。最近,另一个并行工作也采用了这种两阶段卷积的想法。然而,没有专门研究通道洗牌本身的有效性及其在微小模型设计中的使用

总结:介绍CNN中的随机通道重排,没有专门在轻量化模型设计中使用和没有专门研究本身的有效性。(这也是ShuffleNet第一次投稿被拒的原因)

模型加速 该方向旨在加速推理,同时保持预训练模型的准确性。修剪网络连接或通道减少了预训练模型中的冗余连接,同时保持了性能。文献中提出了量化和因式分解,以减少计算中的冗余,从而加快推理。在不修改参数的情况下,通过FFT 和其他方法实现的优化卷积算法在实践中减少了时间消耗。Distilling 将知识从大模型转移到小模型中,这使得训练小模型变得更容易。

总结:对模型进行压缩预训练,加速卷积运算,进行知识蒸馏。

压缩预训练模型(Model Compression)指通过一系列技术手段减少神经网络模型的大小、计算量和内存消耗,同时尽量保持模型性能。常见的压缩方法包括参数剪枝(Pruning)、权重量化(Weight Quantization)、低秩分解(Low-Rank Decomposition)等,可以有效减少模型的存储需求和计算开销。

加速卷积运算(Accelerating Convolutional Operations)是指通过一系列技术手段来提高卷积神经网络中卷积操作的计算速度。可以采用硬件加速器(如GPU、TPU等)、优化卷积算法(如Winograd算法、FFT等)、使用混合精度计算等方法,以减少计算时间和提高效率。

知识蒸馏(Knowledge Distillation)是一种模型压缩的方法,通过将一个复杂的“教师”模型的知识传递给一个简化的“学生”模型,以帮助学生模型学习和泛化更好。通常,教师模型是一个较大且性能较好的模型,而学生模型是一个较小的模型。通过使用教师模型的输出概率分布或中间层特征作为目标,学生模型可以受益于教师模型的“知识”,从而提高自身的性能和泛化能力。这种方法可以在减少模型大小和计算开销的同时,保持较高的性能。


3方法

3.1分组卷积来通道重排

现代卷积神经网络(例如VGG、GooLeNet、InceptionV3、InceptionV4、ResNet)通常由具有相同结构的重复构建块组成。其中,Xception 和ResNeXt 等最先进的网络将有效的深度可分离卷积或群卷积引入构建块中,以在表示能力和计算成本之间取得良好的平衡。然而,我们注意到这两种设计都没有完全考虑1 × 1卷积(在[12]中也称为逐点卷积),这需要相当大的复杂性。例如,在ResNeXt 中,只有3 × 3层配备了群卷积。因此,对于ResNeXt中的每个残差单元,逐点卷积占用93.4%的乘法-加法(基数= 32,如[41]中所建议的)。在微小的网络中,昂贵的逐点卷积导致有限数量的通道来满足复杂度约束,这可能会显着损害准确性。

Xception和ResNet采用深度可分离卷积,但是没有考虑1x1卷积的优化加速。
很多计算都消耗在1x1卷积上。
​
​
扩展:
​
Xception(Extreme Inception)是由Google提出的架构,基于Inception模块的思想。它采用了深度分离卷积(Depthwise Separable Convolution)来替代传统的卷积操作。
​
ResNeXt是由微软提出的架构,是ResNet的扩展和改进版本。ResNet(Residual Network)是一种使用残差模块(Residual Block)的CNN架构,用于解决深层网络训练中的梯度消失和模型退化问题。ResNeXt在ResNet的基础上引入了“群”卷积(Group Convolution)的概念,通过将卷积操作拆分为多个并行的子卷积来增加模型的表示能力和非线性表达能力。通过增加群的数量,ResNeXt可以灵活地扩展模型的复杂度和性能。ResNeXt在ImageNet图像分类和其他计算机视觉任务中取得了优秀的结果。
​

要解决这个问题,一个简单的解决方案是层通道稀疏连接,例如分组卷积,也在1 × 1层上。通过确保每个卷积仅在对应的输入通道组上操作,分组卷积显著降低了计算成本。但是,如果多个分组卷积堆叠在一起,则会有一个副作用:来自某个信道的输出仅从输入信道的一小部分导出。图1(a)示出了两个堆叠的组卷积层的情况。很明显,来自某个组的输出仅与该组内的输入相关。此属性会阻止通道组之间的信息流,并削弱表示。

总结:分组卷积存在问题,会组织通道组之间的信息交流 

我们允许组卷积从不同的组获得输入数据(如图1(b)所示),则输入和输出通道将完全相关。具体来说,对于从上一个组层生成的特征图,我们可以首先将每个组中的通道划分为几个子组,然后用不同的子组馈送下一层中的每个组。这可以通过通道混洗操作(图1(c))有效且优雅地实现:假设具有g个组的卷积层,其输出具有g × n个信道;我们首先将输出通道维度整形为(g,n),转置,然后将其平坦化回作为下一层的输入。请注意,即使两个卷积具有不同数量的组,该操作仍然有效。此外,通道混洗也是可区分的,这意味着它可以嵌入到网络结构中进行端到端训练。

总结:使用通道重排实现跨组之间进行交流。Channel Shuffle通道重排的过程是先Reshape成g行n列矩阵,然后进行Transpose(转置),进行维度转化,最后通过Flatten将输入压“平”,多维变成一维。

通道重排操作使得可以使用多组卷积层构建更强大的结构。在下一小节中,我们将介绍一种具有信道混洗和组卷积的高效网络单元。

3.2ShuffleNet 单元

利用信道混洗操作的优势,我们提出了一种新的ShuffleNet单元,专门为小型网络设计。我们从图2(a)中瓶颈单元[9]的设计原理开始。这是一个残余块。在其残差分支中,对于3 × 3层,我们在瓶颈特征图上应用计算经济的3 × 3深度卷积[3]。然后,我们用逐点组卷积替换第一个1 × 1层,然后进行信道混洗操作,以形成ShuffleNet单元,如图2(b)所示。第二逐点群卷积的目的是恢复信道维度以匹配捷径路径。为了简单起见,我们在第二逐点层之后不应用额外的通道混洗操作,因为其导致可比较的分数。批量归一化(BN)[16]和非线性的使用类似于[9,41],除了我们不像[3]建议的那样在深度卷积之后使用ReLU。对于ShuffleNet应用于stride的情况,我们简单地做了两个修改(参见图2(c)):(i)在快捷路径上添加3 × 3平均池化;(ii)用信道级联代替逐元素加法,这使得容易以很少的额外计算成本来扩大信道维度。

 

首先图a,将ResNet中的bottleneck模块的3x3标准卷积改成3x3的depthwise卷积,先在1x1卷积中降维,再在3x3卷积中升维;
然后将1x1卷积替换成分组1x1卷积,并且加入Channel Shuffle(通道重排),如图b所示,这也是ShuffleNet的两个创新点(分组卷积和通道重排);
图c讲述的是下采样模块:SHuffleNet也使用了批量归一化处理和非线性激活函数,但是ShuffleNet在深度卷积后不适用Relu激活函数,当带有步幅为2的ShuffleNet中,进行了两个修改,一是在快捷路径上添加3x3的平均池化层,二是用通道连接替代元素级的加法操作。这样做的好处是在几乎没有额外计算成本的情况下扩大通道维度。

由于使用了通道混洗的逐点群卷积,可以有效地计算ShuffleNet单元中的所有分量。与ResNet [9](瓶颈设计)和ResNeXt [41]相比,在相同的设置下,我们的结构具有更低的复杂性。例如,给定输入大小c × h × w和瓶颈通道m,ResNet单元需要hw(2cm +9 m2)FLOPs,ResNeXt具有hw(2cm +9 m2/g)FLOPs,而我们的ShuffleNet单元仅需要hw(2cm/g +9 m)FLOPs,其中g表示卷积的组数。换句话说,给定计算预算,ShuffleNet可以使用更广泛的特征映射。我们发现这对小型网络至关重要,因为小型网络通常没有足够的通道来处理信息

此外,在ShuffleNet中,深度卷积仅在瓶颈特征图上执行。尽管深度卷积通常具有非常低的理论复杂度,但我们发现很难在低功耗移动的设备上有效地实现,这可能是由于与其他密集操作相比,计算/存储器访问比更差。这种缺点也在[3]中提到,其具有基于TensorFlow [1]的运行时库。在ShuffleNet单元中,我们故意只在瓶颈上使用深度卷积,以尽可能地防止开销。

总结:ShuffleNet的深度卷积仅应用于瓶颈部分,保持在高效性的同时减少额外的计算开销。模型的轻量化不能只考虑参数数量、计算量,还是内存、时间、能耗等方面影响。

3.3.网络架构

基于ShuffleNet单元构建,我们在表1中展示了整体ShuffleNet架构。建议的网络主要由一堆ShuffleNet单元组成,分为三个阶段。每个阶段中的第一构建块以步幅= 2应用。一级内的其他超参数保持不变,并且对于下一级,输出通道加倍。与[9]类似,我们将瓶颈通道的数量设置为每个ShuffleNet的输出通道的1/4单位。我们的目的是提供一个尽可能简单的参考设计,尽管我们发现进一步的超参数调整可能会产生更好的结果。

分析表1:表1中SHuffleNet模块堆叠在一起,分为3个阶段,每个阶段的第一模块为下采样模块,步幅为2,为图2的c部分,其他的步幅为1,为图2的b部分。每过一部分,SHuffleNet的尺寸减半,通道数加倍。
输入是图片为224x224x3的彩色图片,输出是1000个类别的概率,"FC"是"Fully Connected"的缩写,也被称为全连接层或密集连接层,
先通过普通的3x3卷积,步长为2,在进行3x3最大池化,步长也为2,生成24个通道,
Stage2是4个模块,Stage3是8个模块,stage4是4个模块,
SHuffleNet的尺寸减半,通道数加倍。
​
对于Stage2,因为通道24数量较少,没有进行分组卷积,直接1x1卷积处理了。
Stage4中,使用了7x7x960的Feature Map;然后进行全局平均池化,把960个channel(通道),每一个通道求一个平均池,就得到了960维的向量,这960维的向量在接1000个神经元的全连接层,也就是分类层,输出1000个类别的logit(原始的分类得分),对这1000个logit做softmax操作,转化为对应的概率值,得到这1000个的概率值进行归一化和为1,就实现了图像分类。

在ShuffleNet单元中,组号g控制逐点卷积的连接稀疏性。表1探讨了不同的组数,我们调整了输出通道,以确保总体计算成本大致不变(≈ 140 MFLOP)。显然,对于给定的复杂度约束,更大的组数导致更多的输出通道(因此更多的卷积滤波器),这有助于编码更多的信息,尽管由于有限的对应输入通道,它也可能导致单个卷积滤波器的劣化。在第4.1.1节中,我们将研究不同计算约束条件下该数值的影响。

为了将网络定制为期望的复杂度,我们可以简单地对通道的数量应用比例因子s。例如,我们将表1中的网络表示为“ShuffleNet 1×”,那么“ShuffleNet s×”意味着将ShuffleNet 1×中的过滤器数量缩放s倍,因此整体复杂度将大约是ShuffleNet 1×的s2倍。

 

分组卷积个数增加后,通道数可以加多,在保证算力不变的情况下,可以显著提升小网络的表示性能。
​
分组卷积也是一种稀疏连接,分组数g越大,计算量不变时,卷积核数增多,feature map通道数就越增多,但每个卷积核提取的通道越少。
​
​

表2说明:
"ShuffleNet s×" 表示对模型中的过滤器数量进行设置,增加过滤器数量可以提高模型的表示能力和性能,但也可能导致更高的计算开销。sx表示改变宽度超参数
​
​
ShuffleNet 1×:这是ShuffleNet的基准模型,没有进行宽度缩放。它代表着原始的ShuffleNet模型,其中的过滤器数量和复杂度没有进行缩放。
​
ShuffleNet 0.5×:这是ShuffleNet的一种缩小版本,宽度缩放因子为0.5。通过将过滤器数量减少一半,ShuffleNet 0.5×模型的整体复杂度约为ShuffleNet 1×的1/4。它具有更小的模型大小和计算开销,适用于计算资源受限的场景。
​
ShuffleNet 0.25×:这是ShuffleNet的更小的缩小版本,宽度缩放因子为0.25。通过进一步减少过滤器数量,ShuffleNet 0.25×模型的整体复杂度约为ShuffleNet 1×的1/16。它比ShuffleNet 0.5×更加轻量级,适用于非常计算资源受限的环境。

4实验

我们主要在ImageNet 2012分类数据集上评估我们的模型[30,4]。我们遵循[41]中使用的大多数训练设置和超参数,但有两个例外:(i)我们将权重衰减设置为4 e-5,而不是1 e-4,使用线性衰减学习率策略(从0.5降低到0);(ii)我们使用稍微不那么积极的尺度增强用于数据预处理。在[12]中也引用了类似的修改,因为这样的小网络通常遭受欠拟合而不是过拟合。在4个GPU上训练3×105次迭代的模型需要1到2天,其批量大小设置为1024。为了进行基准测试,我们比较了ImageNet验证集上的单一作物top-1性能,即从256×输入图像裁剪224×224中心视图,并评估分类精度。我们对所有模型使用完全相同的设置,以确保公平的比较

实验环境总结:本次实验作者使用了ImageNet2012分类数据集,每张图片从256x的图像上裁中心图设置为224x224.参考了ResNeXt的训练设置和超参数。将权重衰减(L2正则化)设置为4e-5,学习率采用线性衰减从0.5衰减到0.学习率在训练过程中逐渐降低。
​
数据预处理过程中采用了较少的数据增强策略,以减轻网络在欠拟合方面问题,因为本文是轻量化模型,所以不需要太担心过拟合问题,主要考虑欠拟合问题,所以防止过拟合的操作可以不用或者减弱。
​
模型的训练在4个GPU上进行,每个GPU的批量大小这是为1024,训练周期设置为3x10^5次,所需时间1-2天。
​
所有模型都在完全相同的设置上进行训练和评估。
​
​
说明:
"we set the weight decay to 4e-5" 表示将权重衰减(L2正则化)的系数设置为 4e-5。这个数值控制了权重衰减在总损失函数中的影响程度。较大的权重衰减系数会对权重施加更强的惩罚,促使模型的权重趋向于较小的值。
通过设置权重衰减系数,可以控制模型的正则化程度。适当的权重衰减可以帮助防止过拟合,并在训练过程中平衡模型的拟合能力和泛化能力。
​
4e-5表示的是4乘以10的负5次方,即4乘以0.00001。这是一种常用的表示小数的方式,其中的e表示指数。
​
​

4.1对比消融实验

ShuffleNet的核心思想在于逐点群卷积和通道混洗操作。在本小节中我们分别对它们进行评估

4.1.1点分组卷积

为了评估逐点群卷积的重要性,我们比较了具有相同复杂度的ShuffleNet模型,其组数范围从1到8。如果组号等于1,则不涉及逐点组卷积,然后ShuffleNet单元成为“Xception-like”[3]结构。为了更好地理解,我们还将网络的宽度扩展到3种不同的复杂度,并分别比较它们的分类性能。结果示于表2中。

从结果中,我们可以看到,具有群卷积(g> 1)的模型始终比没有逐点群卷积(g =1)的模型表现得更好。较小的模型往往从群体中受益更多。例如,对于ShuffleNet 1×,最佳条目(g =8)比对应条目好1.2%,而对于ShuffleNet 0.5×和0.25×,差距分别为3.5%和4.4%。请注意,组卷积允许针对给定复杂度约束的更多特征映射通道,因此我们假设性能增益来自更宽的特征映射,这有助于编码更多信息。此外,较小的网络涉及更薄的特征图,这意味着它从放大的特征图中受益更多。

表2还示出了对于一些模型(例如,ShuffleNet 0.5×)当组数变得相对较大时(e.g. g =8),则分类得分饱和或甚至下降。随着组数量的增加(因此更宽的特征图),每个卷积滤波器的输入通道变得更少,这可能损害表示能力。有趣的是,我们还注意到,对于ShuffleNet等较小的模型,0.25×较大的组数往往会带来更好的结果,这表明更宽的特征映射为较小的模型带来更多的好处。

总结:分组卷积个数增加后,通道数可以加多,在保证算力不变的情况下,可以显著提升小网络的表示性能,例外宽度参数越小,网络所需要的计算量也越小。
但是g不能太大,分组数g越大,计算量不变时,卷积核数增多,feature map通道数就越增多,但每个卷积核提取的通道越少。
​
对于ShuffleNet不同复杂度的模型,1x、0.5x、0.25x表示分别减少不同过滤波器数量,整体复杂度分别变为原来的1/4,、1/16,训练过程中所需要的算力减少,但是精准度会有所下降。

4.1.2通道重组与不重组

混洗操作的目的是实现多个组卷积层的跨组信息流。表3比较了具有/不具有信道混洗的ShuffleNet结构(例如,组号被设置为3或8)的性能。在三种不同的复杂性尺度下进行评估。很明显,频道混洗一致地提高了不同设置的分类分数。特别是,当组数相对较大时(例如,g =8),具有通道混洗的模型以显著的幅度优于对应物,这显示了跨组信息交换的重要性。

实验对比,有分组的效果比不分组的效果好
对于中等网络来说,shuffle后的效果增益效果不错,对于特别小的网络,shuffle的增益就不是很明显。

4.2.与其他结构单元的比较

VGG [31],ResNet [9],GoogleNet [34],ResNeXt [41]和Xception [3]中最近领先的卷积单元已经采用大型模型(例如,Res)追求最先进的结果。≥ 1GFLOPs),但未充分探索低复杂度条件。在本节中,我们将调查各种构建块,并在相同的复杂性约束下与ShuffleNet进行比较。

为了公平比较,我们使用表1所示的整体网络架构。我们用其他结构替换阶段2-4中的ShuffleNet单元,然后调整通道的数量以确保复杂度保持不变。我们探索的结构包括:

相同算力下比较不同模型
​
总结:像VGG、ResNet等网络模型为了追求极致的准确性,网络模型会很大,计算量在1GFLOPs以上。
​
为了实验的公平,作者将这些模型进行了轻量化调整,将这些模块修改成与SHuffleNet算力相同的模型。

  • 像VGG遵循VGG网络[31]的设计原理,我们使用两层3×3卷积作为基本构建块。与[31]不同的是,我们在每个卷积之后添加了一个批量归一化层[16],以使端到端训练更容易。

  • ResNet.我们在实验中采用了“瓶颈”设计,在[9]中已经证明了更有效。与[9]相同,瓶颈比1也是1:4。·

  • Xception-like。[3]中提出的原始结构涉及不同阶段的花式设计或超参数,我们发现这很难在小型模型上进行公平比较。相反,我们从ShuffleNet中删除了逐点群卷积和通道混洗操作(也相当于g =1的ShuffleNet)。导出的结构与[3]中的“深度可分离卷积”相同,在这里称为Xception-like结构。

由于Xception-like中的设计和超参数很难修改,所以作者直接修改了ShuffleNet的结构,删除了分组卷积和通道重排操作,与深度可分离卷积相同。

  • ResNeXt。我们使用基数= 16和瓶颈比=1:2的设置,如[41]中所建议的。我们还探索了其他设置,例如瓶颈比=1:4,得到了相似的结果。

我们使用完全相同的设置来训练这些模型。结果示于表4中。我们的ShuffleNet模型在不同的复杂性下表现明显优于大多数其他模型。有趣的是,我们发现特征图通道和分类精度之间的经验关系。例如,在38个MFLOP的复杂度下,VGG-like、ResNet、ResNeXt、Xception-like、ShuffleNet模型的阶段4(参见表1)的输出通道分别为50、192、192、288、576,这与图1中的步骤4一致。准确性的提高。由于ShuffleNet的高效设计,我们可以在给定的计算预算下使用更多的通道,因此通常会产生更好的性能。

请注意,上述比较不包括GoogleNet或Inception系列[34,35,33]。我们发现,生成这样的Inception结构的小型网络,因为初始设计的Inception模块涉及太多的超参数。作为参考,GoogleNet的第一个版本[34]有31.3%的top-1错误,代价是1.5 GFLOPs(见表6)。更复杂的Inception版本[35,33]更准确,然而,涉及显着增加的复杂性。最近,Kim et al.提出了一种名为PVANET [20]的轻量级网络结构,它采用了Inception单元。我们重新实现的PVANET(输入大小为224×224)具有29.7%的分类错误,计算复杂度为557 MFLOPs,而我们的ShuffleNet 2x模型(g =3)具有524 MFLOPs(见表6)。

这些模型不是本身,是进行改造后模型进行对比,VGG由于模型太大,无法压缩为低算力级别。

4.3.与MobileNets和其他框架的比较

最近霍华德等人。已经提出了MobileNets [12],其主要关注于用于移动设备的高效网络架构。MobileNet采用了[3]中的深度可分离卷积(Xception)的思想,并在小模型上实现了最先进的结果。

表5比较了各种复杂性水平下的分类得分。很明显,我们的ShuffleNet模型在所有复杂性方面都上级MobileNet。虽然我们的ShuffleNet网络是专门为小模型(<150MFLOP)设计的,但我们发现它仍然优于MobileNet对于更高的计算成本,例如比MobileNet 1倍精确3.1%,成本为500 MFLOP。对于较小的网络(约40 MFLOPs),ShuffleNet超过MobileNet 7.8%。请注意,我们的ShuffleNet架构包含50层,而MobileNet只有28层。为了更好地理解,我们还在26层架构上尝试了ShuffleNet,在阶段2-4中删除了一半的块(参见表5中的“ShuffleNet 0.5× shallow(g =3)”)。结果表明,较浅的模型仍然明显优于相应的MobileNet,这意味着ShuffleNet的有效性主要来自其有效的结构,而不是深度。

表6将我们的ShuffleNet与一些流行模型进行了比较。结果表明,在相同的精度下,ShuffleNet比其他算法更有效。例如,ShuffleNet 0.5倍理论上比AlexNet快18倍[22],具有可比的分类得分。我们将在第4.5节中评估实际运行时间。

ShuffleNet与VGG、AlexNet、GooleNet直接进行对比,计算量更少,准确率也越好。

同样值得注意的是,简单的架构设计使得ShuffeNet很容易配备最新的进步,如[13,27]。例如,在[13]中,作者提出了压缩和激发(SE)块,其实现大型ImageNet模型的最新结果。我们发现SE模块与骨干ShuffleNets结合使用也会产生效果,例如,将ShuffleNet的top-1错误提高了2倍至24.7%(如表5所示)。有趣的是,虽然理论复杂度的增加可以忽略不计,但我们发现具有SE模块的ShuffleNets通常比移动的设备上的“原始”ShuffleNets慢25 - 40%,这意味着实际加速评估对低成本架构设计至关重要。在第4.5节中,我们将进行进一步的讨论。

SHuffleNet加入SE模块,引入的计算量可以忽略不计,但是速度变慢了25%-40%。

4.4.泛化能力

为了评估迁移学习的泛化能力,我们在MS COCO对象检测任务上测试了我们的ShuffleNet模型[24]。我们采用Faster-RCNN [29]作为检测框架,并使用公开发布的Caffe代码[29,18]进行默认设置的训练。与[12]类似,模型在COCO train+瓦尔数据集上训练,不包括5000个minival图像,我们在minival集上进行测试。表7显示了在两种输入分辨率上训练和评估的结果的比较。ShuffleNet 2×与复杂度相同的MobileNet的比较比喻(524 vs. 569 MFLOPs),我们的ShuffleNet 2×在两个分辨率上都超过了MobileNet;我们的ShuffleNet 1×在600×分辨率上也达到了与MobileNet相当的结果,但复杂度降低了4倍。我们推测,这一显著的收益部分是由于ShuffleNet的架构设计简单,没有花里胡哨

我个人感觉这一句话有些不妥,文章说SHuffleNet的架构设计简单,但是Mobilenet的结构更简单一些,因为Mobilenet的层数是26层,而ShuffleNet的层数是50多层。
你可以说这个因为分组卷积或者通道重排过程中引入了更多的通道个数,但是你不能说他比MObilenet还简单,这有点欺负人的意思了。

our impl是作者不相信Mobilenet的性能,自己又做了实验。
实验环境:
用于对象检测任务的 MS COCO 数据集。
使用 Faster-RCNN 作为检测框架,并采用 Caffe 代码进行训练。
在 COCO 训练集+验证集上进行训练,排除了 5000 张 minival 图像,并在 minival 数据集上进行测试。
使用 ShuffleNet 模型进行实验。
​
实验结果:
对于不同的输入分辨率,将 ShuffleNet 与 MobileNet 进行了比较。
在相似的计算复杂度(524 vs. 569 MFLOPs)下,ShuffleNet 2× 在两种分辨率上都明显优于 MobileNet。
ShuffleNet 1× 在 600× 分辨率上实现了与 MobileNet 可比较的结果,但复杂度减少了约 4 倍。
这种显著的改进部分是由于 ShuffleNet 的简单设计结构,没有过多的复杂特性

4.5.实际加速比评估

最后,我们评估实际的推理速度ShuffleNet模型在移动终端上的ARM平台。虽然ShuffleNets具有较大的组数(例如g =4或g =8)通常具有更好的性能,但是我们发现它在我们当前的实现中效率较低。经验上,g =3通常在准确性和实际推理时间之间具有适当的折衷。如表8所示,测试采用了三种输入分辨率。由于内存访问和其他开销,我们发现在我们的实现中,每4倍的理论复杂度降低通常会导致2.6倍的实际加速。然而,与AlexNet [22]相比,我们的ShuffleNet 0.5倍模型在相当的分类精度下仍然达到了13倍的实际加速比(理论加速比为18倍),这比以前的AlexNet级别模型或加速方法(如[14,17,23,43,44,39])快得多。

分组越多,精度越好,但速度减慢了,所以进行了一个折中,g=3.
​
实验环境:
使用基于 ARM 平台的移动设备进行实验。
在移动设备上评估 ShuffleNet 模型的实际推理速度。
​
实验结果:
使用较大的群组数(例如 g=4 或 g=8)的 ShuffleNet 模型通常效率较低。经验上,g=3 通常在准确性和实际推理时间之间具有合适的平衡。
在实验中使用了三种不同的输入分辨率进行测试。
根据实验结果,由于内存访问和其他开销的影响,每降低 4× 的理论复杂度通常会导致约 2.6× 的实际加速。这意味着理论上的速度提升并不能完全映射到实际推理速度上。
与 AlexNet 相比,ShuffleNet 0.5× 模型在可比较的分类准确性下实现了约 13× 的实际加速(理论加速比为 18×),这比之前的 AlexNet 级别模型或加速方法要快得多。
​

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值