彭智勇 黃揚翔 梁紅珍
(1.桂林電子科技大學 光電工程學院 廣西桂林 541004;2.桂林生命與健康職業技術學院 廣西桂林 541001)
計算機視覺是一門課程內容與時俱進的重要計算機專業課程[1]。人臉識別跟蹤廣泛應用于目標人物跟蹤、自動駕駛技術,無人機搜索救援,人臉跟蹤拍照等很多的新興技術中,是計算機視覺領域的經典課題。本課題綜合深度學習、圖像處理、模式識別、GPU加速、自動控制、機械裝置設計等技術,設計了人臉識別智能跟蹤綜合實驗平臺,平臺可根據人臉識別定位結果控制機械系統,完成對目標人臉的跟蹤和鑒定。通過實驗平臺的設計可以加深學生對知識的理解、培養學生對復雜工程問題的探索、創新能力。
人臉識別跟蹤實驗平臺在技術上包含有人臉檢測、識別、目標跟蹤的上位機系統和控制功能的單片機系統與機械傳動裝置。其中人臉檢測是查找圖像中人臉的位置;人臉識別是將待匹配的人臉圖像與存儲的人臉圖像進行對比,判斷是否為同一個人;目標跟蹤則通過跟蹤器對檢測到的人臉所在區域進行快速跟蹤,提升運行效率[2];單片機控制系統則通過控制算法實現過轉角電機的控制,從而調整相機角度,使目標人臉始終處理圖像中心;機械傳動裝置則是由步進電機構成的執行機構。
平臺程序基于TensorFlow[3]實現。算法通過多任務級聯卷積神經網絡(MTCNN)檢測人臉;基于通用人臉識別網絡FaceNet求解人面部圖像在歐氏空間的距離識別人臉;識別好的目標人臉作為跟蹤目標,利用跟蹤器[4]進行跟蹤,每完成一次檢測識別,更新一次跟蹤目標,可防止跟蹤目標的丟失;程序分為多個線程運行,對人臉檢測、識別的同時,跟蹤人臉所在區域,既保持流暢的采集顯示,又可以對人臉位置逐幀更新。平臺算法框圖如圖1所示。

圖1 平臺算法框圖
人臉檢測采用MTCNN算法實現,MTCNN由P-Net、R-Net和O-Net三個網絡級聯構成。P-Net先獲取回歸向量以及人面部候選窗,通過回歸的結果調整候選窗,并將有較高重疊度的候選窗通過NMS(非極大值抑制)合并。R-Net篩選候選窗的方法類似P-Net,不同的是比P-Net多了一個全連接層,以更好地抑制冗余窗。O-Net比R-Net層又多一層卷基,因此處理的結果會更加準確,作用和R-Net一樣,該層對人的面部所在區域有更多的監督,同時輸出5個關鍵點坐標。
人臉識別通過通用FaceNet算法實現。FaceNet網絡使用的是谷歌研發的深度網絡結構GoogLeNet。FaceNet學習的是如何將圖像映射到歐氏空間,圖片在歐式空間上特征的距離越小,則越相似。輸入為由MTCNN檢測出并尺度歸一后的人臉圖圖像,圖像經過GoogLeNet深入學習架構并進行特征歸一化后得到128維特征矢量,接著通過Triplet Loss三元損失函數學習特征間的可分性,最后通過閾值實現人臉識別。
平臺硬件結構以PC為上位機,實現對人臉的檢測、識別和目標跟蹤算法;USB攝像頭采集視頻圖像,然后將目標人臉的方位發送給單片機,單片機根據目標的方位控制舵機運動實現跟蹤,跟蹤結果通過HDMI接口在顯示器上實時顯示,系統硬件框圖如圖2所示。

圖2 平臺硬件框圖
單片機采用STM系列的stm32f103c8t6,它是基于Cortex-M3內核的32位控制器,可在2V~3.6V下工作,主頻72MHZ,64KB Flash,16KB RAM。該單片機共有37個GPIO口,包括4個四通道定時器,10路12位模數轉換器,3路同/異步串口,接口豐富,便于功能擴展。系統板還引出有I2C通信的OLED接口、串口1、普通PWM輸出接口、推挽PWM輸出接口和SWD程序下載接口,可方便的滿足實驗平臺需求。
上位機軟件采用Python3.5編寫,主要功能為圖形化交互界面、攝像頭圖像采集處理、基于TensorFlow的人臉檢測識別、串口通信和讀取系統信息。程序先加載Python依賴包,載入已保存的人臉圖像并初始化參數,載入MTCNN模型和FaceNet模型。然后程序進入PyQt5窗口界面主線程,在主線程中創建并開四個子線程,分別為圖像采集處理子線程,系統參數獲取更新及串口通信子線程,人臉檢測及人臉歐氏距離計算子線程,人臉比對、目標跟蹤及繪制人臉框子線程。所有子線程中的程序都循環執行,并相互傳遞參數。當主線程中斷退出時,關閉主線程,所有子線程退出循環,并關閉串口通信和攝像頭視頻流,程序結束運行,上位機軟件的流程圖。
本文采用CPU+GPU的異構計算實現,即CPU負責處理復雜的邏輯運算,人臉檢測及人臉識別的卷積神經網絡部分調用GPU并行運算。TensorFlow的GPU并行運算需要CUDA和cuDNN的支持,CUDA是英偉達開發的用于GPU編程的模型,它提供有用于GPU編寫程序的接口;cuDNN是讓神經網絡使用GPU加速的庫,它們的安裝版本必須相互匹配才可以使用。
由于人臉檢測識別涉及大量的矩陣運算,耗時較長,而對視頻的處理要求有較高的實時性,傳統單線程運行方式已無法滿足要求,因此本設計采用多線程編程。Python自帶有threading模塊可以很方便地實現多線程,但因為使用了PyQt5設計圖形界面,PyQt5圖形界面占用了一個線程,若使用其他多線程模塊分配新的線程,則難以和圖形界面線程共享數據,所以使用PyQt5提供的多線程服務。
五個線程中,GUI界面占用主線程,負責界面各個控件的刷新;圖像采集子線程負責初始化攝像頭和采集攝像頭圖像,圖像裁剪和整形;更新參數子線程用于獲取設備信息,并通過串口發送目標位置;人臉檢測和歐式距離計算子線程是耗時最長的線程,包括MTCNN人臉檢測、FaceNet圖片映射為1×128維向量和計算圖片歐氏距離,檢測到的人臉越多,耗時越長,該部分作為子線程,大約每0.3秒輸出一次檢測識別的結果;人臉比對和目標跟蹤子線程用于匹配人臉,對圖片中的人臉進行跟蹤、加框和打標簽[5]。
所需實驗儀器包括:計算機(包括GPU顯卡)、攝像頭、目標人臉跟蹤平臺。推薦計算配置為:CPU為i7-6500U,內存8Gb,GPU為940MX,2Gb顯存,集成有384個CUDA核心,算力5.0。
所需軟件:
TensorFlow-GPU 1.9、CUDA 9.0、cuDNN7.0、OpenCV
圖像采集顯示實驗內容,平臺通過調用OpenCV函數cv2.VideoCapture()啟動采集圖像和視頻,可獲得USB攝像頭的攝像頭編號,編號從0開始,有多個攝像頭則編號依次增加;讀取視頻文件時參數就是視頻文件的路徑。本文為提高系統的實時性,攝像頭采集函數獨立分配為一個線程。此實驗可以要求學生編寫程序實現攝像頭圖像采集。
人臉檢測實驗主要是采用MTCNN人臉檢測模型實踐多種情況人臉影像的檢測。
(1)遮擋對人臉檢測的影響
人臉檢測在實際應用中經常會出現人臉部分遮擋的情況。遮擋的位置和面積都會影響檢測結果,從而可以讓學生分上、下、左、右四個方向并按不同遮擋比例,添加遮擋物來測試人臉檢測結果。例如標準測試集影像從上、下兩個方向進行遮擋的測試結果人臉上方遮擋時,遮擋面積占人臉區域的25%~33%時,MTCNN算法仍能檢測出人臉位置。從人臉下方進行遮擋時,遮擋面積占人臉區域的20%~31%時,也可以被檢測到。左右方向的遮擋也可以做相應的測試,同時可以引導學生思考,遮擋比例與人臉檢測率的關系,樣可心提高遮擋人臉的檢測率。
(2)噪聲圖像對人臉檢測的影響
實驗可通過給圖像添加不同比例的椒鹽、高斯等噪聲來對比測試噪聲對檢測結果的影響。例:測試分辨率為500×500不同密度加椒鹽噪聲的測試,添加密度為80%的椒鹽噪聲仍然可以檢測出人臉,可以看出MTCNN算法的抗噪性能較強。也可引導學生思考當圖像分辨率下降時,噪聲密度對人臉檢測結果的影響是否有變化。
人臉注冊識別實驗主要是采用FaceNet人臉識別模型實踐多種情況人臉識別結果。
(1)遮擋對人臉識別的影響
人面部遮擋不僅影響人臉檢測的結果,對人臉識別也有很大的影響。此實驗將MTCNN網絡檢測的有遮擋人臉檢測結果輸入FaceNet網絡,測試遮擋對人臉識別的影響。分別用上、下、左、右方向的遮擋人臉進行測試,例本文中對比測試從上方和下方遮擋類間人臉與類內人臉圖像歐氏距離之比的變化。從結果可以看到,在可以被MTCNN檢測出人臉的前提下,類內人臉的歐式距離始終小于和類間的歐氏距離,但是隨著人臉遮擋面積的增加,差距越來越小。從上方進行遮擋時,遮擋比例超過人臉高度20%時差距明顯縮小,而從下方進行遮擋時,遮擋比例達到25%以上時差距變得較小。
(2)噪聲對人臉識別的影響
圖像噪聲也會對人臉識別造成大量干擾。本實驗可通過MTCNN檢測出來的包含有不同噪聲的人臉圖片作為測試數據,和無噪聲的同一人臉圖片和不同人臉圖片進行比對,計算類間人臉與類內人臉圖像歐氏距離之比的變化,例本文測試得的椒鹽圖像部分測試數據。從結果可以看出,椒鹽噪聲不超過40%的情況下,FaceNet識別的結果都很好,可以很容易區分出類間人臉和類內人臉。隨著噪聲密度的增加,被測人臉與類間和類內圖片的歐氏距離都明顯增加,且差距減小的越來越快。
人臉跟蹤實驗通過啟用OpenCV跟蹤器實現對識別的目標人臉在視頻相鄰幀間的跟蹤,同時通過單片機控制板反饋控制調整攝像頭角度。OpenCV提供有八種目標跟蹤器[5],分別為Boosting Tracker、MIL Tracker、KCF Tracker、CSRT Tracker、MedianFlow Tracker、TLD Tracker、MOSSE Tracker和GOTURN Tracker。考慮到跟蹤速度,最終選用MedianFlow Tracker或者MOSSE Tracker作為目標跟蹤器。系統每完成一次檢測識別就會更新跟蹤目標,可防止出現目標跟丟的情況。
目標人臉跟蹤平臺總體跟蹤測試時,目標人臉處于不同的方位時,攝像頭會隨著人臉位置變化調整角度,使得人臉處于圖像的中心附近。測試發現目標人臉跟蹤速度達到24FPS,CPU溫度為85度。GPU占用率約為72%,內存占用2Gb。舵機的控制速度和檢測識別的結果有關,若無法檢測到目標,舵機恢復為初始角度。
本文所述基于目標人臉跟蹤平臺的計算機視覺實驗項目,通過將深度學習等最新技術結合到計算機視覺實驗中,實現了包含圖像采集顯示、人臉檢測、人臉識別、人臉跟蹤控制等實驗內容的綜合實驗平臺。與普通計算機視覺實驗相比,傳統實驗往往是針對相一個點的獨立實驗內容,學生難以將各知識串聯起來在腦海中形成一個復雜整體實際應用場景;而本實驗設計結合前沿技術,使學生能結合具體事例將多知識點聯系起來形成整體,使學生深刻理解目標檢測、目標識別、目標跟蹤的技術原理,快速掌握具體的操作及處理方法,有利于激發他們的實驗熱情、培養學生解決復雜工種問題的探索、創新能力。