【新智元导读】在视觉人工智能系统中,卷积神经网络(CNN)起着至关重要的作用。旷视(Face++)孙剑等人的研究团队最近发表了《ShuffleNet:一种极高效的移动端卷积神经网络》一文,作者针对移动端低功耗设备提出了一种更为高效的卷积模型结构,在大幅降低模型计算复杂度的同时仍然保持了较高的识别精度,并在多个性能指标上均显著超过了同类方法。本文将对该成果进行详细解读。 (论文下载地址:https://arxiv.org/abs/1707.01083) ShuffleNet的设计思想 卷积神经网络是现代视觉人工智能系统的核心组件。近年来关于卷积模型的研究层出不穷,产生了如VGG、ResNet、Xception和ResNeXt等性能优异的网络结构,在多个视觉任务上超过了人类水平。然而,这些成功的模型往往伴随着巨大的计算复杂度(数十亿次浮点操作,甚至更多)。这就限制了此类模型只能用于高性能的服务器集群,而对于很多移动端应用(通常最多容许数百万至数千万次浮点操作)则无能为力。 解决这一难题的方法之一是设计更为轻量级的模型结构。现代卷积神经网络的绝大多数计算量集中在卷积操作上,因此高效的卷积层设计是减少网络复杂度的关键。其中,稀疏连接(sparse connection)是提高卷积运算效率的有效途径,当前不少优秀的卷积模型均沿用了这一思路。例如,谷歌的”Xception“网络[1]引入了”深度可分离卷积”的概念,将普通的卷积运算拆分成逐通道卷积(depthwise convolution)和逐点卷积(pointwise convolution)两部进行,有效地减少了计算量和参数量;而Facebook的“ResNeXt”网络[2]则首先使用逐点卷积减少输入特征的通道数,再利用计算量较小的分组卷积(group convolution)结构取代原有的卷积运算,同样可以减少整体的计算复杂度。 ShuffleNet网络结构同样沿袭了稀疏连接的设计理念。作者通过分析Xception和ResNeXt模型,发现这两种结构通过卷积核拆分虽然计算复杂度均较原始卷积运算有所下降,然而拆分所产生的逐点卷积计算量却相当可观,成为了新的瓶颈。例如对于ResNeXt模型逐点卷积占据了93.4%的运算复杂度。可见,为了进一步提升模型的速度,就必须寻求更为高效的结构来取代逐点卷积。 受ResNeXt的启发,作者提出使用分组逐点卷积(group pointwise convolution)来代替原来的结构。通过将卷积运算的输入限制在每个组内,模型的计算量取得了显著的下降。然而这样做也带来了明显的问题:在多层逐点卷积堆叠时,模型的信息流被分割在各个组内,组与组之间没有信息交换(如图 1(a)所示)。这将可能影响到模型的表示能力和识别精度。 图 1 逐点卷积与通道重排操作 因此,在使用分组逐点卷积的同时,需要引入组间信息交换的机制。也就是说,对于第二层卷积而言,每个卷积核需要同时接收各组的特征作为输入,如图 1(b)所示。作者指出,通过引入“通道重排”(channel shuffle,见图 1(c))可以很方便地实现这一机制;并且由于通道重排操作是可导的,因此可以嵌在网络结构中实现端到端的学习。 ShuffleNet网络结构 基于分组逐点卷积和通道重排操作,作者提出了全新的ShuffleNet结构单元,如图2所示。该结构继承了“残差网络”(ResNet)[3]的设计思想,在此基础上做出了一系列改进来提升模型的效率:首先,使用逐通道卷积替换原有的3x3卷积,降低卷积操作抽取空间特征的复杂度,如图2(a)所示;接着,将原先结构中前后两个1x1逐点卷积分组化,并在两层之间添加通道重排操作,进一步降低卷积运算的跨通道计算量。最终的结构单元如图2(b)所示。类似地,文中还提出了另一种结构单元(图2(c)),专门用于特征图的降采样。 借助ShuffleNet结构单元,作者构建了完整的ShuffeNet网络模型。它主要由16个ShuffleNet结构单元堆叠而成,分属网络的三个阶段,每经过一个阶段特征图的空间尺寸减半,而通道数翻倍。整个模型的总计算量约为140MFLOPs。通过简单地将各层通道数进行放缩,可以得到其他任意复杂度的模型。 另外可以发现,当卷积运算的分组数越多,模型的计算量就越低;这就意味着当总计算量一定时,较大的分组数可以允许较多的通道数,作者认为这将有利于网络编码更多的信息,提升模型的识别能力。 图 2 ShuffleNet结构单元 实验结果 (责任编辑:本港台直播) |