2.1.16 ShuffleNet V2
ShuffleNet V2(Ma et al.,2018)认为,在设计精简网络时,只关注 FLOPs(FLoating point OPerations,浮点运算量)即乘法和加法的次数是不够的,FLOPs 低的网络结构不见得实际的运行速度更快,运行速度还取决于文件I/O、内存访问等其他因素。(Ma et al.,2018)提出以下4点高效模型的设计准则。
● 准则 1:当卷积层的输入和输出通道数相同时,内存访问代价(Memory Access Cost,MAC)最小,因此尽量保证卷积层输入和输出通道数一致。
● 准则 2:内存访问代价和分组卷积的分组数成正比,因此不能取得过大。
● 准则 3:网络的分支数越多,卷积核的加载和同步操作越多,并行度越低,因此需要减少网络分支数。
● 准则 4:逐元素操作(如逐元素相加、ReLU 激活函数等)虽然 FLOPs 比较小,但是需要比较大的内存访问代价,对耗时也有不小的影响,因此需要减少逐元素操作。
基于以上 4 点准则,(Ma et al.,2018)提出了ShuffleNet V2 网络,根据是否需要做空间维度下采样,分为两种结构,如图2-25所示。在不做空间维度下采样时,对比图2-25(a)和ShuffleNet(见图2-24(b)),ShuffleNet V2 为了减少分支数(准则 3),通过特征拆分操作将特征所有的通道均分成两组,两组进入两个不同的分支,最后将两个分支的特征通过特征拼接而不是相加的方式进行融合(准则 4)。特征拆分是特征拼接的逆操作,特征拼接是将多个特征沿着通道维度拼接为一个整体,而特征拆分是将特征沿着通道维度拆分为多个部分。此外,为了降低分组数(准则 2),ShuffleNet V2的两个卷积使用标准卷积而不是分组卷积,同时保证卷积层的输入输出通道数相同(准则 1)。ShuffleNet V2 将通道打散操作移动到了最后。在需要做空间维度下采样时,对比图2-25(b)和ShuffleNet(见图2-24(c)),输入特征不做通道拆分,两个分支都使用输入特征的所有通道,在最终特征拼接时通道数将加倍。
ShuffleNet V2和DenseNet(见2.1.10 节)具有相似的网络结构,两者都通过特征拼接的方式实现了特征重用。区别在于,DenseNet是将输入特征全部的通道拼接到输出特征,而 ShuffleNet V2中通过特征拆分只拼接输入特征一半的通道。
图2-25 ShuffleNet V1和ShuffleNet V2 对比