車佳祺,許曉榮,梁顥銘
(杭州電子科技大學(xué)通信工程學(xué)院,浙江杭州 310018)
在信息化時(shí)代下,人臉追蹤和識(shí)別在人機(jī)交互[1]、身份識(shí)別[2]、智能家居[3]、安防等場(chǎng)景有著廣闊的研究前景[4]。但是許多應(yīng)用場(chǎng)景的條件較為苛刻,例如低功耗嵌入式設(shè)備能提供的計(jì)算資源有限且儲(chǔ)存空間較小。針對(duì)此類應(yīng)用場(chǎng)景設(shè)計(jì)輕量級(jí)的人臉追蹤和識(shí)別系統(tǒng)具有重要的研究意義[5]。
該文將軟件和硬件相結(jié)合提出一個(gè)輕量級(jí)人臉追蹤和識(shí)別系統(tǒng),可用于身份識(shí)別和人機(jī)交互,提升了用戶體驗(yàn)。
基于RISC-V 架構(gòu)[6]開發(fā)的Maixduino AI K210開發(fā)板自帶一塊用于神經(jīng)網(wǎng)絡(luò)加速的KPU[7],可在低功耗情況下表現(xiàn)出優(yōu)異的計(jì)算性能。該文精簡(jiǎn)了YOLOX-Nano 的網(wǎng)絡(luò)規(guī)模,根據(jù)實(shí)際應(yīng)用情況修改了MobileFaceNet 的激活函數(shù),開發(fā)了控制舵機(jī)的人臉追蹤算法,最后將算法應(yīng)用于軟件系統(tǒng),實(shí)現(xiàn)輕量級(jí)人臉追蹤和識(shí)別,最終設(shè)計(jì)不同使用場(chǎng)景進(jìn)行系統(tǒng)測(cè)試。
該系統(tǒng)所需的硬件組成為Maixduino AI K210 開發(fā)板、攝像頭、舵機(jī)組、LM2596 模塊、18650 電池和LCD 屏幕。18650 電池和LM2560 模塊組成供電系統(tǒng),硬件工作流程圖如圖1 所示,系統(tǒng)示意圖如圖2所示。
圖1 硬件工作流程圖
圖2 人臉追蹤和識(shí)別系統(tǒng)示意圖
Maixduino AI K210 開發(fā)板通過攝像頭實(shí)時(shí)收集圖像,處理、定位和識(shí)別圖像中的人臉信息,并且提取圖片中人臉的位置坐標(biāo),取所有人臉中最大的人臉,根據(jù)人臉偏離圖像中心的距離來偏轉(zhuǎn)舵機(jī)組,使人臉中心處于圖像中心,實(shí)現(xiàn)人臉的追蹤,隨后Maixduino AI K210 開發(fā)板對(duì)人臉進(jìn)行識(shí)別,并且將識(shí)別結(jié)果顯示在LCD 屏幕上。
該系統(tǒng)的軟件部分包含了縮減后的YOLOXNano[8]人臉檢測(cè)算法、改進(jìn)后的MobileFaceNet 人臉識(shí)別算法和人臉追蹤算法。系統(tǒng)的軟件工作流程圖如圖3 所示。
圖3 軟件工作流程圖
該軟件系統(tǒng)的輸入為實(shí)時(shí)圖像。通過基于YOLOX的人臉檢測(cè)算法,可以得到實(shí)時(shí)圖像中的所有人臉信息,取所有人臉中最大的人臉作為需要追蹤和識(shí)別的對(duì)象?;贛oblieFaceNet 的人臉識(shí)別算法得到單個(gè)人臉圖像后進(jìn)行人臉識(shí)別,輸出識(shí)別的人臉結(jié)果。人臉追蹤算法得到人臉位置信息后,經(jīng)過計(jì)算得到舵機(jī)組需要轉(zhuǎn)動(dòng)的角度,實(shí)現(xiàn)人臉追蹤。以上過程是實(shí)時(shí)的、不斷循環(huán)的,最終可以實(shí)現(xiàn)人臉的追蹤和識(shí)別。
YOLO算法從2016年被提出到現(xiàn)在已經(jīng)存在6個(gè)分支,目前最新的是YOLOX。YOLOX 用Decoupled Head代替了原來的YOLO Head,使用Mosaic和Mix-up兩個(gè)數(shù)據(jù)增強(qiáng)手段,去除了anchor box,優(yōu)化了模型的性能。YOLOX-Nano 是YOLOX 模型的簡(jiǎn)化版本,降低所需要運(yùn)算量的同時(shí)精度也有所下降[8]。
Maixduino AI K210 開發(fā)板MCU 內(nèi)置的神經(jīng)網(wǎng)絡(luò)處理器(以下統(tǒng)稱KPU)是通用的神經(jīng)網(wǎng)絡(luò)處理器,其內(nèi)置了Conv、Batch Normalization、Activation、Pooling 單元,通過廠家提供的NCC 工具,可以實(shí)現(xiàn)人工神經(jīng)網(wǎng)絡(luò)的部署和運(yùn)行。但是受限于開發(fā)周期和成本,該KPU 能夠支持的算子、特征圖(future map)大小以及參數(shù)數(shù)量受到了極大地限制,最大支持神經(jīng)網(wǎng)絡(luò)參數(shù)的大小為5.5~5.9 MB。因此,為了使得神經(jīng)網(wǎng)絡(luò)模型能夠在K210 上順利運(yùn)行,文中對(duì)模型進(jìn)行了縮減。改進(jìn)后的目標(biāo)檢測(cè)算法結(jié)構(gòu)圖如圖4所示。
圖4 縮減后的YOLOX-Nano網(wǎng)絡(luò)結(jié)構(gòu)
YOLOX-Nano 的原始輸入尺寸是416×416,由于YOLOX 在運(yùn)行的過程中通過逐層下采樣進(jìn)行特征匹配,對(duì)416 不斷除以2 后得到的數(shù)字是13,即最小的一層為13×13。神經(jīng)網(wǎng)絡(luò)占用的內(nèi)存超出了硬件的限制,因而不能直接將現(xiàn)有模型移植進(jìn)設(shè)備??紤]到實(shí)際應(yīng)用中,人臉識(shí)別需要得到足夠多的信息才能有比較高的準(zhǔn)確度[9],即人臉離攝像頭要盡可能近。經(jīng)實(shí)驗(yàn)可知,縮減特征圖不會(huì)對(duì)信息量較為豐富(即大于112×96)的人臉檢測(cè)帶來負(fù)面影響,只有在對(duì)遠(yuǎn)處極小的人臉進(jìn)行檢測(cè)時(shí),存在漏檢的情況。綜合以上考慮,文中將輸入圖像的長(zhǎng)寬縮減至原來的7/13,使模型的參數(shù)量下降,網(wǎng)絡(luò)更加輕量化。
MobileNetV1 是Google 在2017 年提出的一種小而高效的算法,旨在保持一定的網(wǎng)絡(luò)性能的條件下,壓縮模型復(fù)雜度[10]。Google 隨后在MobileNetV1 的基礎(chǔ)上進(jìn)行改進(jìn)得到了MobileNetV2[11]。在MobileNetV1的深度卷積層之前,MobileNetV2 使用1 × 1 的卷積進(jìn)行升維操作,提升了算法在高維度工作的性能。與此同時(shí)將最后一個(gè)Relu 激活函數(shù)替換成Linear線性激活函數(shù),解決了Relu 激活函數(shù)在低維度的信息丟失問題。MobileFaceNet 是MobileNetV2 的改進(jìn)版本[12]。該算法用一個(gè)7×7×512 的可分離卷積代替原本的全局平均池化,提升了模型的表現(xiàn)性能,并引入歸一化層來加快模型的收斂速度。
Maixduino AI K210 支持的算子中不包含ReLU6算子,因此將模型的激活函數(shù)替換為L(zhǎng)eakyRelu 激活函數(shù),隨后進(jìn)行重新訓(xùn)練。改進(jìn)后的MobileFaceNet網(wǎng)絡(luò)結(jié)構(gòu)如圖5 所示。
圖5 改進(jìn)后的MobileFaceNet網(wǎng)絡(luò)結(jié)構(gòu)
MobileFaceNet 模型的輸出是一個(gè)128 維的向量,因而,硬件FPU 可以加速人臉和數(shù)據(jù)庫(kù)的比對(duì)操作。文中設(shè)計(jì)了兩種比對(duì)方式進(jìn)行交叉驗(yàn)證:取模和求余弦相似性(similarity)。只有當(dāng)兩個(gè)張量之間的差異小于一定值時(shí),程序才會(huì)判斷驗(yàn)證通過。
Maixduino AI K210 開發(fā)板首先使用縮減后的YOLOX-Nano 算法,得到人臉定位信息和圖像中心點(diǎn)偏差,隨后計(jì)算得到需要舵機(jī)組旋轉(zhuǎn)的角度,控制舵機(jī)轉(zhuǎn)動(dòng),實(shí)現(xiàn)人臉追蹤。YOLOX 算法檢測(cè)到圖像中所有人臉,該系統(tǒng)取圖像中最大的人臉作為追蹤目標(biāo)。
為了更好地計(jì)算人臉中心與圖像中心的偏差量。在攝像頭采集的圖像中建立二維坐標(biāo)系,利用YOLOX 算法得到人臉中心坐標(biāo)(P(x),P(y)),P(x)表示人臉橫坐標(biāo),P(y)表示人臉縱坐標(biāo)。圖像坐標(biāo)右上角為坐標(biāo)最大值(Wm,Hm),圖像中心點(diǎn)為(O(x),O(y)),兩者關(guān)系的表達(dá)式如下:
令dW表示人臉中心與圖像中心點(diǎn)之間橫坐標(biāo)的偏差量,dH表示人臉中心與圖像中心縱坐標(biāo)的偏差量,其表達(dá)式如下:
人臉定位示意圖如圖6 所示。
圖6 人臉定位示意圖
一般來說,舵機(jī)都有旋轉(zhuǎn)的角度限制,在該系統(tǒng)中,水平舵機(jī)旋轉(zhuǎn)角度在[-90°,90°]之間,垂直旋轉(zhuǎn)舵機(jī)旋轉(zhuǎn)角度在[-30°,60°]之間。設(shè)水平旋轉(zhuǎn)舵機(jī)和垂直旋轉(zhuǎn)舵機(jī)的當(dāng)前角度分別為θ和l,需要偏轉(zhuǎn)的角度分別為dθ和dl。舵機(jī)需要的旋轉(zhuǎn)角度與當(dāng)前的角度之前存在如下限制條件:
單攝像頭無(wú)法測(cè)算出攝像頭與人臉之間的距離。因此設(shè)人臉和攝像頭之間的距離為L(zhǎng),L需要通過實(shí)際使用情況來估算。在實(shí)驗(yàn)室中,通過評(píng)估測(cè)試情況得出使用距離約等于50 cm。因?yàn)樵撓到y(tǒng)是一個(gè)實(shí)時(shí)負(fù)反饋系統(tǒng),L值對(duì)系統(tǒng)穩(wěn)定性和實(shí)際使用影響不大。根據(jù)圖6 人臉定位示意圖中的數(shù)學(xué)關(guān)系,可以算出需要偏轉(zhuǎn)的角度分別為dθ和dl,如式(5)所示。
Maixduino AI K210 開發(fā)板計(jì)算出舵機(jī)旋轉(zhuǎn)角度之后,將舵機(jī)組旋轉(zhuǎn)角度轉(zhuǎn)化成對(duì)應(yīng)占空比的PWM波,發(fā)送給舵機(jī)組,舵機(jī)轉(zhuǎn)動(dòng)到設(shè)定角度,如此循環(huán)操作,可以在舵機(jī)轉(zhuǎn)動(dòng)范圍內(nèi)將人臉中心點(diǎn)定位在圖像的中心點(diǎn),實(shí)現(xiàn)精確追蹤。
在實(shí)際操作時(shí),由于舵機(jī)轉(zhuǎn)動(dòng)存在一定機(jī)械抖動(dòng)且YOLOX 識(shí)別到人臉的中心點(diǎn)會(huì)小范圍偏移,導(dǎo)致系統(tǒng)在對(duì)準(zhǔn)人臉之后會(huì)有小范圍抖動(dòng)情況。為了解決該問題,在程序中設(shè)置偏移啟動(dòng)量k,舵機(jī)的啟動(dòng)條件為:
該系統(tǒng)的目標(biāo)之一是人臉檢測(cè),而測(cè)試模型使用的數(shù)據(jù)集是Coco 數(shù)據(jù)集,其中缺少人臉數(shù)據(jù),使用Coco 數(shù)據(jù)集測(cè)試得出的結(jié)果僅能表示該改進(jìn)后的模型結(jié)構(gòu)所擁有的表達(dá)能力[13]。在實(shí)際應(yīng)用中,需要自行收集人臉數(shù)據(jù)來進(jìn)行遷移學(xué)習(xí),得到人臉檢測(cè)的模型。人臉識(shí)別部分則使用LFW 數(shù)據(jù)集進(jìn)行訓(xùn)練和測(cè)試[14]。
文中實(shí)驗(yàn)平臺(tái)的硬件參數(shù)如表1 所示,在此基礎(chǔ)上搭建軟件環(huán)境Ubuntu18.04、Python、Tensorflow、CUDA 等。
表1 實(shí)驗(yàn)平臺(tái)硬件參數(shù)
原YOLOX-Nano 模型與主流的Faster R-CNNResnet50[15]和SSD512[16]算法的性能對(duì)比如表2 所示。在犧牲部分精度之后,參數(shù)量和運(yùn)算量大幅下降。在原YOLOX-Nano 模型的基礎(chǔ)上,運(yùn)算量從1.08 GFLOPS 下降到0.31 GFLOPS,參數(shù)量基本不變,精度再次下降,在實(shí)際使用過程中精度對(duì)人臉追蹤效果影響不是很大。
表2 不同檢測(cè)算法性能對(duì)比
表3 給出了不同人臉識(shí)別算法的性能對(duì)比,與MobileNetV2相比,MobileFaceNet的參數(shù)數(shù)量從2.1 M下降到1.0 M,運(yùn)算量從0.88 GFLOPS 下降到0.22 GFLOPS,準(zhǔn)確度從98.58%上升為99.28%。MobileFaceNet 不能直接移植的主要原因是ReLU6 算子不支持,文中對(duì)模型的激活函數(shù)替換為L(zhǎng)eakyReLU 后進(jìn)行重新訓(xùn)練,在LFW 測(cè)試集上的準(zhǔn)確度僅下降了0.2%,但仍大于99%,因此認(rèn)為改進(jìn)后的MobileFace Net依舊擁有較好的表達(dá)能力。
表3 不同人臉識(shí)別算法性能對(duì)比
將縮減后的YOLOX-Nano 算法和改進(jìn)后的MobileFaceNet 算法移植到Maixduino AI K210 開發(fā)板中,文中設(shè)計(jì)了多種實(shí)際情況用來測(cè)試系統(tǒng)的性能,其結(jié)果如表4 和表5 所示,圖7 為系統(tǒng)測(cè)試的4 種情形。
圖7 系統(tǒng)測(cè)試的4種情形
表4 人臉追蹤性能測(cè)試結(jié)果
從表4 結(jié)果中可以看出,通常情況該系統(tǒng)可以有效地進(jìn)行人臉的檢測(cè)和追蹤,并且在多個(gè)人臉同時(shí)存在時(shí)也可以成功檢測(cè)并追蹤圖中最大人臉。少部分的人臉遮擋對(duì)系統(tǒng)人臉追蹤性能影響不大,但系統(tǒng)無(wú)法在大面積的人臉遮擋時(shí)準(zhǔn)確檢測(cè)出人臉并追蹤。系統(tǒng)具有良好的人臉檢測(cè)追蹤性能。從表5結(jié)果中可以看出系統(tǒng)在通常情況下可以有效地識(shí)別人臉,并且在小幅度側(cè)臉條件下具有良好的識(shí)別性能。當(dāng)人臉側(cè)轉(zhuǎn)角度過大或者俯仰角度超過一定范圍時(shí),系統(tǒng)無(wú)法識(shí)別,系統(tǒng)具有良好的識(shí)別性能。
表5 人臉識(shí)別性能測(cè)試結(jié)果
文中基于Maixduino AI K210 平臺(tái),成功將縮減后的YOLOX-Nano 網(wǎng)絡(luò)和改進(jìn)后的MobileFaceNet網(wǎng)絡(luò)移植到平臺(tái)上。通過將輸入圖像的長(zhǎng)寬縮減至原來的7/13,使YOLOX-Nano 運(yùn)算量從1.08 GFLOPS縮減到0.31 GFLOPS。將MobileFaceNet 網(wǎng)絡(luò)的激活函數(shù)替換為L(zhǎng)eakyRelu,使K210 平臺(tái)可以運(yùn)行MobileFaceNet 網(wǎng)絡(luò),準(zhǔn)確度小幅下降,從99.28%下降到99.10%。系統(tǒng)通過縮減后的YOLOX-Nano 網(wǎng)絡(luò)檢測(cè)人臉并且定位人臉,然后將需要轉(zhuǎn)動(dòng)的角度發(fā)送給舵機(jī)實(shí)現(xiàn)人臉追蹤,最后利用MobileFaceNet 網(wǎng)絡(luò)識(shí)別檢測(cè)出的人臉。實(shí)驗(yàn)測(cè)試表明,該系統(tǒng)具有良好的人臉追蹤和識(shí)別性能。下一步工作是優(yōu)化模型結(jié)構(gòu)和損失函數(shù),并且提升系統(tǒng)的性能和實(shí)用性。