陳利民,嚴偉豪,梁 音,李春泉
(南昌大學信息工程學院,江西 南昌 330031)
人體的生物特征因基因的不同從而具有唯一性,且在已知的生物特征中,人臉的數據具有易采集的優點。因此,人臉識別成為了身份識別和人機交互的關鍵技術之一。深度卷積神經網絡模型應用于人臉識別系統,識別率和抗干擾性能較傳統模式識別方法有更優表現[1]。在嵌入式人工智能(AI,Artificial Intelligence)實驗平臺上設計基于卷積神經網絡模型的人臉識別系統,將最新的人工智能科研成果融入實驗教學,以增強學生對嵌入式人工智能理論知識的理解。深度網絡的計算復雜度高,然而現有國產化嵌入式人工智能芯片仍在起步階段,運算能力較低,大部分只能在定點模式下實現一萬億次級別(TOPS,Tera Operations Per Second)的計算性能峰值[2]。研究深度卷積模型壓縮及其在國產化實驗平臺的性能,有助于打通人工智能算法在嵌入式計算和邊緣計算應用場景中落地的屏障。
為了實現人臉識別模型在嵌入式人工智能實驗平臺的部署,提出了一種基于跳連接(Skip-connection)的DarkNet19人臉識別模型。模型部署在國產嵌入式人工智能K210實驗系統上,對比分析了量化、剪枝這兩種壓縮方式前后的性能差異。將基于跳連接的DarkNet19壓縮模型與DarkNet53[3]、MobileNet-v1[4]壓縮模型對比,深入對比分析了上述壓縮模型在識別幀率、準確率、模型的復雜度等方面的性能差異。
由于核心芯片性能的限制,現有嵌入式人工智能實驗多數使用高性能計算工作站或云計算服務器模擬嵌入式人工智能模型推理,僅停留在基礎理論階段。缺少嵌入式計算場景或邊緣計算場景下工程案例的引導,學習者難以建立完整的嵌入式AI知識框架。國內已有研究團隊使用嵌入式實驗平臺實現手寫體數字識別等嵌入式AI工程案例[5-6],將理論知識實例化,這將大大提高學習者的學習效率[7-8]。將人臉識別、多目標物體識別等高復雜度模型部署到嵌入式人工智能實驗平臺,可以將數據集處理、網絡結構搭建、模型訓練、模型壓縮、量化、模型部署等過程實例化,培養學生在嵌入式人工智能方向的創新能力。
雖然國產化嵌入式人工智能實驗平臺計算能力已經有了快速的提升,但其計算資源仍不能直接支撐深度神經網絡的部署。以嘉楠科技自主研發的機器聽覺多模態識別的系統級芯片(SoC)勘智K210及其嵌入式開發實驗平臺為例。K210包含RISC-V 64位雙核高性能低功耗CPU和卷積神經網絡加速處理器KPU等加速計算單元。KPU是通用神經網絡處理器,內置卷積、批歸一化、激活、池化運算單元。KPU實時工作時最大支持神經網絡參數大小為5.5MiB到5.9MiB;其計算峰值可達1TOPS;支持主流訓練框架,比如YOLO、Keras和Pytorch等,按照特定限制規則訓練出來的定點化模型[9]。VGG-16、ResNet50等主流深度網絡參數量超過100M。嵌入式人工智能實驗平臺資源受限,迫切需要研究網絡模型壓縮及其對性能的影響。
針對國產化嵌入式人工智能實驗平臺資源有限的現狀,同時為了增加識別的準確率,精簡網絡結構,以DarkNet19網絡為主體基礎,提出了一種基于跳連接的DarkNet19網絡優化結構。DarkNet19實際上是Yolo-v2網絡中提取特征的主干網絡,網絡結構如表1所示,其包含19層卷積層,5個最大池化Maxpooling層,為了減少網絡參數,DarkNet19去掉了全連接(FC,Full Connect)層,并在每個卷積層后面都加入了一個批量歸一化(BN,Batch Normalization)層用以提升模型收斂速度,防止過擬合情況的出現。

表1 DarkNet19網絡結構
以跳連接的DarkNet19網絡作為主體結構,首先截取Convolutional Filters 1000之前的網絡,在第18層卷積后增加了4層網絡,第19~22層網絡參數如表2所示。增加了3個3×3的卷積層,同時在第21層增加了轉移層(Passthrough Layer),把淺層特征圖連接到深層特征圖。在該層引入了4個跳連接,通過跳連接來對數據進行特征重排,將特征圖像分別按行和列取樣,并使用TensorFlow算子space_to_depth對數據進行處理,將處理后的子特征圖按通道連接得到特征圖。

表2 第19~22層網絡結構參數
為增加最終預測的可靠性,將最后一層Convolutional Filters1000的卷積移除,并增加了一個1×1卷積層生成預測輸出。其卷積核數量Filters根據式(1)確定:
Filters=NUM_ANCHORS×(4+1+NUM_CLASS)
(1)
其中ANCHORS值由式(2)確定,CLASSES則由檢測框內的種類確定。Anchor主要解決設置的參考框內是否有目標,若有目標,則目標框與參考框之間的偏差大小的問題,其定義如式(2)所示:
anchors=generate_anchor(feature_map_sizes,anchor_sizes,anchor_rations)
(2)
式(2)中的feature_map_sizes指的是該層卷積核的個數,由卷積核的數量決定,其大小計算公式如式(3)所示:
(3)
其中,heightin與widthin指輸入尺寸,heightout與widthout指輸出尺寸,padding指邊界填充,stride指步長。
模型壓縮是指對已經訓練好的深度模型進行精簡,進而得到一個小而精的網絡。壓縮之后的模型網絡結構更加簡單,參數也相應減少,并且有效降低了模型運行資源的消耗。目前,模型壓縮的方式一般有模型剪枝,更精細化模型設計,權重量化等。
使用全局貪婪剪枝Pruning Filters for Efficient Convnets的方法進行模型剪枝[10],該方法使用加權系數的絕對值和大小來評判其重要性,其原理如圖1所示,將中值較低的卷積核裁掉,并驗證裁剪后的準確率,若某一層的裁剪對準確率影響較大,則表明該層較敏感,則減小對該層的裁剪力度或是不做處理。相對于剪枝前的模型,剪枝后的模型大小和參數小了很多,其業務邏輯層的運算量也大幅降低,而最終性能卻沒有受到影響。

圖1 中間層神經元裁剪
基于跳連接的DarkNet19網絡模型剪枝過程如下:
1.將基于跳連接的DarkNet19網絡訓練出的權重文件使用工具Darkflow,將其轉換成為Yolo-v2模型。該模型不僅保留了模型權重,還包含整個模型的信息。
2.對Yolo-v2模型進行稀疏訓練[11]。其原理是引入一個比例因子γ,并將其與訓練網絡的權值結合,在稀疏的正則化處理后直接去除比例因子通道,最終得到微調剪枝網絡。其過程如式(4)所示:
(4)
其中,x表示訓練的數據;y為數據標簽;W為訓練參量,λ為稀疏系數。選擇g(γ)=|s|,也就是L1正則化,通過稀疏訓練后的模型相對原來模型有效地降低了模型存儲空間。
3.稀疏訓練后開始對模型進行剪枝。首先獲得BN層權重,并根據大小進行排序,其最大與最小值則為閾值上下限,選擇需要剪枝的ID,將其剔除,同時設定裁剪參數的占總參量的百分比,將BN層權重乘以不需要剪枝的通道下標,最后輸出每層保留的通道數列表,獲得剪枝后的模型,并對剪枝后的模型進行評價。
針對輕量化網絡結構,除了基于跳連接的DarkNet19網絡,還對比使用了MobileNet-v1作為主干網絡。MobileNet-v1是一個專門部署于嵌入式或者基于移動網絡終端智能設備上的一種輕量級CNN網絡,在準確率和大幅下降的條件下,大大地減小了模型的參數,其規模僅為VGG16的1/32。MobileNet的最大特點為深度可分離卷積(Depthwise Separable Convolution),深度可分離卷積塊由兩部分組成,分別是普通卷積和深度可分離卷積。使用此種結構的目的是減少計算的參數。1x1卷積則完成了通道數的調整等相關工作。
深度可分離卷積結構在計算量上與標準卷積有較大的差別。假定輸入特征圖的大小為DF·DF·M,而輸出的特征圖為DF·DF·N,其中DF是特征圖的width和height,假定兩者相同。對于標準卷積來說DK·DK,其計算量為:
DK·DK·M·N·DF·DF
(5)
而深度卷積網絡的計算量為:
(6)
由式(6)可知,當N較大的情況下,深度可分離卷積相較標準卷積可以降低大約9倍的計算量。
先對圖像進行圖像人臉位置的標定,仿射變換等預處理,然后輸入MTCNN網絡[12],其中共包含Proposal Network、Refine Network和Output Network三個子網絡,分別記為P-Net、R-Net和O-Net。P-Net將濾除大部分候選圖像并且使用邊框回歸和關鍵點定位器來篩選人臉區域,并將可能的人臉區域輸出,傳入R-Net進行更精細的篩選,然后輸出一個可靠人臉區域到O-Net,O-Net最后進行一次篩選,在輸出圖像的基礎上,它也會輸出5個面部關鍵點的位置以及準確的目標框大小和坐標,將輸出結果傳入MobileNet-v1網絡進行訓練,得到人臉識別輕量化模型。
模型量化有兩種基本方式,即后訓練量化和訓練時量化,我們選擇后訓練量化。相較于后者,這種方式無需重新訓練模型,其原理是使用已有的浮點模型,將其量化為定點型模型,通過降低權重和激活輸出的方式來降低模型復雜度,這種方式具有很多優點:
(1)更小的模型尺寸:當使用8bit量化時,模型的尺寸將降低四倍,更小的尺寸意味著在模型下載時間縮短,模型占用內存減少,并且模型精度損失較少。
(2)低功耗:移動8bit定點型數據與移動32bit浮點型數據相比,在效率上前者比后者高4倍。因此減少數據移動量將在很大程度上降低功耗。
(3)激活輸出所需的內存少:降低精度,數據就會占用更少的內存,也就有利于緩存更好地重用。
(4)更短的推理耗時:大多數處理器8bits數據的處理速度高于32bits數據。
為了與使用基于跳連接的DarkNet19網絡結構訓練出的模型做對比,量化時選擇將經過Darkflow轉換后的Yolo-v2模型的權重與激活輸出一起量化為8bit。量化卷積網絡如圖2所示。qx、qa1、qa2、qy表示量化后的定點數。先將輸入量化成定點整數qx,然后根據量化公式(7)計算qa1、qa2與qy,其中w表示卷積的權重,q表示定點整數,a表示輸出的激活值,S和Z表示scale和zero point。

圖2 量化卷積網絡
(7)
為了確定尺度scale和zero point,也就是激活輸出的動態范圍,準備了1200張帶標定的人臉數據集,利用這些數據集來估計全精度模型的x、a1、a2、y的取值范圍,也就是min、max參數,由線性量化公式(8)和(9)確定每一層卷積輸出特征圖的量化因子尺度scale和zero point。
(8)
(9)
其中,r表示浮點實數,minq與maxq由式(10)和式(11)決定,num_bit表示量化位數,選擇量化為8比特無符號整數。
minq=-2∧(num_bit-1)
(10)
maxq=2∧(num_bit-1)-1
(11)
最后利用全連接層計算出來的scale與zero point,推算回浮點實數,得到最后的輸出。
K210嵌入式AI平臺的實物及各模塊展示如圖3所示,該平臺與RT-Thread深度合作,構成了集數據獲取、開發編譯、應用部署、實時結果顯示的完整系統框架。當系統運行時,會將攝像頭捕捉到的畫面和人臉識別結果實時顯示在LCD屏幕上。

圖3 嵌入式人工智能實驗系統
使用了Darkflow將基于跳連接的DarkNet19網絡下訓練出來的模型權重轉換成為Yolo-v2模型,也就是Tensorflow模型文件,從而還原了模型的所有信息。但由于Tensorflow模型文件在K210上的支持并不友好,因此,還需要將其轉換為Tflite模型文件,Tflite模型支持算子更多,且模型更小,對嵌入式平臺具有更好的支持環境。通過調用Tensorflow官方庫里的tf.lite.TFLiteConverter函數,可以實現Tensorflow模型到Tflite模型的轉換。但并不是所有模型文件都可以使用這個轉換器,對于Keras或Pytorch模型,則需要先使用ONNX接口將其轉換為Tensorflow模型,然后才能使用Tensorflow轉換器轉換為Tflite模型。
為了將轉換后Tflite模型部署于K210嵌入式開發平臺,使用基于RT-AK的部署套件,它是RT-Thread團隊對RT-Thread系統開發的一套集成部署與編譯開發套件,其工作方式主要基于RT-AK Tools與RT-AK Lib兩大組件,前者主要是在上位機實現AI模型轉換,并且部署到BSP,獲得集成AI的BSP,后者則是在嵌入式端完成模型推理,包括模型注冊、初始化、獲取輸出等,其工作流程如圖4所示,通過拉取第三方目標平臺插件代碼并執行插件相關工作來實現模型在不同平臺的適配。

圖4 壓縮模型部署流程
為了研究不同網絡模型壓縮對識別性能的影響,將基于跳連接的DarkNet19網絡、MobileNet-v1網絡訓練出的人臉識別模型都部署在K210實驗平臺進行本地端對比。同時探討模型在經過模型剪枝,模型量化后其精細度和準確率是否會有明顯的降低。
將模型部署在K210開發平臺,圖5顯示了四種不同網絡人臉識別結果。實驗平臺能很好地檢測人臉,基于跳連接的Darknet19網絡模型在人臉識別準確率上相對優化前提高了5%;DarkNet53網絡模型在人臉識別準確率上效果最好,同時,模型參數也最多。圖5-c顯示在MTCNN+MobileNetV1網絡下多人環境人臉識別檢測的結果,人臉識別準確率最高達到了89%,與DarkNet53網絡模型識別結果相比,其在準確率相當的情況下模型要小很多。

(a)Darknet19 (b)基于跳連接的Darknet19 (c)MTCNN+MobileNetV1 (d)Darknet53
四種模型壓縮前后的差異主要表現在推理耗時、檢測準確率、模型參數規模等方面。圖6描述在四種不同網絡訓練出的模型在同一場景下經過壓縮前后準確率的不同。可以看出使用更精細化的MTCNN+MobileNetV1網絡或是DarkNet53訓練,模型準確率更高。基于跳連接的DarkNet19網絡相對優化前在準確率上的提升明顯,已經基本和使用基于MTCNN+MobileNet-v1二重網絡模型準確率相同。模型在壓縮后,其精度都會有一定的損失,但模型準確率都能保持在80%以上。

網絡模型類型
圖7描述四種網絡模型壓縮前后的模型推理時間變化,使用基于跳連接的Darknet19網絡模型推理時間最短,隨著網絡結構的復雜,模型推理時間也在不斷增加;而在模型經過量化和剪枝后,推理時間相對壓縮前減少了20%;使用Darknet53網絡訓練的模型由于參數規模大,因此其模型推理時間最長,不適合部署在移動端。

網絡模型類型
圖8顯示了模型在經過剪枝和量化后模型大小變化。可以看出,模型壓縮使得模型大小縮小約20%,模型參數也相應減少。而量化與剪枝相比,前者所帶來的收益要大于后者,模型參數減少的比例要大。

網絡模型類型
本文提出了一種基于跳連接DarkNet19網絡及其壓縮的人臉識別模型,部署在國產嵌入式人工智能實驗平臺K210上實現基于深度神經網絡模型壓縮的嵌入式人臉識別系統。該實驗系統將人工智能碎片化的理論知識實例化,讓學生擺脫傳統教學模式下的被動學習,轉變為主動面向嵌入式系統國產化進程培養學生人工智能方向的創新能力。可以對系統使用的人臉識別模型進行了模型剪枝、量化、精細化模型設計等模型壓縮方式,還使用了MTCNN與MobileNet-v1網絡、DarkNet53網絡訓練人臉識別模型以對比網絡性能,探討了不同的模型壓縮方式,不同的網絡結構對人臉識別系統的影響。