旷视科技提出ShuffleNet,专门应用于计算力有限的移动设备,新的架构利用连个操作:逐点群卷积(pointwise group convolution)和通道混洗(channel shuffle),与现有先进模型相比在类似的精度下大大降低了计算量,在ImageNet和MS COCO上ShuffleNet表现出比其他先进模型的优越性能。
现有的ResNeX在小型网络中效率较低,因为大量的1x1卷积耗费很多计算资源,论文提出了逐点群卷积(pointwise group convolution)帮助降低计算复杂度,但是采用逐点群卷积会有副作用,故在此基础上,论文提出通道混洗(channel shuffle)帮助信息流通。基于这两种技术,我们构建一个名为ShuffleNet的高效架构。
Related Work
高效模型设计: CNNs在CV任务中取得了极大的成功,在嵌入式设备上运行高质量深度神经网络需求越来越大,这也促进了对高效模型的探究。例如,与单纯的堆叠卷积层,GoogleNet增加了网络的宽度,复杂度降低很多;SqueezeNet在保持精度的同时大大减少参数和计算量;ResNet利用高效的bottleneck结构实现惊人的效果。Xception中提出深度可分卷积概括了Inception序列。MobileNet利用深度可分卷积构建的轻量级模型获得了先进的成果;ShuffleNet的工作是推广群卷积(group convolution)和深度可分卷积(depthwise separable convolution)。
模型加速: 该方向旨在保持预训练模型的精度同时加速推理过程。常见的工作有:通过修剪网络连接或减少通道数减少模型中连接冗余;量化和因式分解减少计算中冗余;不修改参数的前提下,通过FFT和其他方法优化卷积计算消耗;蒸馏将大模型的知识转化为小模型,使得小模型训练更加容易;ShuffleNet的工作专注于设计更好的模型,直接提高性能,而不是加速或转换现有模型。
针对群卷积的通道混洗
现代卷积神经网络会包含多个重复模块。其中,最先进的网络例如Xception和ResNeXt将有效的深度可分离卷积或群卷积引入构建block中,在表示能力和计算消耗之间取得很好的折中。但是,我们注意到这两个设计都没有充分采用1 × 1 的逐点卷积,因为这需要很大的计算复杂度。例如,在ResNeXt中3 × 3 卷积配有群卷积,逐点卷积占了93.4%的multiplication-adds。
在小型网络中,昂贵的逐点卷积造成有限的通道之间充满约束,这会显著降低损失精度,为了解决这个问题,一个直接的方法是应用通道稀疏连接,例如组卷积,通过确保每个卷积操作仅在对应的输入通道组上,组卷积可以显著的降低计算损失。然而如果多个组卷积堆叠在一起,会有一个副作用,某个通道输出仅从一小部分输入通道中导出,这样的属性降低了通道组之间的信息流通
如果我们允许组卷积能够得到不同组的输入数据,即上图(b)所示效果,那么输入和输出通道会是全关联的。具体来说,对于上一层输出的通道,我们可做一个混洗(Shuffle)操作,如上图©所示,再分成几个组,feed到下一层。
对于这个混洗操作,有一个有效高雅(efficiently and elegantly)的实现:
对于一个卷积层分为g gg组,
1、有g x n个输出通道
2、reshape为(g,n)
3、再转置为(n,g)
4、平坦化,再分回g组作为下一层的输入
示意图如下:
这样操作有点在于是可微的,模型可以保持end-to-end训练.
Shuffle uint
前面我们讲了通道混洗的好处了,在实际过程中我们构建了一个ShuffleNet unit,便于构建实际模型。
1、图(a)是一个残差模块,对于主分支部分,我们可将其中标准卷积3x3拆分成深度可分离卷积,我们将第一个1x1卷积替换成逐点组卷积,再做通道混洗(b)
2、图(b)即ShuffleNet unit,主分支最后的1 × 1 Conv改为1 × 1 GConv,为了适配和恒等映射做通道融合,配合BN层和ReLU激活函数构成基本单元.
3、图©即是做降采样的ShuffleNet unit,这主要做了两点修改:
- 在辅分支加入步长为2的
3×3
平均池化 - 原本做元素相加的操作转为了通道级联,这扩大了通道维度,增加的计算成本却很少
归功于逐点群卷积和通道混洗,ShuffleNet unit可以高效的计算。相比于其他先进的单元,在相同设置下复杂度较低。
NetWork Architecture
在上面的基本单元基础上,我们提出了ShuffleNet的整体架构:
主要分为三个阶段:
每个阶段的第一个block的步长为2,下一阶段的通道翻倍
每个阶段内的除步长其他超参数保持不变
每个ShuffleNet unit的bottleneck通道数为输出的1/4(和ResNet设置一致)
这里主要是给出一个baseline。在ShuffleNet Unit中,参数g gg控制逐点卷积的连接稀疏性(即分组数),对于给定的限制下,越大的g gg会有越多的输出通道,这帮助我们编码信息。
定制模型需要满足指定的预算,我们可以简单的使用放缩因子s 控制通道数,ShuffleNets ×即表示通道数放缩到s 倍。
Conclusion
论文针对现多数有效模型采用的逐点卷积存在的问题,提出了组卷积
和通道混洗
的处理方法,并在此基础上提出了一个ShuffleNet unit,后续对该单元做了一系列的实验验证,证明ShuffleNet的结构有效性。