祁星晨,卓旭升
(武漢工程大學(xué) 電氣信息學(xué)院,湖北 武漢 430205)
近年來(lái),邊緣設(shè)備等爆炸式增長(zhǎng),百億數(shù)量級(jí)的邊緣設(shè)備接入互聯(lián)網(wǎng)。傳統(tǒng)的AI計(jì)算架構(gòu)主要是依靠云計(jì)算,雖然云計(jì)算能夠提供足夠的計(jì)算能力和可靠的計(jì)算結(jié)果,但其不斷地消耗大量電力,且邊緣設(shè)備也需要消耗能量收集數(shù)據(jù)并傳輸?shù)皆贫耍瑐鬏斶^(guò)程存在著延遲。而邊緣設(shè)備與AI的結(jié)合能夠降低能源的消耗以及降低延遲,使得原本在云端完成的任務(wù)可在邊緣設(shè)備完成,降低了云端的負(fù)擔(dān),發(fā)掘了邊緣設(shè)備的計(jì)算能力[1-3]。
目標(biāo)檢測(cè)是AI領(lǐng)域的熱點(diǎn)研究任務(wù),廣泛應(yīng)用于機(jī)器人導(dǎo)航、工業(yè)檢測(cè)和航空航天等諸多領(lǐng)域,其目的是找出圖像中所有感興趣的物體,包含物體定位和物體分類(lèi)兩個(gè)子任務(wù)。而人臉檢測(cè)屬于目標(biāo)檢測(cè)任務(wù)的子集,在人臉檢測(cè)基礎(chǔ)上的應(yīng)用有人臉識(shí)別、表情分析等。關(guān)于目標(biāo)檢測(cè)任務(wù)的研究有許多,產(chǎn)出了許多成果,主要有Viola-Jones[4]、Faster-RCNN[5]、YOLO[6]、SSD[7]、Cascade R-CNN[8]、MTCNN[9]等,這些研究在目標(biāo)檢測(cè)任務(wù)上精度和速度的要求不斷提高。對(duì)于邊緣設(shè)備,特別是低功耗邊緣設(shè)備,資源極其有限,目標(biāo)檢測(cè)任務(wù)往往需要較大的算力,因而難以得到應(yīng)用。文獻(xiàn)[10]和文獻(xiàn)[11]均利用深度學(xué)習(xí)的方法對(duì)人臉進(jìn)行檢測(cè),在精度上有著較好的表現(xiàn),但是其應(yīng)用主要是依靠PC系統(tǒng)上強(qiáng)大的GPU,難以實(shí)際應(yīng)用于低功耗的邊緣設(shè)備。文獻(xiàn)[12]、文獻(xiàn)[13]和文獻(xiàn)[14]在FPGA平臺(tái)和NVIDIA JETSON TX2嵌入式平臺(tái)上實(shí)現(xiàn)了目標(biāo)檢測(cè)和識(shí)別的應(yīng)用,相比較與PC系統(tǒng)的功耗,F(xiàn)PGA平臺(tái)和NVIDIA JETSON TX2嵌入式平臺(tái)的功耗稍低,能效高。文獻(xiàn)[15]則將深度可分離卷積于表情識(shí)別,文獻(xiàn)[16]將MobileNet-SSD的目標(biāo)檢測(cè)任務(wù)部署于NVIDIA JETSON TX2平臺(tái)上,文獻(xiàn)[17]將Yolov3的目標(biāo)檢測(cè)任務(wù)部署于NVIDIA JETSON TX1平臺(tái)上,文獻(xiàn)[18]將改進(jìn)的R-DA和KCF算法部署于NVIDIA JETSON TX1平臺(tái)。相比較而言,上述平臺(tái)對(duì)于大部分低功耗邊緣設(shè)備來(lái)說(shuō),算力較強(qiáng),因此將精簡(jiǎn)和優(yōu)化后的目標(biāo)檢測(cè)模型部署于低功耗邊緣設(shè)備是十分必要的。
基于上述背景和已有的研究,本文以人臉檢測(cè)為例的目標(biāo)檢測(cè)任務(wù),針對(duì)Cortex-M7為內(nèi)核的低功耗上的實(shí)現(xiàn)和應(yīng)用,選擇了MTCNN這一靈活的算法作為本文主要實(shí)現(xiàn)的人臉檢測(cè)功能的主干,在ST公司的STM32H747-DISCO雙核平臺(tái)上,實(shí)現(xiàn)了人臉檢測(cè)和跟蹤,解決了一部分目標(biāo)檢測(cè)任務(wù)在低功耗邊緣設(shè)備應(yīng)用問(wèn)題。
MTCNN人臉檢測(cè)和對(duì)齊算法是利用多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)完成的,主要任務(wù)是尋找圖像中人臉?biāo)诘奈恢脜^(qū)域,以及人臉對(duì)齊,即找出特征點(diǎn)的位置,如鼻子左側(cè)、鼻孔下側(cè)、瞳孔位置、上嘴唇下側(cè)等點(diǎn),其主要結(jié)構(gòu)如圖1所示。
圖1 MTCNN中P-Net、R-Net和O-Net的結(jié)構(gòu)
工作過(guò)程主要是建立圖像金字塔后,由P-Net這一建議網(wǎng)絡(luò)對(duì)圖像中可能存在人臉的位置提出建議,生成大量裁剪的分辨率為24×24的RGB圖片,輸入到R-Net(也就是精調(diào)網(wǎng)絡(luò)),對(duì)P-Net提出的建議經(jīng)過(guò)仔細(xì)判斷,并再次提出經(jīng)過(guò)修改和判斷的意見(jiàn),從原圖像中裁剪出意見(jiàn)中對(duì)應(yīng)的、分辨率為48×48的圖片,最后將這些圖片輸入到O-Net也就是輸出網(wǎng)絡(luò),得到最終的人臉?lè)诸?lèi)概率、人臉檢測(cè)框和人臉特征點(diǎn)的位置。圖2展示了這一三層、三級(jí)串聯(lián)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的工作過(guò)程。
圖2 MTCNN工作流水線
MTCNN算法具有一定的改進(jìn)空間,本文主要從三層級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)、極大值抑制(NMS)和輸出結(jié)構(gòu)三方面進(jìn)行速度優(yōu)化和改進(jìn),雖然損失了精度,但是換來(lái)了能夠在低功耗邊緣設(shè)備上運(yùn)行的可能性。
1.2.1 深度可分離卷積
深度可分離卷積[19]是谷歌公司于2017年在Mobilenets中提出的適用于移動(dòng)設(shè)備的輕量級(jí)卷積核。
如圖3所示,標(biāo)準(zhǔn)的卷積核大小為DK×DK×M×N,其中DK為核的空間尺寸,M是輸入通道,N是輸出通道。如圖4(a)和圖4(b)所示,深度可分離卷積在同樣輸入和特征圖輸出情況下,其大小為DK×DK×M+M×N,很明顯地可以看出深度可分離卷積的大小較小,若DF為輸出特征圖大小,那么標(biāo)準(zhǔn)卷積的計(jì)算消耗為DK×DK×M×N×DF×DF,深度可分離卷積的計(jì)算消耗為DK×DK×M×DF×DF+M×N×DF×DF,因此深度可分離卷積不僅在大小上而且在速度上比標(biāo)準(zhǔn)的卷積核有優(yōu)勢(shì),故而本文將使用深度可分離卷積替代MTCNN中的部分卷積核,并適當(dāng)減小卷積核的大小。MTCNN和改進(jìn)后3個(gè)網(wǎng)絡(luò)的對(duì)比見(jiàn)表1。
圖3 標(biāo)準(zhǔn)卷積的大小
圖4 深度可分離卷積構(gòu)成
1.2.2 非極大值抑制算法(NMS)
MTCNN中使用的非極大值抑制有效地將P-Net、R-Net和O-Net輸出的人臉候選框重復(fù)部分較大的去除,進(jìn)而使R-Net和O-Net的計(jì)算量減少。對(duì)于低功耗邊緣設(shè)備需要更高效率的非極大值抑制,并可根據(jù)應(yīng)用場(chǎng)景和經(jīng)驗(yàn)調(diào)整相應(yīng)的閾值,以便適應(yīng)不同的環(huán)境,第一個(gè)閾值為候選框控制是人臉的最低概率,第二個(gè)閾值為控制多個(gè)候選框最大的Iou值,具體計(jì)算過(guò)程可見(jiàn)以下算法。
1.2.3 訓(xùn)練和移植改進(jìn)MTCNN
本文使用widerface數(shù)據(jù)集,深度學(xué)習(xí)框架為T(mén)ensor-Flow 2.1.0,GTX-1050訓(xùn)練改進(jìn)MTCNN的P-Net和R-Net。訓(xùn)練完畢后,將P-Net輸入為固定大小的圖像金字塔,由于邊緣設(shè)備的圖像采集設(shè)備往分辨率是固定的,并不需要處理各種分辨率場(chǎng)景的圖像,因此固定數(shù)量和分辨率的圖像金字塔能夠更靈活地適應(yīng)不同計(jì)算能力的邊緣設(shè)備。本文圖像金字塔中圖像數(shù)量為2,分辨率分別為80×60和40×30。
人臉跟蹤是在三維空間一個(gè)點(diǎn)上旋轉(zhuǎn)攝像頭以保持人臉在圖像中心,因此本文使用兩軸舵機(jī)云臺(tái)作為機(jī)動(dòng)裝置,控制舵機(jī)角度使用PWM占空比的方式,如圖5方框中所示。
假設(shè)人臉候選框已給出,人臉在單幀圖像中的位置,候選框的左上角坐標(biāo)為(x0,y0),右下角坐標(biāo)(x1,y1),那么人臉候選框中心點(diǎn)為:(xc,yc)=([(x1-x0)/2],[(y1-y0)/2]),其中[ ]為取整函數(shù)。
攝像頭獲取的單幀圖像中心點(diǎn)為(xi,yi),采用增量式PI算法,對(duì)橫向軸舵機(jī)的控制量則有Sx=kP·(xc-xi)+kI·∑(xc-xi),其中,kP、kI為增益;Sy同理。
表1 MTCNN和改進(jìn)后的MTCNN結(jié)構(gòu)對(duì)比
利用ST公司的Cube.AI工具箱對(duì)改進(jìn)MTCNN的P-Net和R-Net進(jìn)行轉(zhuǎn)換,以便移植到邊緣設(shè)備,最終可將改進(jìn)MTCNN移植到STM32H747-Disco平臺(tái),并進(jìn)行測(cè)試,平臺(tái)如圖5所示。
圖5 本文平臺(tái)實(shí)物圖
本文邊緣平臺(tái)的速度可達(dá)600~800 ms一張人臉,多張人臉的計(jì)算速度會(huì)增加約每張人臉200 ms,由于算法的可調(diào)閾值,故而對(duì)于人臉個(gè)數(shù)可控,因此速度也可控,單張人臉檢測(cè)結(jié)果如圖6和圖7所示,圖中的框?yàn)槿四槞z測(cè)框。
圖6 單張人臉檢測(cè)結(jié)果(戴口罩)
圖7 單張人臉檢測(cè)結(jié)果(不戴口罩,背景有強(qiáng)烈白光)
本文平臺(tái)運(yùn)行在全速(即480 MHz),并且打開(kāi)了絕大部分外設(shè),根據(jù)ST數(shù)據(jù)手冊(cè)、文獻(xiàn)[13]、文獻(xiàn)[14]中提到的平臺(tái),表2僅列出CPU的峰值功耗,其余外設(shè)不計(jì),并對(duì)比了邊緣平臺(tái)所擁有的各種資源,可見(jiàn)低功耗邊緣平臺(tái)的資源是非常緊湊的,而且計(jì)算能力遠(yuǎn)不如大型平臺(tái)。
表2 多種邊緣平臺(tái)功耗對(duì)比
本文完成了目標(biāo)檢測(cè)任務(wù)在資源極其有限的計(jì)算平臺(tái)的實(shí)現(xiàn)。基于MTCNN算法進(jìn)行改進(jìn),可應(yīng)用于固定場(chǎng)景、人臉個(gè)數(shù)不多的條件下,非常適合電池供電的低功耗邊緣設(shè)備對(duì)目標(biāo)檢測(cè)功能的需要。測(cè)試結(jié)果表明,深度學(xué)習(xí)的方法魯棒性較高,不僅是人臉檢測(cè)任務(wù),本文方法可為其他目標(biāo)檢測(cè)在低功耗邊緣應(yīng)用作為參考,可用于多種場(chǎng)景。本文方法不足之處和未來(lái)需要做的工作:
(1)本文目標(biāo)檢測(cè)任務(wù)在資源極其有限的平臺(tái)運(yùn)行,檢測(cè)速度也極其有限,因此下一步可通過(guò)量化、稀疏化等方法對(duì)卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行優(yōu)化,提高檢測(cè)速度。
(2)人臉檢測(cè)僅有一種物體的檢測(cè),因此未來(lái)可繼續(xù)研究如何在低功耗邊緣設(shè)備上提供兩種或兩種以上物體的檢測(cè),以此充分利用邊緣設(shè)備的計(jì)算能力。