彭智勇 黃揚(yáng)翔 梁紅珍
(1.桂林電子科技大學(xué) 光電工程學(xué)院 廣西桂林 541004;2.桂林生命與健康職業(yè)技術(shù)學(xué)院 廣西桂林 541001)
計(jì)算機(jī)視覺(jué)是一門課程內(nèi)容與時(shí)俱進(jìn)的重要計(jì)算機(jī)專業(yè)課程[1]。人臉識(shí)別跟蹤廣泛應(yīng)用于目標(biāo)人物跟蹤、自動(dòng)駕駛技術(shù),無(wú)人機(jī)搜索救援,人臉跟蹤拍照等很多的新興技術(shù)中,是計(jì)算機(jī)視覺(jué)領(lǐng)域的經(jīng)典課題。本課題綜合深度學(xué)習(xí)、圖像處理、模式識(shí)別、GPU加速、自動(dòng)控制、機(jī)械裝置設(shè)計(jì)等技術(shù),設(shè)計(jì)了人臉識(shí)別智能跟蹤綜合實(shí)驗(yàn)平臺(tái),平臺(tái)可根據(jù)人臉識(shí)別定位結(jié)果控制機(jī)械系統(tǒng),完成對(duì)目標(biāo)人臉的跟蹤和鑒定。通過(guò)實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)可以加深學(xué)生對(duì)知識(shí)的理解、培養(yǎng)學(xué)生對(duì)復(fù)雜工程問(wèn)題的探索、創(chuàng)新能力。
人臉識(shí)別跟蹤實(shí)驗(yàn)平臺(tái)在技術(shù)上包含有人臉檢測(cè)、識(shí)別、目標(biāo)跟蹤的上位機(jī)系統(tǒng)和控制功能的單片機(jī)系統(tǒng)與機(jī)械傳動(dòng)裝置。其中人臉檢測(cè)是查找圖像中人臉的位置;人臉識(shí)別是將待匹配的人臉圖像與存儲(chǔ)的人臉圖像進(jìn)行對(duì)比,判斷是否為同一個(gè)人;目標(biāo)跟蹤則通過(guò)跟蹤器對(duì)檢測(cè)到的人臉?biāo)趨^(qū)域進(jìn)行快速跟蹤,提升運(yùn)行效率[2];單片機(jī)控制系統(tǒng)則通過(guò)控制算法實(shí)現(xiàn)過(guò)轉(zhuǎn)角電機(jī)的控制,從而調(diào)整相機(jī)角度,使目標(biāo)人臉始終處理圖像中心;機(jī)械傳動(dòng)裝置則是由步進(jìn)電機(jī)構(gòu)成的執(zhí)行機(jī)構(gòu)。
平臺(tái)程序基于TensorFlow[3]實(shí)現(xiàn)。算法通過(guò)多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(MTCNN)檢測(cè)人臉;基于通用人臉識(shí)別網(wǎng)絡(luò)FaceNet求解人面部圖像在歐氏空間的距離識(shí)別人臉;識(shí)別好的目標(biāo)人臉作為跟蹤目標(biāo),利用跟蹤器[4]進(jìn)行跟蹤,每完成一次檢測(cè)識(shí)別,更新一次跟蹤目標(biāo),可防止跟蹤目標(biāo)的丟失;程序分為多個(gè)線程運(yùn)行,對(duì)人臉檢測(cè)、識(shí)別的同時(shí),跟蹤人臉?biāo)趨^(qū)域,既保持流暢的采集顯示,又可以對(duì)人臉位置逐幀更新。平臺(tái)算法框圖如圖1所示。
圖1 平臺(tái)算法框圖
人臉檢測(cè)采用MTCNN算法實(shí)現(xiàn),MTCNN由P-Net、R-Net和O-Net三個(gè)網(wǎng)絡(luò)級(jí)聯(lián)構(gòu)成。P-Net先獲取回歸向量以及人面部候選窗,通過(guò)回歸的結(jié)果調(diào)整候選窗,并將有較高重疊度的候選窗通過(guò)NMS(非極大值抑制)合并。R-Net篩選候選窗的方法類似P-Net,不同的是比P-Net多了一個(gè)全連接層,以更好地抑制冗余窗。O-Net比R-Net層又多一層卷基,因此處理的結(jié)果會(huì)更加準(zhǔn)確,作用和R-Net一樣,該層對(duì)人的面部所在區(qū)域有更多的監(jiān)督,同時(shí)輸出5個(gè)關(guān)鍵點(diǎn)坐標(biāo)。
人臉識(shí)別通過(guò)通用FaceNet算法實(shí)現(xiàn)。FaceNet網(wǎng)絡(luò)使用的是谷歌研發(fā)的深度網(wǎng)絡(luò)結(jié)構(gòu)GoogLeNet。FaceNet學(xué)習(xí)的是如何將圖像映射到歐氏空間,圖片在歐式空間上特征的距離越小,則越相似。輸入為由MTCNN檢測(cè)出并尺度歸一后的人臉圖圖像,圖像經(jīng)過(guò)GoogLeNet深入學(xué)習(xí)架構(gòu)并進(jìn)行特征歸一化后得到128維特征矢量,接著通過(guò)Triplet Loss三元損失函數(shù)學(xué)習(xí)特征間的可分性,最后通過(guò)閾值實(shí)現(xiàn)人臉識(shí)別。
平臺(tái)硬件結(jié)構(gòu)以PC為上位機(jī),實(shí)現(xiàn)對(duì)人臉的檢測(cè)、識(shí)別和目標(biāo)跟蹤算法;USB攝像頭采集視頻圖像,然后將目標(biāo)人臉的方位發(fā)送給單片機(jī),單片機(jī)根據(jù)目標(biāo)的方位控制舵機(jī)運(yùn)動(dòng)實(shí)現(xiàn)跟蹤,跟蹤結(jié)果通過(guò)HDMI接口在顯示器上實(shí)時(shí)顯示,系統(tǒng)硬件框圖如圖2所示。
圖2 平臺(tái)硬件框圖
單片機(jī)采用STM系列的stm32f103c8t6,它是基于Cortex-M3內(nèi)核的32位控制器,可在2V~3.6V下工作,主頻72MHZ,64KB Flash,16KB RAM。該單片機(jī)共有37個(gè)GPIO口,包括4個(gè)四通道定時(shí)器,10路12位模數(shù)轉(zhuǎn)換器,3路同/異步串口,接口豐富,便于功能擴(kuò)展。系統(tǒng)板還引出有I2C通信的OLED接口、串口1、普通PWM輸出接口、推挽PWM輸出接口和SWD程序下載接口,可方便的滿足實(shí)驗(yàn)平臺(tái)需求。
上位機(jī)軟件采用Python3.5編寫,主要功能為圖形化交互界面、攝像頭圖像采集處理、基于TensorFlow的人臉檢測(cè)識(shí)別、串口通信和讀取系統(tǒng)信息。程序先加載Python依賴包,載入已保存的人臉圖像并初始化參數(shù),載入MTCNN模型和FaceNet模型。然后程序進(jìn)入PyQt5窗口界面主線程,在主線程中創(chuàng)建并開四個(gè)子線程,分別為圖像采集處理子線程,系統(tǒng)參數(shù)獲取更新及串口通信子線程,人臉檢測(cè)及人臉歐氏距離計(jì)算子線程,人臉比對(duì)、目標(biāo)跟蹤及繪制人臉框子線程。所有子線程中的程序都循環(huán)執(zhí)行,并相互傳遞參數(shù)。當(dāng)主線程中斷退出時(shí),關(guān)閉主線程,所有子線程退出循環(huán),并關(guān)閉串口通信和攝像頭視頻流,程序結(jié)束運(yùn)行,上位機(jī)軟件的流程圖。
本文采用CPU+GPU的異構(gòu)計(jì)算實(shí)現(xiàn),即CPU負(fù)責(zé)處理復(fù)雜的邏輯運(yùn)算,人臉檢測(cè)及人臉識(shí)別的卷積神經(jīng)網(wǎng)絡(luò)部分調(diào)用GPU并行運(yùn)算。TensorFlow的GPU并行運(yùn)算需要CUDA和cuDNN的支持,CUDA是英偉達(dá)開發(fā)的用于GPU編程的模型,它提供有用于GPU編寫程序的接口;cuDNN是讓神經(jīng)網(wǎng)絡(luò)使用GPU加速的庫(kù),它們的安裝版本必須相互匹配才可以使用。
由于人臉檢測(cè)識(shí)別涉及大量的矩陣運(yùn)算,耗時(shí)較長(zhǎng),而對(duì)視頻的處理要求有較高的實(shí)時(shí)性,傳統(tǒng)單線程運(yùn)行方式已無(wú)法滿足要求,因此本設(shè)計(jì)采用多線程編程。Python自帶有threading模塊可以很方便地實(shí)現(xiàn)多線程,但因?yàn)槭褂昧薖yQt5設(shè)計(jì)圖形界面,PyQt5圖形界面占用了一個(gè)線程,若使用其他多線程模塊分配新的線程,則難以和圖形界面線程共享數(shù)據(jù),所以使用PyQt5提供的多線程服務(wù)。
五個(gè)線程中,GUI界面占用主線程,負(fù)責(zé)界面各個(gè)控件的刷新;圖像采集子線程負(fù)責(zé)初始化攝像頭和采集攝像頭圖像,圖像裁剪和整形;更新參數(shù)子線程用于獲取設(shè)備信息,并通過(guò)串口發(fā)送目標(biāo)位置;人臉檢測(cè)和歐式距離計(jì)算子線程是耗時(shí)最長(zhǎng)的線程,包括MTCNN人臉檢測(cè)、FaceNet圖片映射為1×128維向量和計(jì)算圖片歐氏距離,檢測(cè)到的人臉越多,耗時(shí)越長(zhǎng),該部分作為子線程,大約每0.3秒輸出一次檢測(cè)識(shí)別的結(jié)果;人臉比對(duì)和目標(biāo)跟蹤子線程用于匹配人臉,對(duì)圖片中的人臉進(jìn)行跟蹤、加框和打標(biāo)簽[5]。
所需實(shí)驗(yàn)儀器包括:計(jì)算機(jī)(包括GPU顯卡)、攝像頭、目標(biāo)人臉跟蹤平臺(tái)。推薦計(jì)算配置為:CPU為i7-6500U,內(nèi)存8Gb,GPU為940MX,2Gb顯存,集成有384個(gè)CUDA核心,算力5.0。
所需軟件:
TensorFlow-GPU 1.9、CUDA 9.0、cuDNN7.0、OpenCV
圖像采集顯示實(shí)驗(yàn)內(nèi)容,平臺(tái)通過(guò)調(diào)用OpenCV函數(shù)cv2.VideoCapture()啟動(dòng)采集圖像和視頻,可獲得USB攝像頭的攝像頭編號(hào),編號(hào)從0開始,有多個(gè)攝像頭則編號(hào)依次增加;讀取視頻文件時(shí)參數(shù)就是視頻文件的路徑。本文為提高系統(tǒng)的實(shí)時(shí)性,攝像頭采集函數(shù)獨(dú)立分配為一個(gè)線程。此實(shí)驗(yàn)可以要求學(xué)生編寫程序?qū)崿F(xiàn)攝像頭圖像采集。
人臉檢測(cè)實(shí)驗(yàn)主要是采用MTCNN人臉檢測(cè)模型實(shí)踐多種情況人臉影像的檢測(cè)。
(1)遮擋對(duì)人臉檢測(cè)的影響
人臉檢測(cè)在實(shí)際應(yīng)用中經(jīng)常會(huì)出現(xiàn)人臉部分遮擋的情況。遮擋的位置和面積都會(huì)影響檢測(cè)結(jié)果,從而可以讓學(xué)生分上、下、左、右四個(gè)方向并按不同遮擋比例,添加遮擋物來(lái)測(cè)試人臉檢測(cè)結(jié)果。例如標(biāo)準(zhǔn)測(cè)試集影像從上、下兩個(gè)方向進(jìn)行遮擋的測(cè)試結(jié)果人臉上方遮擋時(shí),遮擋面積占人臉區(qū)域的25%~33%時(shí),MTCNN算法仍能檢測(cè)出人臉位置。從人臉下方進(jìn)行遮擋時(shí),遮擋面積占人臉區(qū)域的20%~31%時(shí),也可以被檢測(cè)到。左右方向的遮擋也可以做相應(yīng)的測(cè)試,同時(shí)可以引導(dǎo)學(xué)生思考,遮擋比例與人臉檢測(cè)率的關(guān)系,樣可心提高遮擋人臉的檢測(cè)率。
(2)噪聲圖像對(duì)人臉檢測(cè)的影響
實(shí)驗(yàn)可通過(guò)給圖像添加不同比例的椒鹽、高斯等噪聲來(lái)對(duì)比測(cè)試噪聲對(duì)檢測(cè)結(jié)果的影響。例:測(cè)試分辨率為500×500不同密度加椒鹽噪聲的測(cè)試,添加密度為80%的椒鹽噪聲仍然可以檢測(cè)出人臉,可以看出MTCNN算法的抗噪性能較強(qiáng)。也可引導(dǎo)學(xué)生思考當(dāng)圖像分辨率下降時(shí),噪聲密度對(duì)人臉檢測(cè)結(jié)果的影響是否有變化。
人臉注冊(cè)識(shí)別實(shí)驗(yàn)主要是采用FaceNet人臉識(shí)別模型實(shí)踐多種情況人臉識(shí)別結(jié)果。
(1)遮擋對(duì)人臉識(shí)別的影響
人面部遮擋不僅影響人臉檢測(cè)的結(jié)果,對(duì)人臉識(shí)別也有很大的影響。此實(shí)驗(yàn)將MTCNN網(wǎng)絡(luò)檢測(cè)的有遮擋人臉檢測(cè)結(jié)果輸入FaceNet網(wǎng)絡(luò),測(cè)試遮擋對(duì)人臉識(shí)別的影響。分別用上、下、左、右方向的遮擋人臉進(jìn)行測(cè)試,例本文中對(duì)比測(cè)試從上方和下方遮擋類間人臉與類內(nèi)人臉圖像歐氏距離之比的變化。從結(jié)果可以看到,在可以被MTCNN檢測(cè)出人臉的前提下,類內(nèi)人臉的歐式距離始終小于和類間的歐氏距離,但是隨著人臉遮擋面積的增加,差距越來(lái)越小。從上方進(jìn)行遮擋時(shí),遮擋比例超過(guò)人臉高度20%時(shí)差距明顯縮小,而從下方進(jìn)行遮擋時(shí),遮擋比例達(dá)到25%以上時(shí)差距變得較小。
(2)噪聲對(duì)人臉識(shí)別的影響
圖像噪聲也會(huì)對(duì)人臉識(shí)別造成大量干擾。本實(shí)驗(yàn)可通過(guò)MTCNN檢測(cè)出來(lái)的包含有不同噪聲的人臉圖片作為測(cè)試數(shù)據(jù),和無(wú)噪聲的同一人臉圖片和不同人臉圖片進(jìn)行比對(duì),計(jì)算類間人臉與類內(nèi)人臉圖像歐氏距離之比的變化,例本文測(cè)試得的椒鹽圖像部分測(cè)試數(shù)據(jù)。從結(jié)果可以看出,椒鹽噪聲不超過(guò)40%的情況下,F(xiàn)aceNet識(shí)別的結(jié)果都很好,可以很容易區(qū)分出類間人臉和類內(nèi)人臉。隨著噪聲密度的增加,被測(cè)人臉與類間和類內(nèi)圖片的歐氏距離都明顯增加,且差距減小的越來(lái)越快。
人臉跟蹤實(shí)驗(yàn)通過(guò)啟用OpenCV跟蹤器實(shí)現(xiàn)對(duì)識(shí)別的目標(biāo)人臉在視頻相鄰幀間的跟蹤,同時(shí)通過(guò)單片機(jī)控制板反饋控制調(diào)整攝像頭角度。OpenCV提供有八種目標(biāo)跟蹤器[5],分別為Boosting Tracker、MIL Tracker、KCF Tracker、CSRT Tracker、MedianFlow Tracker、TLD Tracker、MOSSE Tracker和GOTURN Tracker??紤]到跟蹤速度,最終選用MedianFlow Tracker或者M(jìn)OSSE Tracker作為目標(biāo)跟蹤器。系統(tǒng)每完成一次檢測(cè)識(shí)別就會(huì)更新跟蹤目標(biāo),可防止出現(xiàn)目標(biāo)跟丟的情況。
目標(biāo)人臉跟蹤平臺(tái)總體跟蹤測(cè)試時(shí),目標(biāo)人臉處于不同的方位時(shí),攝像頭會(huì)隨著人臉位置變化調(diào)整角度,使得人臉處于圖像的中心附近。測(cè)試發(fā)現(xiàn)目標(biāo)人臉跟蹤速度達(dá)到24FPS,CPU溫度為85度。GPU占用率約為72%,內(nèi)存占用2Gb。舵機(jī)的控制速度和檢測(cè)識(shí)別的結(jié)果有關(guān),若無(wú)法檢測(cè)到目標(biāo),舵機(jī)恢復(fù)為初始角度。
本文所述基于目標(biāo)人臉跟蹤平臺(tái)的計(jì)算機(jī)視覺(jué)實(shí)驗(yàn)項(xiàng)目,通過(guò)將深度學(xué)習(xí)等最新技術(shù)結(jié)合到計(jì)算機(jī)視覺(jué)實(shí)驗(yàn)中,實(shí)現(xiàn)了包含圖像采集顯示、人臉檢測(cè)、人臉識(shí)別、人臉跟蹤控制等實(shí)驗(yàn)內(nèi)容的綜合實(shí)驗(yàn)平臺(tái)。與普通計(jì)算機(jī)視覺(jué)實(shí)驗(yàn)相比,傳統(tǒng)實(shí)驗(yàn)往往是針對(duì)相一個(gè)點(diǎn)的獨(dú)立實(shí)驗(yàn)內(nèi)容,學(xué)生難以將各知識(shí)串聯(lián)起來(lái)在腦海中形成一個(gè)復(fù)雜整體實(shí)際應(yīng)用場(chǎng)景;而本實(shí)驗(yàn)設(shè)計(jì)結(jié)合前沿技術(shù),使學(xué)生能結(jié)合具體事例將多知識(shí)點(diǎn)聯(lián)系起來(lái)形成整體,使學(xué)生深刻理解目標(biāo)檢測(cè)、目標(biāo)識(shí)別、目標(biāo)跟蹤的技術(shù)原理,快速掌握具體的操作及處理方法,有利于激發(fā)他們的實(shí)驗(yàn)熱情、培養(yǎng)學(xué)生解決復(fù)雜工種問(wèn)題的探索、創(chuàng)新能力。