陳 亮,鄭 偉
(1. 北京交通大學(xué)電子信息工程學(xué)院,北京 100044;2. 北京交通大學(xué)國家軌道交通安全評估研究中心,北京 100044;3. 北京交通大學(xué)軌道交通安全協(xié)同創(chuàng)新中心,北京 100044)
近年,機器學(xué)習(xí)和深度學(xué)習(xí)正日漸成為人工智能領(lǐng)域的研究熱點和主流發(fā)展方向,得益于此,計算機視覺技術(shù)取得了巨大進展,廣泛應(yīng)用于生產(chǎn)生活的各個場景,利用計算機視覺技術(shù)檢測人體疲勞就是其中重要應(yīng)用。
檢測人體疲勞可采用公認較為準(zhǔn)確的方法之一:PERCLOS P80[1]。PERCLOS指的是眼睛閉合時間占某一特定時間的百分率,它可以實現(xiàn)非接觸式檢測,對被監(jiān)測人員不產(chǎn)生影響,通常采用在單位時間(1min)內(nèi)測量眼睛閉合程度超過80%的時間所占的比例(用P80表示)。因此,應(yīng)用PERCLOS P80方法時,需要對人臉部,尤其是眼部的關(guān)鍵點進行準(zhǔn)確而快速的定位[2,3]。因此,如何準(zhǔn)確、實時、低運算成本地檢測人眼關(guān)鍵點,是疲勞檢測的基礎(chǔ)之一。
在實際生產(chǎn)工作中,疲勞檢測系統(tǒng)往往需要運行在功耗、計算能力有限的小型系統(tǒng)中,對人眼關(guān)鍵點檢測算法要求更高效、更輕量化。目前常用的檢測算法主要有:單階段(Single-stage)目標(biāo)檢測算法,以YOLO算法[4]和SSD算法[5]為代表,將圖像分成多個小區(qū)域,通過引入特征圖金字塔(FPN,Feature Pyramid Networks)的方式,在不同尺寸的特征圖上面設(shè)置規(guī)格不同的錨點框,從而完成各種尺寸目標(biāo)的檢測任務(wù),單階段算法的特點是直接完成從特征到分類、回歸的預(yù)測,檢測速度非常快,也正是因為從同一全連接層或卷積層實現(xiàn)目標(biāo)檢測,其網(wǎng)絡(luò)精度方面相較于兩階段算法稍低一些;兩階段(Two-stage)目標(biāo)檢測算法,以R-CNN系列算法為代表,先提取檢測物體的區(qū)域,再對物體的區(qū)域進行分類和回歸,兩階段算法精度高但網(wǎng)絡(luò)推理時由于分為兩個階段進行,因此推理速度較慢。
Retina-Face模型是專門為檢測人臉而設(shè)計的單階段多任務(wù)(Single-Stage Multitask)深度學(xué)習(xí)模型,其特點是輕量化、速度快、準(zhǔn)確性較高[6],對各層級、多尺寸特征圖信息利用較好。本文基于Retina-Face算法,設(shè)計了一種對眼部關(guān)鍵點進行回歸的檢測算法,采用輕量化主干網(wǎng)絡(luò)提取特征,在保證算法精度的前提下,網(wǎng)絡(luò)體量較小、推理速度較快,適合在低算力小型計算機上完成人眼關(guān)鍵點檢測任務(wù)。
Retina-Face[7]是Insight Face在2019年提出的人臉檢測模型,其網(wǎng)絡(luò)模型特點包括:單階段目標(biāo)檢測、采用特征圖金字塔[8,9]、上下文特征模塊(SSH,Single Stage Headless Face Detector)[10]、多任務(wù)[11]、錨點框機制[12](Anchors)以及采用輕量級主干網(wǎng)絡(luò)等等。
圖1 Retina-Face網(wǎng)絡(luò)結(jié)構(gòu)圖[4]
Retina-Face為了解決多尺寸人臉檢測問題引入了FPN結(jié)構(gòu)、SSH特征模塊、錨點機制,在不增加網(wǎng)絡(luò)運算參數(shù)前提下,提高了小尺寸人臉的檢測能力。
Retina-Face采用多任務(wù)損失函數(shù),包括:人臉分類、人臉框回歸、人臉關(guān)鍵點回歸、人臉密集點回歸等4個損失函數(shù),如式(1)所示。
(1)
圖2 人臉5個關(guān)鍵點[4]
1)臉部關(guān)鍵點設(shè)計
Retina-Face原網(wǎng)絡(luò)的人臉關(guān)鍵點是5個,分別是左右雙眼、左右嘴角,以及鼻尖,因此需要重新設(shè)計臉部關(guān)鍵點。
通用的人臉關(guān)鍵點檢測有包含Retina-Face的5個關(guān)鍵點,還有如OpenCVDlib庫中的68個關(guān)鍵點[13]、WFLW[14]標(biāo)注98個關(guān)鍵點的數(shù)據(jù)集等,如圖3所示。在計算PERCLOS P80數(shù)據(jù)時,需要用到的是眼部關(guān)鍵點數(shù)據(jù),因此為了盡可能減少計算資源消耗,采用雙眼周圍的12個關(guān)鍵點。人臉關(guān)鍵點及眼部關(guān)鍵點示意圖如圖3所示。
圖3 人臉關(guān)鍵點及眼部關(guān)鍵點示意圖
2)損失函數(shù)設(shè)計
針對人眼關(guān)鍵點檢測,由于不需要對人臉密集點回歸,并且密集點回歸的計算量相對較大,因此損失函數(shù)中移除密集點回歸損失函數(shù)。
3)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計
在原Retina-Face設(shè)計中,FPN特征圖金字塔結(jié)構(gòu)是為了可以對小尺寸人臉有更好地檢測效果。但是通常情況下,工作場景中的疲勞檢測,例如:在司機駕駛、調(diào)度員指揮、值班員盯控站場計劃等場景中,采集圖像中的人臉面積在原圖中所占比例適中,因此,可以去除掉Retina-Face模型原有特征金字塔網(wǎng)絡(luò)的P2和P6層結(jié)構(gòu),有針對性地保證中尺寸人臉檢測結(jié)果的同時,減少不必要的網(wǎng)絡(luò)推理計算過程。
簡化后的特征金字塔網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 重新設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)
4)圖像數(shù)據(jù)Gabor預(yù)處理設(shè)計
在實際疲勞檢測場景下,臉部易受復(fù)雜光照環(huán)境影響,從而影響算法檢測效果。在傳統(tǒng)圖像數(shù)據(jù)處理方法中,Gabor濾波器在頻域不同尺度、不同方向上提取相關(guān)的特征,經(jīng)常用作紋理識別上,并取得了較好的效果,在一定程度可以突出眼部特征[15],另一方面,Gabor濾波器處理數(shù)據(jù)量少、速度快,因此本文采用Gabor濾波器對數(shù)據(jù)進行預(yù)處理,以達到提高算法準(zhǔn)確率的目的。
優(yōu)化后的人臉關(guān)鍵點損失函數(shù)包含人臉分類、人臉框位置回歸以及人臉關(guān)鍵點回歸損失函數(shù)
(2)
在傳統(tǒng)機器學(xué)習(xí)框架中,一個神經(jīng)網(wǎng)絡(luò)進行特定任務(wù)的訓(xùn)練時,需要充分的訓(xùn)練數(shù)據(jù),獲取足夠的數(shù)據(jù)并對其標(biāo)注也是一個相對耗時的過程。遷移學(xué)習(xí)在計算機視覺領(lǐng)域中是一種通用的方法,因為它不僅可以建立完成具體任務(wù)的精確模型,其訓(xùn)練耗時更短[16,17]。利用遷移學(xué)習(xí),可以不用從零開始訓(xùn)練網(wǎng)絡(luò)模型,而是從之前解決各種問題時學(xué)習(xí)到的模式開始,因為數(shù)據(jù)雖然不同,但是圖像特征是通用的。
Retina-Face包含三個任務(wù):人臉分類、人臉框檢測、人臉關(guān)鍵點檢測,當(dāng)使用預(yù)訓(xùn)練網(wǎng)絡(luò)權(quán)重文件進行預(yù)測時,對于人臉分類、人臉框檢測無需再次進行訓(xùn)練,本文通過對前兩者相關(guān)權(quán)重進行凍結(jié),對眼部關(guān)鍵點檢測權(quán)重進行單獨訓(xùn)練,不僅可以大幅提高訓(xùn)練效率,由于預(yù)訓(xùn)練權(quán)重對人臉檢測效果較好,還可以對關(guān)鍵點檢測的準(zhǔn)確性起到積極作用。
1)采用MobileNet V1作為骨干網(wǎng)絡(luò)
輕量化的卷積神經(jīng)網(wǎng)絡(luò)的研究目的和意義在于,參數(shù)計算較小的模型,其檢測準(zhǔn)確率仍保持較高水平。MobileNet V1作為輕量化網(wǎng)絡(luò)的經(jīng)典模型[18],其使用了深度可分離卷積(Depth-wise Separable Convolutions)來代替?zhèn)鹘y(tǒng)的卷積,在訓(xùn)練時參數(shù)的計算量和計算時間都得到很大程度的降低,較為適用于計算資源有限設(shè)備的深度學(xué)習(xí)網(wǎng)絡(luò)[19]。
對原圖的Gabor預(yù)處理過程為,分別提取三個方向的特征圖[20]:0°、45°、90°,在每個方向上得到一張?zhí)卣鲌D,并以每張?zhí)卣鲌D為一個通道合成新圖片,最后進行灰度化處理。如圖5所示。
圖5 Gabor特征圖
人眼的Gabor特征與原圖有一定的相似性,Gabor濾波器能夠保留圖像紋理變化特征的同時,用來提取圖像的邊緣信息,突出了眼部特征,降低了特征冗余。通過對圖像數(shù)據(jù)進行Gabor預(yù)處理,進一步保證了模型對眼部特征點回歸的準(zhǔn)確率。
本文算法實驗環(huán)境是:操作系統(tǒng)windows10,CPU為:IntelXeon 6230,內(nèi)存32G,顯卡型號為NVIDIA Geforce GTX 2080Ti,顯存11G。編程環(huán)境和深度學(xué)習(xí)框架分別是python3.6和Pytorch。
目前,常用的人臉檢測質(zhì)量評估的公開數(shù)據(jù)集有:Wider-Face[21]、300W、300VW、WFLW等數(shù)據(jù)集,由于公開數(shù)據(jù)集中包含許多不清晰的人臉圖片,且多為睜眼圖片,與應(yīng)用PERCLOS方法檢測疲勞的實際使用場景較為不同,因此本文除在公開數(shù)據(jù)集中選取大小適中、清晰的人臉圖片以外,還采集戴眼鏡、不戴眼鏡、正面、側(cè)面和光照不均勻等多種情況,的數(shù)據(jù),并從Eyelink8[22](眨眼數(shù)據(jù)集)中眨眼圖片進行標(biāo)注,共計10000張圖片,共同作為本文的數(shù)據(jù)集。
采用帶動量的隨機梯度下降法(stochastic gradientdes-cent,SGD)優(yōu)化器進行訓(xùn)練,動量大小采取經(jīng)驗數(shù)值0.9,采用交叉驗證方法,訓(xùn)練集與驗證集比例為8∶2。
訓(xùn)練時,設(shè)置真實人臉框和錨框的交并比(IoU,Intersection over Union)的正例樣本閾值為0.5(經(jīng)驗值)、負例樣本閾值為0.3,但此時絕大部分樣本會被認為是負樣本,造成樣本不均衡,為了避免該問題,正負例樣本數(shù)量的比例控制為3:1。
數(shù)據(jù)增強可以有效提升模型魯棒性[23],本文按照隨機選擇0.3、0.45、0.6、0.8、1.0尺寸對原圖進行剪裁,并將圖像縮放到640×640,并以0.5概率進行隨機鏡像和顏色擾動,以達到增加更多人臉數(shù)據(jù),提高模型表現(xiàn)能力的目的。
在公共數(shù)據(jù)集、自制數(shù)據(jù)集上劃分的測試集進行測試,通過歸一化平均誤差(NME,Normalized Mean Error)進行對比。NME是人臉關(guān)鍵點檢測常用的評價指標(biāo)
x代表關(guān)鍵點真實位置,y代表網(wǎng)絡(luò)預(yù)測值,d代表兩個外部眼角的歐式距離。NME越小,代表模型預(yù)測的結(jié)果越好。
表1 與其算法在300W數(shù)據(jù)集的NME對比
表2 不同算法的模型大小和自制數(shù)據(jù)集預(yù)測速度
表3 在自制數(shù)據(jù)集上不同睜眼程度NME對比
本文通過修改網(wǎng)絡(luò)結(jié)構(gòu)、增加傳統(tǒng)圖像處理方法,提出了一種基于Retina-Face模型的人眼關(guān)鍵點檢測算法,在300W數(shù)據(jù)集和自采數(shù)據(jù)上,推理的速度是100ms、NME是3.58,同時,采用Gabor預(yù)處理方法相較于未采用Gabor語出方法,NME提高0.15%;在自制數(shù)據(jù)集的不同睜眼程度的推理方面,NME分別是3.20/3.25/3.21,模型參數(shù)量僅有1.8M。在保證時效性和關(guān)鍵點檢測準(zhǔn)確率的同時,進一步減少了模型參數(shù)量,為基于計算機視覺的實時疲勞檢測打下了基礎(chǔ)。在下一步研究中,可以對數(shù)據(jù)集進一步擴充,采集覆蓋多個年齡段人群的人臉數(shù)據(jù),提升算法的魯棒性和準(zhǔn)確性。