面向移动端图像分类的轻量级CNN优化

2024-02-22 07:44张晓青刘小舟
计算机工程与设计 2024年2期
关键词:分组卷积分类

张晓青,刘小舟,陈 登

(1.浙江工业大学 计算机科学与技术学院,浙江 杭州 310023;2.浙江省卫生健康信息中心,浙江 杭州 310006;3.浙江省科技信息研究院,浙江 杭州 310006;4.浙江省数据开放重点实验室,浙江 杭州 310053)

0 引 言

图像分类是通过对图像的分析,将不同图像划分到不同类别,以实现最小分类误差的一种技术。近十年来,随着深度学习技术的出现,以卷积神经网络(convolutional neural network,CNN)为代表的深度学习技术已在很多方面取得了重大突破,特别是在计算机视觉领域,如图像识别[1]、图像检索[2]和图像分类[3-5]等,而图像分类是视觉识别的基本和重要任务之一。与人工提取特征的传统图像分类方法相比,基于CNN的图像分类方法使用卷积操作对输入图像进行特征提取,可以有效地从大量样本中学习特征表达,模型泛化能力更强[6]。

然而,随着CNN越来越深,结构越来越复杂,模型的参数量和计算量也越来越大。由于存储空间和功耗的限制,CNN模型在嵌入式设备和移动终端上的存储与计算仍然面临着巨大的挑战。一方面,考虑到终端设备的存储空间有限,大量高分辨率图片在终端的存储是不符合实际的,因此,利用低分辨率数据集进行图像分类是一种可行的方案。另一方面,伴随着物联网时代的来临,物联网应用对响应时间、隐私数据保护和大数据传输等都提出了更高的要求,迫切需要离线的任务执行方式。因此,将基于图像分类的CNN模型应用到移动设备成了一个亟待解决的问题。

为了提高CNN的效率,很多研究者把注意力转向设计轻量级卷积神经网络(lightweight convolutional neural network,LCNN)。MobileNetV2[7]是一种专为移动设备设计的通用LCNN,它使用深度可分离卷积来深化网络,减少参数和计算。虽然该网络相比VGG等更适合部署在移动设备上,但其瓶颈结构(Bottleneck)仍存在大量昂贵的逐点卷积。为了进一步减少LCNN模型的计算复杂度,将其部署在移动设备上,本文提出了一种基于LCNN的移动端图像分类模型,将轻量级模型的设计思想引入到基于CNN的图像分类模型中。通过训练LCNN,并将训练好的模型经模型转换部署到Android平台,实现移动端图像分类功能。综上,本文的主要贡献如下:

(1)提出了一种高效的卷积计算模块Extremely Lightweight Block(ELBlock)。该模块采用逐点卷积叠加深度可分离卷积的方法,先对逐点卷积进行分组以增加相邻层过滤器之间的对角相关性,并进一步降低卷积操作的计算复杂度,再利用通道混洗关联输入和输出通道,提高特征的信息表示能力。

(2)基于ELBlock设计了一种轻量级卷积神经网络架构,命名为Extremely Lightweight Net(ELNet)。其主体结构由ELBlock叠加组成,用二元自适应均值池化层代替平均池化层,比MobileNetV2更简洁、高效。

(3)在CIFAR-10、CIFAR-100、MINIST、SVHN等数据集上的结果表明,ELNet在保证较高分类精度的同时,不仅大大降低了模型的计算复杂度与内存占用,还减少了模型的推理时间。

1 相关方法

自从AlexNet在ILSVRC-2012图像分类竞赛中取得惊人成绩以来,越来越多的研究集中在CNN体系结构的改进上。从利用神经网络模型解决问题的过程来看,人们常常倾向于设计更为复杂的CNN收集更多的数据以期获得更好的效果。从总体的趋势看,这些网络都是趋于向更深的网络层次发展,随着层次的加深,网络训练所需的参数增多,计算代价增大,所需的存储空间也会变大,很难部署在移动和嵌入式设备上。与常见的深度神经网络相比,LCNN是一组特殊的深度学习模型,具有参数少、计算复杂度低、性能损失有限的特点,可以广泛应用在移动设备中。常见的技术包括剪枝[8]、量化[9]、知识蒸馏[10]和模型精简设计[11-15]等。借助常见的知识蒸馏、通道剪枝、量化等模型压缩技术虽然可以降低模型参数量和计算量,但在精度和帧率之间各种权衡也非常繁琐。因此,人工设计LCNN模型是模型轻量化的最为有效的解决方法,直接适用于移动和嵌入式设备。

人工设计LCNN有很多设计原则,效率问题是一个重要的设计指标。现有研究多是从减少卷积核冗余、减少输入特征通道数和设计更高效的模块等方面来实现。SqueezeNet[11]用小卷积核替换大卷积核并减少其输入的通道数。Xception[12]和MobileNets[13]设计了两种不同的深度可分离式卷积,减少了网络的计算复杂度。ShuffleNet系列[14,15]充分利用组卷积和通道混洗进一步提高模型效率。此外,对设备上应用程序的巨大需求鼓励研究具有最小延迟和内存使用的资源高效模型。MobileNetV2在深度可分卷积的基础上提出一种具有线性瓶颈的倒置残差结构,先将输入的低维压缩表示扩展到高维,使用深度卷积做过滤,随后利用线性卷积将特征映射回低维表示。该结构使网络更深的同时,模型更小、速度更快,特别适用于移动网络设计。EfficientNet[16]提出一种新型模型缩放方法,利用神经网络搜索,使用复合系数统一缩放模型的所有维度,极大地提升了模型的准确率和效率。GostNet[17]提出了一种新型端侧神经网络架构,Ghost模块可以用更少的参数生成更多的特征图,效果相比MobileNet更好。MicroNet[18]旨在以极低的计算成本解决性能大幅下降的问题,通过稀疏连通性和动态激活函数有效提高模型精度。Zhang Q[19]在结构、算法和实现3个层次上研究了CNN的加速方法。

组卷积(GConv)是一种直接有效的技术,常用在轻量型高效网络中用于节省计算量,作为小型 GPU 的解决方法被引入。深度可分离卷积是组卷积的一个极端情况,分别对每个通道执行卷积,用同等的参数量和计算量就能生成多个特征图。对于移动平台,MobileNets和MobileNetV2使用带有超参数的深度卷积来控制模型的大小。

通道混洗(Channel Shuffle)是性能提升的一个未被充分探索的技术,通常需要少量的额外成本,就可以将稀疏的通道特征进行融合。ShuffleNet对两阶段组卷积中的通道进行混洗,实现了多组卷积层的跨组信息流动。除了随机通道分组外,SENet[20]还研究了一种动态通道重加权方案,通过关注通道之间的关系,使模型自动学习不同通道特征的重要性,以较小的成本提高了模型容量。通道分组和通道混洗的有效性激发了本文的工作思路。

2 本文方法

通过对已有方法的学习,为了将深度学习模型应用到移动设备上,本文提出了一种面向移动端图像分类的轻量级卷积神经网络模型,包括卷积计算模块ELBlock的设计和ELNet网络架构设计。分类训练结束后通过模型转换方法完成深度学习模型在移动端的部署,并通过Android平台的图像分类系统实现移动端图像分类。

2.1 ELBlock

2.1.1 ELBlock卷积计算模块

深度可分离卷积被证明是构建高效神经网络架构的有效模块,使用分组和分离的思想,大大减少了卷积的计算量。分组卷积主要为了解决卷积运算时单个GPU无法处理含有大量计算和存储需求的问题,多被用于构建用于移动设备的小型网络模型。分离卷积将空间维度与深度维度进行分离,先考虑区域,再考虑通道,实现了通道和区域的分离。假设深度可分离卷积的输入和输出是大小为H1×W1×C1、H2×W2×C2的三维特征图,其中Hi、Wi、Ci表示特征图的高度、宽度和通道数,i表示输入(i=1)和输出(i=2)。对于大小为K×K的卷积核,深度可分离卷积的MAdd总数为

(K×K+C2)×C1×H2×W2

(1)

与标准卷积相比,深度可分离卷积几乎减少了K×K倍的计算成本,但往往会导致特征图表达能力的降低。

为了使用深度可分离卷积并提高特征的表达能力,MobileNetV2在深度卷积之前添加扩展层来增加深度可分离卷积的输入通道数。扩展操作通过1×1逐点卷积将输入通道数扩展为t倍,提高了特征的表征能力。但是扩展层中存在的1×1卷积却占用了大量的计算资源。综合考虑参数量、计算量和模型占用等因素,本文使用逐点卷积叠加深度可分离卷积的方法来构建卷积计算模块ELBlock,并对逐点卷积进行分组来达到减少计算量的目的。

ELBlock结构如图1所示。首先,使用组卷积可以有效减少逐点卷积的计算和参数量,但分组会导致不同组间的特征信息不能交换,在一定程度上削弱模型性能。为了解决这个问题,在第一个分组卷积层之后引入通道混洗。通道混洗对组卷积后的特征图进行重组,通过在不同组中进行统一的通道交换,可以在不增加计算量的情况下提高特征的表达能力和模型泛化能力。ELBlock的第三层是深度卷积层(DWConv),与传统的卷积操作不同,深度卷积的卷积核只负责一个通道。深度卷积之后是第二个分组卷积层,该层在深度方向上对上一步的特征图进行加权组合。

图1 高效的ELBlock结构

2.1.2 ELBlock性能分析

本小节详细讨论ELBlock与Bottleneck的计算复杂度,并从理论上说明ELBlock相对于后者的优势。ELBlock参数见表1,输入特征图尺寸为H×W×C1, 输出特征图尺寸为H×W×C2, 内部Dwise的输入输出通道数为tC1, 其中H、W、C分别代表特征图的高、宽和特征图的通道数。第一层是标准卷积操作,卷积核为1×1×C1, 则参数量为:1×1×C1×tC1, 计算量为:1×1×C1×H×W×tC1。 接下来两层是深度可分离卷积,卷积核为3×3,则深度可分离卷积参数量为:3×3×tC1+tC1×C2, 计算量为:3×3×tC1×H×W+tC1×H×W×C2。 因此,Bottleneck的总参数量为

(2)

表1 ELBlock结构

总计算量为

(3)

改进后,ELBlock将扩展层中的1×1卷积按通道数分成g组,则第一层每组输入特征图尺寸为H×W×C1/g, 对应卷积核尺寸为1×1×C1/g, 则参数量为:C1/g×(tC1)/g×g, 计算量为:C1/g×H×W×(tC1)/g×g。 通道混洗层的计算复杂度很低,因此不做考虑。对于后面两层深度可分离卷积,参数量为:3×3×tC1+(tC1)/g×C2/g×g, 计算量为:3×3×tC1×H×W+tC1/g×H×W×C2/g×g。 因此,ELBlock的总参数量为

(4)

总计算量为

(5)

由此可见,Bottleneck与ELBlock的参数量比值为

(6)

Bottleneck与ELBlock的计算量比值为

(7)

2.2 ELNet网络架构

本节详细描述ELNet模型的结构。ELNet是由一系列ELBlocks构成的新型高效卷积神经网络架构。该网络的架构受启发于MobileNetV2,但是所有的倒置残差块都被ELBlock所替代,并且可以根据目标任务的精度和移动设备的算力不同为ELBlock选择合适的参数。

ELNet的体系结构如图2所示,它由分组扩展层、通道混洗层、深度卷积层和分组逐点卷积层组成。网络初始使用32个标准的3×3卷积来构建最初的滤波器组,这一滤波器起的作用是检测边缘[13]。改进后的ELBlock不仅降低了卷积的计算资源,还改变了模型的输出通道。因此,本文采用直接叠加的方式构建网络,主体结构由7个改进后的ELBlock组成,接着使用1×1卷积进行升维,增加数据量。最后采用二元自适应均值池化层(AdaptiveAvgPool2d)来代替平均池化层,用于输出相同大小的特征图。为了根据提取的图像特征进行图像分类,在最后一层采用线性分类器输出给定图片的分类结果。当分类训练过程结束,通过修改预训练模型实例提取想要的层级。

图2 本文提出的ELNet网络结构

分类模型的设计从减少计算量、参数量的角度出发,将Bottleneck中大量的1×1逐点卷积进行分组,随后在1×1卷积后使用通道混洗弥补分组卷积造成的通道间特征融合问题。此外,在模型结构方面也做了精简,从而达到在减少模型计算量的情况下,不损失分类精度的效果。

2.3 实 施

大部分深度学习模型因其计算量和参数量的限制,很难部署移动设备和嵌入式系统中。针对这个问题,本文提出使用轻量级神经网络模型进行分类任务的训练,之后将模型通过转换部署在移动设备上。基于这个思路,先使用ELNet模型进行分类训练,保存模型参数。在移植到移动端之前,通过加载预训练模型,并使用Pytorch Mobile框架提供的模型转换功能将预训练模型转换为可在终端环境中使用的算法模型。最后,在Android图像分类系统中加载该算法模型并实现移动端图像分类功能。

3 实验结果及分析

实验使用目前流行的深度学习框架Pytorch来训练分类模型,采用Pytorch Mobile框架完成深度学习模型在移动端的部署。实验采用SGD优化算法进行优化,权重衰减为1×10-4,训练时batch_size为128,测试时batch_size为64。初始学习率为0.1,根据训练epoch总数的不同,本文设置不同的epoch数来降低学习率。每完成一次循环迭代后保存模型并计算评价指标,比较指标数值并更新保存的模型,在所有迭代完成后将最终结果记录下来。

3.1 数据集及其处理

CIFAR-10数据集由10个类别的60 000个32×32彩色图像组成,每个类有6000个图像,有50 000个训练图像和10 000个测试图像组成。

CIFAR-100数据集的图像大小与CIFAR-10一样,同为32×32像素,但是该数据库有100类图像,每一类包括600张彩色图片,分别为500张训练图片和100张测试图片。

MINIST数据集是机器学习领域非常经典的数据集,由60 000个训练样本和10 000个测试样本组成,每个样本都是一张28×28像素的灰度手写数字图片。由于Pytorch Mobile不支持读取灰度图像,所以采用了叠加通道的方式进行训练。

SVHN(street view house number)数据集来源于谷歌街景门牌号码,原生数据集是一些未经处理的彩色图片,每张图片上有多个数字。数据集包含PNG图像和digitStruct.mat文件,本文使用的是.mat文件,每张图像大小为32×32。当执行图片检索时,需要将.mat文件转换成RGB图片,将图像的文件名作为GroundTruth。

3.2 评价指标

本文使用广泛采用的评估指标,即参数数量(Params)和浮点运算(FLOPs)来评估模型的计算复杂度,使用Model Size来衡量模型的内存占用,并计算了模型在移动设备的实际推理时间。FLOPs在一定程度上反映了模型的推理时间,若复杂度太高,会导致模型训练和推理花费大量时间。Params和Model Size决定了模型的内存占用,是影响算法模型部署的关键因素。为了计算FLOPs的数量,本文只考虑卷积操作的计算量,其它操作(如批量归一化和池化)的计算量与卷积操作是微不足道的。如Chen等[21]所述,对于卷积核,有

FLOPs=2HW×(Cin×K2+1)×Cout

(8)

其中,H、W和Cin是输入特征图的高度、宽度和通道数,K是核的宽度(假定是对称的),Cout是输出通道的数量。在计算模型的参数(Params)时,仍只考虑卷积操作。使用最常见的计算方法,对于卷积核,有

Params=K2×Cin×Cout

(9)

其中,K是核的宽度,Cin是输入特征图的通道数,而Cout是输出通道数。

图像分类性能评价指标为分类正确率,相关定义如下

(10)

3.3 实验结果

为了验证ELNet的有效性,本文以MobileNetV2为基准模型,在4个公共数据集上进行了综合实验,所用到的算法模型有:SqueezeNet、ShuffleNet、ShuffleNetV2、MobileNets、MobileNetV2、EfficientNet、GostNet和MicroNet等。实验分为3个部分:第一部分为模型训练,比较了训练结束后模型所需参数、计算量和内存占用;第二部分是移动端分类,以实际分类精度和推理时间为评价指标与基准模型和近3年的高性能模型作对比;最后对ELNet进行了详细的消融研究。以下3个部分详细介绍了实验过程和实验数据,并对结果进行了分析和比较。

3.3.1 与其它LCNN的压缩性能比较

实验将ELNet与近几年的经典LCNN在模型压缩指标上进行了比对,模型包括SqueezeNet、ShuffleNet、ShuffleNetV2、MobileNets、MobileNetV2、EfficientNet、GostNet和MicroNet,以CIFAR-10为例,实验结果如图3所示。

图3 模型的计算复杂度与内存占用比较

由图3(a)可以得出,在FLOPs与Param的综合对比上,所提ELNet不仅消耗的计算量少,所需参数量也小,其中,FLOPs为5.91 M,Param为0.55 M。当所需参数量基本相同时(ELNet与MicroNet),ELNet的计算量仅是MicroNet的3.6%。当所需计算量基本相同时(ELNet与MobileNetv2、GostNet、EfficientNet),ELNet的参数量分别只占其它3个模型的23.9%、14.0%、13.7%。在Mo-del Size指标上,从图3(b)可以看出,本文提出的ELNet分类模型远小于其它轻量级神经网络模型,模型大小仅为2.4 M,达到了最小值。从模型压缩指标来看,ELNet更便于部署在对计算能力和内存占用有高要求的智能手机或可穿戴设备中,可以节省昂贵的计算资源。

3.3.2 在移动设备上的性能比对

为了验证本文所提ELNet在移动设备上的图像分类的能力,实验在4个数据集上训练ELNet,并以最高分类精度保存模型参数。在Android系统的智能手机Realme X7 Pro上评估了ELNet模型的实际分类效果,实验结果见表2。

表2 ELNet与其它算法在移动设备上的性能比较

在移动设备上执行模型推理,需要将预训练模型转换为TorchScript模型,该模型可以支持Android和iOS等设备平台的部署。将模型部署到Android图像分类系统进行离线测试,从表2最后两行可以看出,ELNet在所有数据集上的终端分类精度都高于基准模型,同时模型的推理时间大大减少,执行速度提升了3.4~4.6倍,大大提升了实时反馈应用场景的性能。

除与基准模型比较外,还与近3年的高性能模型(EfficientNet、GostNet、MicroNet)作对比。从推理时间看,在所有数据集上ELNet的推理时间都比其它的算法少,反映出其快速的推理过程。在分类精度上,MicroNet在CIFAR-10、CIFAR-100、SVHN上达到了最高,但在MINIST上精度损失很大。ELNet的分类精度与EfficientNet、GostNet基本相同,且在CIFAR-100上精度更高。虽然ELNet在精度上略逊于近3年的高性能模型,但是从图3中的数据可以看出,ELNet在计算复杂度和内存占用上是最低的,更适合部署在移动设备上。

3.3.3 消融实验

为了评估ELNet的有效性,实验在4个数据集进行了详细的消融研究。实验结果见表3,使用MobileNetV2作为基线,并将使用新的网络结构的模型称为Lite-Network (LNet)。在LNet的基础上,提出了一种利用分组卷积减少计算量并结合通道混洗(CS)的轻量级网络,即可得到ELNet。表3报告了ELNet的消融实验各个部分的结果。由LNet的结果可以看出,除了计算量比基准模型高之外,LNet基础架构在Params、Model Size和终端分类精度上都高于基准模型。随后,在LNet的基础上,采用分组卷积的方法致力于降低模型计算量。

表3 消融实验

先前的很多方法提到,使用分组卷积可以有效的减少逐点卷积的计算量,因此,本文提出将逐点卷积实行分组。对比表3中LNet和LNet_GConv的FLOPs、Params和Model Size可以看出,分组卷积可以有效的降低模型的计算量、参数量和模型大小,并且在所有数据集上得到最小值。但是,在每个数据集上,终端分类Acc几乎低于基线,因此分组操作在一定程度上削弱了模型的性能。

通道混洗是为了解决不同组之间的特征通信问题而提出的。从表3最后一行可以看出,加入通道混洗并没有增加模型的参数和大小,而是不同程度地提高了模型的终端分类性能。比较LNet与ELNet,虽然后者在终端分类精度上大多比不上前者,但是仍优于基准模型,并且在FLOPs、Params和Model Size上降低了一倍。

4 结束语

本文使用轻量级CNN作为分类任务的基础网络,在移动设备上成功地部署了深度学习模型。为进一步减少MobileNetV2模型的冗余,重新设计了瓶颈块和模型结构,提出了一个更加简洁高效的轻量级卷积神经网络分类模型ELNet。不仅分类精度高于MobileNetV2,模型的计算量、参数量和内存占用还大大降低,同时推理时间更快,适用于存储空间和计算能力受限的移动设备。之后,将ELNet经模型转换部署到Android平台,通过图像分类系统测试模型的离线分类效果。在4种常见公开数据集上的结果表明,本文提出的模型更小、精度更高、推理更快,能在移动端高效地完成分类任务。

猜你喜欢
分组卷积分类
基于3D-Winograd的快速卷积算法设计及FPGA实现
分类算一算
从滤波器理解卷积
分类讨论求坐标
分组搭配
怎么分组
数据分析中的分类讨论
基于傅里叶域卷积表示的目标跟踪算法
教你一招:数的分类
分组