摘要
近年来,神经网络的结构设计极大地被间接度量计算复杂度(如FLOPs)导向,直接度量速度还会被其它因素诸如内存存取消耗和平台特性所影响。因此,我们的工作打算计算目标平台的直接度量,而不仅仅考虑间接度量FLOPs。基于一系列的限制性实验,我们的工作获得了一些有效的网络设计的实用指南。相应地,我们提出了ShuffleNet V2这种新的网络结构。进行了全面的消融实验后,我们证实了在速度和准确率进行权衡的情况下,ShuffleNet V2是最先进的。
介绍
![Figure1](https://i-blog.csdnimg.cn/blog_migrate/741b6b7ee5ff5bbfbacfa5f026cd7e6a.png)
深度神经网络经过最近几年的发展变得更加准确和更加快速。但是在高准确率下计算复杂度这个重要问题被忽略了。实际任务中要求在目标平台(如硬件)和应用场景(如需要低延迟的自动驾驶)这些计算有限制的情况下得到最高的准确率。这激励了一些轻量级网络的研究,并且需要在速度和准确率之间做更好地平衡,此类网络有Xception,MobileNet,MobileNet V2,ShuffleNet和CondenseNet。这些工作中分组卷积和深度卷积有十分重要的作用。
计算复杂度采用最广泛的度量是FLOPs。但FLOPs是一个间接度量。它只是一个近似值,而且和我们关注的直接度量如速度或延迟通常情况下是不等的,这种差异已经被许多工作证实。因此,仅仅使用FLOPs作为复杂度度量是不充分的,并且会导致设计的架构不是最优的。
导致间接度量(FLOPs)和直接度量(速度)的差异主要有两个。首先FLOPs没有顾忌对速度有影响的几个重要因素。一个因素是内存访问消耗,这种消耗在某些操作比如分组卷积占有很大一部分运行时间,这可能是大型设备比如GPU的瓶颈。这个成本在网络架构设计的时候不能被忽略。另一个因素是并行度。在相同的FLOPs下,高并行度的网络比低并行度的网络运行更快。另一个因素是相同的FLOPs需要的运行时间不同,这取决于平台。比如,张量分解被广泛地用于早期的加速矩阵乘法运算。但是最近的研究发现分解在减少了75%FLOPs的情况下在GPU上的速度更慢。我们调查发现最新的CUDNN对3x3的卷积会进行特殊优化,并不能确定3x3的卷积一定比9个1x1的卷积速度慢。
根据这些观察结果,我们提出了两个应该被并用于有效网络架构设计的原则。第一,使用直接度量代替间接度量;第二,在目标平台上计算相同的度量。
在我们的工作中,我们遵循这两个原则并提出了一个更有效的网络架构。在第二部分,我们首先分析了两个具有代表性的先进网络的运行时间。之后,我们获得了四个有效网络设计的指导方针,这些方针超出了FLOPs的考虑范围,而且与平台无关。我们使用专门优化的代码在两个平台(GPU和ARM)上做了一系列控制实验去证实他们,确信我们的结果是最先进的。
在第三部分,根据指导方针,我们设计了一个新的网络结构。它是ShuffleNet网络的衍生版本,名为ShuffleNet V2。经过第四部分全面的实验后证实ShuffleNet V2在所有的平台上比之前的网络更快更准确。