国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

KCPNet:張量分解的輕量卷積模塊設(shè)計、部署與應(yīng)用

2022-03-15 02:03王鼎衡趙廣社姚滿李國齊
西安交通大學(xué)學(xué)報 2022年3期
關(guān)鍵詞:張量手勢內(nèi)存

王鼎衡,趙廣社,姚滿,李國齊

(1.西安交通大學(xué)自動化科學(xué)與工程學(xué)院,710049,西安;2.清華大學(xué)精密儀器系,100084,北京)

卷積神經(jīng)網(wǎng)絡(luò)(CNN)是近年來重要的深度學(xué)習(xí)模型之一[1],卷積模塊出眾的特征提取能力使CNN得到了廣泛的研究和應(yīng)用。為了獲取更好的數(shù)據(jù)識別與處理能力,CNN一直在向著深度更深、規(guī)模更大的方向發(fā)展,但在面向?qū)嶋H應(yīng)用環(huán)境時,卻不得不解決資源受限條件下的CNN模型部署問題。因此,對深度神經(jīng)網(wǎng)絡(luò)模型,尤其是深度CNN模型的壓縮,成為了目前深度學(xué)習(xí)領(lǐng)域最為熱點的研究方向之一[2-3]。在多種模型壓縮方法中,模型裁剪、知識遷移、精細模塊設(shè)計等方法[3]一般需要復(fù)雜的訓(xùn)練-壓縮-再訓(xùn)練過程[4-5]或高訓(xùn)練成本的網(wǎng)絡(luò)結(jié)構(gòu)搜索[6-7]。張量分解憑借其堅實的數(shù)學(xué)理論基礎(chǔ)[8],具有方便實現(xiàn)、壓縮率可觀等獨特優(yōu)勢[9-10],還可以根據(jù)張量分解的具體形式直接設(shè)計輕量化的CNN模型并訓(xùn)練,完成后即可部署而無需進一步調(diào)整或壓縮[11-12]。

(a)原權(quán)重矩陣

(b)估計方式

(c)映射方式圖1 張量分解壓縮神經(jīng)網(wǎng)絡(luò)的兩種形式Fig.1 Compressing neural networks by tensor decomposition in two formats

更重要的是,這些以映射方式得到的卷積模塊幫助研究者們在應(yīng)用方面取得了大量有實際意義的進展,尤其是以MobileNet模型[25]為代表的可分離卷積和以IGCV模型[26]為代表的分組卷積這兩種典型卷積模塊,幾乎已經(jīng)成為CNN應(yīng)用領(lǐng)域的標準件。例如:基于可分離卷積,文獻[4]結(jié)合裁剪方法實現(xiàn)了實時目標跟蹤,文獻[13]實現(xiàn)了高效的情感識別,文獻[27]綜合多級特征完成了高效的實例分割任務(wù);圍繞分組卷積,周云成等和楊賢志等分別開發(fā)了農(nóng)作物實時識別和輕量級目標檢測應(yīng)用[28-29]。

然而,這些卷積模塊雖然比原始卷積在理論上有更低的復(fù)雜度,但在面向部署應(yīng)用時仍然存在一些實際效率方面的工程問題。例如:CUDA的官方庫cuDNN直到第7版才對可分離卷積作出了有限的優(yōu)化,其實際效率仍較差,文獻[4]輔以裁剪方法才取得了較好的運行效率;文獻[24]提到分組的瓶頸卷積在理論上雖有著明顯的并行計算優(yōu)勢,但在cuDNN等通用計算框架上的實際效率較差,同時更多的特征圖處理使其內(nèi)存消耗反高于普通卷積。并且,除少數(shù)張量分解估計方式的應(yīng)用[11-12]之外,其他應(yīng)用方面的研究[4,13,25-29]對如何將張量分解映射方式得到的輕量卷積模塊與具體硬件結(jié)合部署著墨甚少。

為了解決這些卷積模塊在實際部署應(yīng)用中內(nèi)存消耗高、計算效率低的問題,本文在深入研究Kronecker CP(KCP)張量分解[30]的基礎(chǔ)上,將KCP映射為一種以變通道可分離卷積為核心的瓶頸卷積模塊(KCPNet)。分析了KCPNet的多種表現(xiàn)形式可對應(yīng)于一些其他現(xiàn)存的張量分解卷積模塊。在ImageNet大規(guī)模數(shù)據(jù)集上的實驗表明,KCPNet相比其他瓶頸卷積模塊能夠同時達到較高效的空間和計算復(fù)雜度?;贑IFAR-10標準圖像分類數(shù)據(jù)集的實驗驗證了KCPNet對普通卷積具有良好的壓縮效果。結(jié)合GPU內(nèi)存架構(gòu)的特點給出了將KCPNet部署于嵌入式GPU的具體方法。結(jié)合KCPNet與深度相機開發(fā)了動態(tài)手勢識別應(yīng)用,測試結(jié)果表明,在消耗22 MB內(nèi)存的前提下,可實現(xiàn)超過100幀/s的識別效率。

1 KCPNet輕量卷積模塊設(shè)計

1.1 KCP分解

(1)

(2)

(3)

1.2 KCPNet輕量卷積模塊

(4)

圖2 一對一計算的可分離卷積Fig.2 Depthwise convolutions with one-to-one calculations

一般而言,可分離卷積相對于傳統(tǒng)卷積能夠極大地降低參數(shù)量和計算量[4]。例如:圖3a的普通卷積與輸入特征圖對應(yīng)計算后需要相加來得到一張輸出特征圖;圖3b的可分離卷積在與輸入特征圖進行一對一的計算后無需相加。顯然,可分離卷積缺少特征圖通道融合的相關(guān)操作,因此經(jīng)常與獨立負責(zé)通道融合的1×1普通卷積搭配使用[13]。從張量分解的角度,可分離卷積與CP分解關(guān)系密切[19-20],這是因為CP的因子張量中只存在矩陣和超對角張量(非主對角線元素皆為0),而不存在其他張量分解中的高階因子。例如,Tucker分解必然存在與原張量階數(shù)相同的核,也就無法得到能夠表示可分離卷積的因子。KCP的所有因子實際上皆為矩陣,故可自然映射為可分離卷積與1×1普通卷積。

(a)普通卷積

(b)可分離卷積圖3 普通卷積和可分離卷積Fig.3 Normal convolutions and depthwise convolutions

于是,由式(4)可定義分塊矩陣

(5)

(6)

2 KCPNet性能分析

2.1 KCPNet的可變表現(xiàn)形式

根據(jù)式(6),KCPNet在宏觀張量層面的表現(xiàn)形式可描述為

(7)

式中※與○*分別表示普通卷積與可分離卷積。式(7)更易于和圖4a所展示的KCPNet網(wǎng)絡(luò)結(jié)構(gòu)相對照,圖中可見KCPNet呈現(xiàn)明顯的瓶頸結(jié)構(gòu)。

(a)KCPNet瓶頸結(jié)構(gòu) (b)非對稱可分離卷積瓶頸結(jié)構(gòu)

(c)分組卷積瓶頸結(jié)構(gòu) (d)普通卷積瓶頸結(jié)構(gòu)圖4 KCPNet及可轉(zhuǎn)換的瓶頸結(jié)構(gòu)Fig.4 KCPNet and its transformable bottleneck structures

2.2 ImageNet圖像分類對比實驗

考慮到具備瓶頸結(jié)構(gòu)的卷積模塊發(fā)展歷程,本小節(jié)基于ImageNet標準大規(guī)模圖像分類數(shù)據(jù)集[32],以Tucker分解映射[21]的ResNet-50[22]和BT分解映射[23]的ResNeXt-50[24]為主要參考對象,在整體卷積神經(jīng)網(wǎng)絡(luò)總參數(shù)量相近的前提下,對比普通可分離卷積[20]、非對稱可分離卷積[19]以及KCPNet的變通道可分離卷積之間的性能差異。所有網(wǎng)絡(luò)的結(jié)構(gòu)如表1所示。表中,對網(wǎng)絡(luò)結(jié)構(gòu)的描述遵循文獻[22-24]的標準:“w×h,T,步長z”表示窗口尺寸為w×h、輸出通道為T、步長為z(z=1則忽略)的卷積;多個卷積組成的block之后的乘數(shù)y表示該block重復(fù)堆疊y個;池化參數(shù)“w×h,步長z”指池化的窗口尺寸為w×h,池化步長為z(z=1則忽略);全連接的參數(shù)“M×N”為該全連接權(quán)重矩陣的尺寸。

由表1可知:ResNet的計算量雖小但其參數(shù)量卻最大;ResNeXt和另外兩個基于CP分解的模型雖然參數(shù)量稍少,計算量卻超過了5×109;只有KCPNet能夠在參數(shù)量較低時仍然保持較少的計算量,相對更能兼顧空間與計算復(fù)雜度;Tensor power網(wǎng)絡(luò)和Speeding-up網(wǎng)絡(luò)的通道數(shù)相同,雖然理論上后者的非對稱卷積參數(shù)量更少,但由于絕大部分參數(shù)都由1×1卷積所貢獻,故總參數(shù)量并無明顯區(qū)別。

圖5 KCPNet非對稱可分離卷積改進Fig.5 Amelioration of the asymmetrical depthwise convolutions in KCPNet

需要注意的是,KCPNet的R(A)和R(B)之間的倍數(shù)關(guān)系δ決定了圖4a中1×h卷積的數(shù)量倍于w×1卷積的數(shù)量,造成了KCPNet這種變通道可分離卷積在不同方向上的特征提取程度有異,從而影響整個CNN模型的識別精度。為了優(yōu)化該特征采集不平衡的問題,需要對圖4a的可分離卷積部分略作改進。具體地,可將第1層R(A)通道的w×1卷積改為R(A)/δ通道的w×1與R(A)/δ通道的1×h卷積,并對第2層R(B)通道的卷積作出類似處理,最后將這兩層可分離卷積按w×1的通道與1×h的通道對應(yīng)即可,如圖5所示(圖中δ=2)。改進之前,圖5的KCPNet可分離卷積所輸出的特征圖更多地包含了1×h提取的高度方向特征,改進之后的輸出特征圖在高度和寬度方面的特征提取程度將變得均衡。這樣的改進雖然使其不能嚴格符合式(7)的KCP分解數(shù)學(xué)形式,但在神經(jīng)網(wǎng)絡(luò)的實際應(yīng)用中,能提供1%~2%的性能提升。

表1 ImageNet數(shù)據(jù)集圖像分類對比實驗的不同網(wǎng)絡(luò)結(jié)構(gòu)

ImageNet數(shù)據(jù)集圖像分類對比實驗結(jié)果如表2所示??梢钥闯?KCPNet與其他基于CP分解的高效卷積模塊相比具有相當(dāng)?shù)木?且相對于ResNet的精度損失十分有限(在0.5%以內(nèi))。雖然以BT分解映射的ResNeXt準確率最高,但其特殊的分組卷積架構(gòu)在實際訓(xùn)練中運行效率最低,使其與實際應(yīng)用部署之間仍有一定的距離,這一點與文獻[24]結(jié)論相一致。

表2 ImageNet數(shù)據(jù)集圖像分類對比實驗結(jié)果

3 KCPNet卷積模塊壓縮與部署

3.1 CIFAR-10圖像分類網(wǎng)絡(luò)壓縮實驗

作為一種源自KCP張量分解的方法,KCPNet除了體現(xiàn)從張量結(jié)構(gòu)到卷積模塊的映射設(shè)計方式之外,同樣能在傳統(tǒng)卷積網(wǎng)絡(luò)壓縮的方面起到一定作用。本小節(jié)基于CIFAR-10標準圖像分類數(shù)據(jù)集,以一個自設(shè)計的傳統(tǒng)VGG卷積網(wǎng)絡(luò)為參考,將其以KCPNet形式壓縮,并與相關(guān)的Kronecker張量分解壓縮方法KConv[14]和GKPD[15]進行對比,結(jié)果如表3所示。

表3 CIFAR-10數(shù)據(jù)集圖像分類對比實驗的不同網(wǎng)絡(luò)結(jié)構(gòu)

由表3可以看出,KCPNet在計算效率上的優(yōu)勢十分明顯,原因在于KCP張量分解本就是Kronecker張量分解的進階方法,其結(jié)合了CP分解的特性從而使普通卷積可以轉(zhuǎn)變?yōu)橛嬎愀咝У目煞蛛x卷積。

VGG及兩個網(wǎng)絡(luò)壓縮模型在CIFAR-10上的實驗結(jié)果如表4所示??梢钥闯?KCPNet的精度損失在0.3%左右,KConv的精度損失超過1%,文獻[14-15]的實驗記錄也表明KConv難以在CIFAR-10這類中等規(guī)模數(shù)據(jù)集上彌補精度損失。

表4 CIFAR-10數(shù)據(jù)集圖像分類對比實驗結(jié)果

結(jié)合本小節(jié)實驗可知,KCPNet可將VGG壓縮至原先的16.1%,且無明顯精度損失,并可節(jié)省75.5%的計算量,相對基于Kronecker張量分解的KConv方法[14-15]有較明顯綜合優(yōu)勢。

3.2 可分離卷積的部署

KCPNet卷積模塊的部署目標主要考慮為嵌入式GPU等通用并行計算設(shè)備。雖然目前的絕大多數(shù)深度學(xué)習(xí)平臺都已經(jīng)有了基于CUDA的接口,但對可分離卷積的實現(xiàn)并不十分高效,因為這些平臺一般采取將整個模型的所有卷積模塊轉(zhuǎn)化為矩陣乘法來計算,以便于使用成熟的并行矩陣乘法。如此,將對GPU造成很大的存儲壓力[33],這也是目前深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練往往需要大顯存GPU的原因。另一方面,大多平臺皆是基于CUDA開發(fā),這就迫使相關(guān)具體應(yīng)用只能選擇NVIDIA的產(chǎn)品。

圖7 可分離卷積在GPU內(nèi)存架構(gòu)上的部署Fig.7 Deployment of depthwise convolution on memory architecture of GPU

本小節(jié)在圖6所示的GPU的3層內(nèi)存架構(gòu)下討論可分離卷積的部署,采用跨硬件平臺的OpenCL并行編程框架,具體方式與CUDA中cuDNN將卷積簡單轉(zhuǎn)化為矩陣乘法的方式相異。部署不考慮神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程,僅與前向推理計算相關(guān)。

圖6 GPU內(nèi)存架構(gòu)Fig.6 Memory architecture of GPU

由圖6可知,GPU內(nèi)存架構(gòu)具有多層次分組的特點,部署的原則為盡量平衡地將可并行的計算內(nèi)容分配至各個工作組內(nèi)。因此,如何對可分離卷積的計算過程進行分組分塊即為部署的關(guān)鍵。由于GPU一般允許至多兩個不同維度方向的分組,再考慮實際的卷積模塊通道數(shù)往往遠大于單個特征圖的邊長,故這里一方面設(shè)為按特征圖通道進行分組,另一方面則將單個特征圖分割為若干組。

以圖7所示的3×1卷積為例,特征圖通道數(shù)D=9,每張?zhí)卣鲌D有W=8、H=3。對計算進行分組:第一個方向的分組將每張?zhí)卣鲌D分為gp_1(1)、gp_1(2)和gp_1(3)共3個部分;第二個方向則在通道上進行,每3個通道為一組,記為gp_2(1)、gp_2(2)和gp_2(3);總工作組數(shù)為這兩個分組方向交叉對應(yīng)所得,即3×3=9組。如此,GPU的每個工作組內(nèi)將被分配3塊局部內(nèi)存,每塊局部內(nèi)存負責(zé)3個通道的一部分特征圖計算。從另一個角度來看,每張?zhí)卣鲌D的計算被分配至3個不同工作組內(nèi)。由于繪圖空間限制,故圖7并未畫出所有工作組,僅描繪了gp_2(3)分別與gp_1(1)、gp_1(2)和gp_1(3)交叉對應(yīng)所得的3個工作組。每塊局部內(nèi)存之內(nèi)的卷積計算可展開并行處理,每個獨立的3×1卷積由一個執(zhí)行單元負責(zé)計算。

4 手勢識別應(yīng)用的開發(fā)

4.1 時間飛行深度相機

時間飛行(ToF)是一種較新的深度相機,其利用發(fā)射激光及其反射光之間的相位差對被攝物體的距離進行定位,并能得到被攝物體表面點云[34]。ToF技術(shù)目前已在一些特定場景中實際應(yīng)用,如Melexis與BMW公司合作在汽車中控臺部位安裝ToF相關(guān)應(yīng)用,以替代部分傳統(tǒng)的接觸式人機交互[35]。本文選用PMD公司生產(chǎn)的型號為pico-flexx的ToF深度相機[34],該相機具有體積小、功耗低的特點[36]。

4.2 數(shù)據(jù)集構(gòu)建

ToF相機是帶有光源的主動拍攝設(shè)備,會生成紅外和點云兩路不同的視覺數(shù)據(jù)。對于手勢識別,手輪廓外的其余信息是多余甚至是有干擾的,而ToF相機可通過紅外的光強閾值和點云的距離閾值互相濾波來得到較好的手勢輪廓圖像。本文實驗中令同時滿足距離大于500 mm的點云和灰度值大于110的紅外數(shù)據(jù)作為手勢輪廓中的有效像素,如圖8所示。

圖8 手勢數(shù)據(jù)的互濾波獲取方法Fig.8 Method for obtaining gesture data by cross filtering

為保證應(yīng)用的健壯性和泛化性,對數(shù)據(jù)集進行擴充。在數(shù)據(jù)集容量方面,相對文獻[37]進行擴充,訓(xùn)練集和驗證集分別擴大至10 000和4 000幅手勢輪廓。在手勢輪廓的形狀表達上,盡力做到多樣化,如圖9的第2行中,不僅以食指和中指表示數(shù)字2,也要考慮其他任何兩根手指的組合。

圖9 手勢輪廓的形狀多樣化Fig.9 Variant shapes of gesture profiles

圖10 手勢識別應(yīng)用軟件架構(gòu)Fig.10 Architecture of gesture recognition application software

4.3 應(yīng)用軟件開發(fā)

應(yīng)用軟件開發(fā)采取界面框架與驅(qū)動引擎相結(jié)合的兩層架構(gòu),如圖10所示。其中,上層界面以微軟的WPF為開發(fā)框架,下層引擎以C++的DLL動態(tài)鏈接庫形式進行開發(fā),二者之間以DLL提供的C語言API為接口。界面框架的邏輯相對簡單,以主界面框架為總體,下轄若干子功能界面框架,這些子功能包括了手勢識別的界面和一些ToF鏡頭設(shè)置相關(guān)界面。ToF引擎稍顯復(fù)雜,內(nèi)部主要包含4部分內(nèi)容:①與ToF相機相關(guān)的傳感器監(jiān)聽模塊,分別實時地接收相機端的紅外與點云數(shù)據(jù);②OpenGL引擎和OpenCL引擎聯(lián)合實現(xiàn)鏡頭數(shù)據(jù)的顯示,前者主要負責(zé)點云的顯示渲染,后者則承擔(dān)位圖的一些快速計算;③以表3的KCPNet為基礎(chǔ)的手勢識別模塊,負責(zé)將實時的手勢輪廓位圖數(shù)據(jù)送入KCPNet并將結(jié)果送于接口;④接口模塊,由負責(zé)管理任務(wù)的控制器(ToF Controller)和純C語言所包裝的API接口(ToF Interface)組成。

該軟件執(zhí)行手勢識別的流程可描述為:①紅外監(jiān)聽器和點云監(jiān)聽器實時獲取ToF相機的數(shù)據(jù),二者都通過OpenGL引擎幫助生成各自的位圖;②OpenCL以圖8所示的方法快速生成手勢輪廓圖,并送于手勢識別模塊;③手勢識別模塊調(diào)用KCPNet對手勢輪廓作出判斷,這里KCPNet應(yīng)以圖7所示的方式部署于GPU上;④手勢輪廓和手勢識別結(jié)果通過接口模塊同時送給上層的界面框架。本文完成的手勢識別應(yīng)用軟件視覺效果如圖11所示。

圖11 手勢識別應(yīng)用軟件截圖Fig.11 Screenshot of gesture recognition application software

4.4 手勢識別應(yīng)用的效果

為了凸顯KCPNet的優(yōu)勢,手勢識別應(yīng)用同時部署了表3的VGG和KCPNet兩個模型,綜合的識別效果對比如表5所示??梢钥闯?KCPNet相對于傳統(tǒng)的VGG網(wǎng)絡(luò)節(jié)省了大量的運行時內(nèi)存占用。雖然KCPNet的理論計算復(fù)雜度低于VGG,但如圖1所示,KCPNet實際上是將一個傳統(tǒng)卷積模塊分解映射為多層卷積的形式,從而使得網(wǎng)絡(luò)模型的深度加深,這就必然帶來更多層次的特征圖處理過程。即便KCPNet在內(nèi)存使用上可以通過內(nèi)存復(fù)用或及時清理使其總運行時內(nèi)存占用處于很低的水平,但更多的特征圖處理過程卻難以令KCPNet在真實運行時間上相比VGG產(chǎn)生優(yōu)勢。

表5 VGG和KCPNet的手勢識別效果對比

從表5還可看出,KCPNet在面向?qū)嶋H應(yīng)用時依舊有著可觀的優(yōu)勢。首先,一些實際應(yīng)用的數(shù)據(jù)集往往并不如ImageNet、CIFAR-10等有挑戰(zhàn)性的標準數(shù)據(jù)集復(fù)雜,這使得KCPNet在網(wǎng)絡(luò)模型壓縮的角度更容易取得無損效果。在該手勢識別應(yīng)用中,KCPNet與VGG同樣達到99.5%的驗證集分辨率,而內(nèi)存占用僅為后者的16.1%。KCPNet的網(wǎng)絡(luò)模型壓縮效果很好,在節(jié)省大量內(nèi)存的基礎(chǔ)上能夠保證實際執(zhí)行時間不受影響,手勢識別應(yīng)用的單次識別用時在9 ms左右,即運行速度超過100幀/s,能夠達到動態(tài)即時識別的實用效果。

5 結(jié) 論

本文在KCP張量分解的基礎(chǔ)上,將KCP的因子張量結(jié)構(gòu)映射為變通道可分離卷積瓶頸結(jié)構(gòu),從而提出了一種輕量化卷積模塊KCPNet。性能分析表明,所提的KCPNet能夠轉(zhuǎn)換為其他已有的多種張量分解卷積模塊,在ImageNet上的實驗驗證了KCPNet能夠兼顧空間和計算復(fù)雜度的高效性。在CIFAR-10上的CNN壓縮實驗表明,KCPNet可將其對應(yīng)的VGG壓縮至16.1%而無明顯精度損失,同時可節(jié)省75.5%的計算量。針對KCPNet中的可分離卷積,提出了在嵌入式GPU上部署的方法,使KCPNet對CIFAR-10的識別效率達到100幀/s。圍繞ToF深度相機開發(fā)了手勢識別應(yīng)用,該應(yīng)用識別率可達99.5%,內(nèi)存占用22 MB,識別效率超過100幀/s??傊?KCPNet相比已有卷積模塊,具有最優(yōu)的復(fù)雜度和可觀的壓縮能力,所提的部署方法在實際內(nèi)存占用和計算耗時方面皆有較高效率,體現(xiàn)了在實際應(yīng)用中的高效性能優(yōu)勢。

猜你喜歡
張量手勢內(nèi)存
淺談張量的通俗解釋
非負張量譜半徑上下界的估計不等式
支持張量機算法優(yōu)化研究綜述
基于原子分解的非局部結(jié)構(gòu)張量
挑戰(zhàn)!神秘手勢
筆記本內(nèi)存已經(jīng)在漲價了,但幅度不大,升級擴容無須等待
“春夏秋冬”的內(nèi)存
勝利的手勢
內(nèi)存搭配DDR4、DDR3L還是DDR3?
認手勢說數(shù)字