?

面向移動端圖像分類的輕量級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有很多設計原則,效率問題是一個重要的設計指標?,F有研究多是從減少卷積核冗余、減少輸入特征通道數和設計更高效的模塊等方面來實現。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實現
分類算一算
從濾波器理解卷積
分類討論求坐標
分組搭配
怎么分組
數據分析中的分類討論
基于傅里葉域卷積表示的目標跟蹤算法
教你一招:數的分類
分組
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合