劉覓涵,代歡歡
(四川大學計算機學院,成都610065)
隨著我國汽車保有量以及機動車駕駛人數的不斷上升,交通事故的死亡人數也在直線上升,僅2017 年由于交通事故所導致的死亡人數就有63772 人,直接造成經濟損失121311.3 萬元[1]。道路交通事故的影響因素可以歸納為人為因素、車輛因素以及其他因素,人為因素中駕駛員的分心駕駛占有很大的比例,例如在駕駛過程中查看手機、低頭撿拾物品、觀看路邊建筑等,都會導致駕駛員的視線離開道路,最終釀成不可挽回的后果。因此,實時監測駕駛員的注意力很有必要。
近些年,有許多學者對于駕駛員注意力分析進行了研究。例如,文獻[2]通過提取駕駛員臉部特征以及頭部姿態,將這些信息送入一個隨機森林分類器進行分類后得到駕駛員的注視區域,但是這種方法的泛化能力不強,在跨個體上面的表現較差。文獻[3]和文獻[4]使用RGBD 相機通過圖像信息結合深度信息的方式得到駕駛員的姿態等相關信息進而分析駕駛員的注意力,但是深度相機價格一般比較高昂不如普通相機普遍,并且深度相機的數據量更大,耗電量更高,在汽車這種移動設備上面的實用性不高。
基于上述問題,本文提出一種基于普通RGB 相機的駕駛員注意力分析的方法,不依賴特定的駕駛員的駕駛數據集進行訓練且不需要深度相機如此高昂的設備,通過放置與駕駛員正前方的一個普通RGB 相機得到駕駛員的注視區域,進而分析駕駛員的注意力。
本文提出的方法基于一個已標定的RGB 相機,首先通過相機獲取駕駛員的人臉位置以及人臉關鍵點信息,結合一個平均的3D 人臉模型[5],通過求解PNP(Perspective-N-Point)問題[6]得出駕駛員頭部的姿態信息,借助得到的姿態信息將駕駛員雙眼中心的法線投影到駕駛室的前方,以獲取駕駛員的注視的區域。進而分析駕駛員的注意力。攝像機的放置位置如圖1 所示,平均3D 人臉模型如圖2 所示,算法的流程圖如圖3 所示。

圖1 相機安放位置

圖2 平均3D人臉模型

圖3 方法流程
頭部姿態的估計有很多種方法:按照輸入可分為基于RGB 圖像的和基于深度圖像的方法,其中基于RGB 圖像的方法又可以分為基于人臉關鍵點的和不基于人臉關鍵點的。
基于深度信息的方法,如文獻[7],通過RGB 圖像結合深度信息得出最后的頭部姿態。深度相機的優點是能夠獲得極高的精度,但是深度相機相對于普通的RGB 相機來說功耗更高,在汽車這種移動設備上會存在耗能問題,并且不如RGB 相機普及,其次深度相機的數據傳輸量更大使得傳輸時延更長。這些局限性使得深度相機在駕駛員狀態監控這種情景下并不實用。
在基于圖像的方法中,由于近些年來神經網絡,特別是卷積神經網絡[8]在圖像領域的大放異彩,也有很多研究人員[9-10]嘗試使用神經網絡回歸頭部的姿態角度,這種方法的優點是在擁有足夠的數據集的情況下,能夠有較高的精度,但是標注高精度的頭部姿態訓練數據集耗時耗力,現有的高精度的頭部姿態數據集極少。并且,這些方法所得到的頭部姿態無法得知頭部的三維位置信息,而在這里卻恰恰是我們需要的。
基于RGB 圖像獲取頭部姿態的另一種方法是基于關鍵點的頭部姿態估計,這種方法通過人臉關鍵點檢測所得到的人臉關鍵點集合,配合上3D 的人臉模型的關鍵點集合,通過求解PNP 問題得出頭部的姿態信息,其中人臉關鍵點檢測已經是計算機視覺領域研究得十分深入的一個方向,有足夠的高精度的人臉關鍵點訓練數據集,足以保證較高的泛化能力。
基于關鍵點的頭部姿態估計過程如下:
(1)人臉檢測
本文采用基于人臉關鍵點的頭部姿態估計方法,首先需要從輸入的圖像中獲得準確的人臉位置,本文采用了S3FD(Single Shot Scale-invariant Face Detector)[11]作為人臉檢測器。相較于常用的通過SVM(Support Vector Machine)以及HOG(Histogram of Oriented Gradients)特征進行人臉檢測的方法[12]擁有更低的誤檢率。而誤檢率對于我們這個項目來說是很重要的指標。使用S3FD 預測的人臉邊界框結果如圖4 所示。

圖4 人臉檢測結果
(2)人臉關鍵點檢測
人臉關鍵點檢測又稱人臉對齊,在安防、駕駛員狀態分析、娛樂等領域有著廣泛的應用。最早期的人臉特征點檢測方法主要是通過人臉紋理模型以及PCA 統計方法檢測人臉特征點的位置,例如主動形狀模型(Active Shape Model,ASM)[12]和主動表觀模型(Active Appearance Model,AAM)[13]。隨著深度學習的在計算機視覺領域的發展,也有越來越多的學者提出基于卷積神經網絡的人臉特征點檢測算法[14-15],并取得了較好的成果。
如圖5 所示,本文使用FAN(Face Alignment Network)[16]作為人臉關鍵點檢測的方法,它采用圖6 所示的沙漏網絡層(Hourglass Block)[17]作為基本單元,沙漏網絡層與傳統的卷積神經網絡層在結構上不同。傳統的卷積神經網絡通常多采取一種“自下而上”(由高分辨率到低分辨率)的結構,而沙漏網絡則采用了一種對稱的結構,既有“自下而上”又有“自上而下”(由低分辨率到高分辨率)的方法,使得網絡在提取局部特征的同時也能考慮到各個特征之間的空間結構相關性,其次傳統神經網絡回歸的關鍵點的二維坐標信息是采用直接回歸坐標值的方式,而FAN 對于每一個關鍵點預測一張熱力圖(heat map),熱力圖是一張和原始圖片形狀大小相同或者等比例的灰度圖,它的最大值點所在的位置代表了圖像的關鍵點所在的位置。

圖5 FAN 網絡結構

圖6 沙漏網絡層結構
沙漏網絡首先通過多組卷積層和池化層對輸入的特征圖進行降采樣,然后通過多組上采樣層和卷積層將特征圖再次上采樣到原始特征圖的分辨率。由于池化層會丟失一些圖像中的細節,在沙漏網絡中添加了跳層(skip layer)將丟失的細節帶回到上采樣后的特征圖里面去。這樣當多個沙漏網絡重疊在一起的時候,這些網絡可以反復地處理這些特征圖以獲取更高層次的信息。這種基礎的網絡模型原本是用于人體姿態檢測(人體關鍵點檢測),在人臉關鍵點檢測方面也有不俗的表現。
本文采用Multi-PIE[18]的68 個關鍵點的規范來標記人臉關鍵點,其人臉關鍵點的分布如圖7 所示,通過上述方法的人臉關鍵點檢測結果如圖8 所示。

圖7 人臉關鍵點分布

圖8 關鍵點檢測結果
(3)基于PNP 算法的頭部姿態估計
在獲取了人臉的二維坐標點之后,需要結合人臉三位坐標點的信息求解頭部的姿態。本文所采用如圖9 所示的針孔相機成像模型,其中點P(X,Y,Z)為三維世界中的點,p(u,v)為成像平面的點,它們之間的對應關系由式4 所示,式中:R 和t 分別為旋轉矩陣和平移向量,它們與相機的位姿有關,矩陣M 是相機的內參矩陣,可以通過對相機進行標定得出,s 是縮放因子。PNP 問題就是在已知一組互相對應的三維世界中的P的點和成像平面上的對應的二維坐標點p 求解出式(3)中的R 和t。


圖9 針孔相機成像模型
求解PNP 問題已經有很多的經典解法,例如迭代法、P3P、EPNP、DLS 等,本文采用迭代法求解,其主要思想是:通過直接線性變換(Direct Linear Transformation,DLT)求得一組初始的R 和t,再通過萊文貝格-馬夸特方法(Levenberg-Marquardt algorithm)對重投影的誤差進行優化以得到最小化的數值解。
在本文中,三維世界中的點集為圖2 所示的平均三維人臉坐標點,成像平面上的點集為通過人臉關鍵點檢測所得到的二維坐標點集。根據上述方法最終預測到的頭部姿態如圖10 所示。

圖10 頭部姿態估計結果
本文對于駕駛員的注意力分析是通過對駕駛員的注視區域進行分類,以確保駕駛員的視線保持在與駕駛相關的區域上面。
在獲取到了駕駛員的頭部姿態(R,t)之后,本文采用如圖11 所示的射線投影的方法來估計注視區域。以駕駛員的雙眼中心為起點向駕駛艙前部發出射線,求出與求出射線與駕駛艙前部的交點,以交點所在的位置作為駕駛員的注視位置。在圖11 中,駕駛員頭部的局部坐標系為OmXmYmZm,相機坐標系為OcXcYcZc。以(Om,nm)向量的方向發射一條射線與XcOcYc平面相交與點I(xi,yi),點I 就是我們要求的注視點。

圖11 注視區域估計方式
由于此時的(Om,nm)向量是在頭部局部坐標系下表出的,而XcOcYc平面處在相機坐標系下,無法進行計算。此時需要進行坐標轉換,將(Om,nm)向量轉換到相機坐標系下。
當駕駛員頭部偏移時,我們可以通過頭部姿態估計得到相應的旋轉矩陣R,以及平移向量t,之后我們可以通過式(5)的方法,將人臉局部坐標系下的(Om,nm)向量轉成為相機坐標系下的(Omc,nmc),此后在相機坐標系下可以由三角形相似的方法求出I 點的坐標(xi,yi),我們令Omc=(Xs,Ys,Zs),nmc=(Xe,Ye,Ze),則可以用式(6)求出I 點的坐標。

為了對駕員的注視區域進行分析,本文對于駕駛區域的分類如圖12 所示,其中1 號左后視鏡,2 號左擋風玻璃,3 號內后視鏡,4 號右擋風玻璃,5 號右擋風玻璃,這五個區域作為與駕駛相關的區域,而6 號儀表盤,7 號中控臺作為與駕駛無關的區域。

圖12 駕駛員注視區域分類
對于頭部姿態估計,通常是將人體的頭部作為剛體進行的檢測,但是在實際生活中人體的頭部并不是一個純剛體,人體有各種表情,其中人體嘴部及臉部輪廓是動作最大的區域,對于使用PNP 算法來說所造成的誤差最大。例如,一個咧嘴的動作會讓頭部的姿態估計在Roll 這個維度產生較大的誤差。為了證實這一觀點本文設計了一組實驗來探討不同區域的關鍵點對于頭部姿態估計的誤差的影響。
本實驗所采用的數據集是BIWI 數據集[19],BIWI數據集通過深度相機采集了15000 多張不同個體在不同頭部姿態下的圖片。它的頭部姿態的分布范圍是:俯仰角(pitch)±60°,偏航角(yaw)±75°,旋轉角(roll)±50°。該數據集給通過跟蹤每一個個體的三維點云信息獲得頭部的姿態。該數據集通常作為評估使用深度信息的方法的一個標準數據集,官方標稱數據集的誤差在±1°。本文在實驗測試過程中只使用,它的RGB 圖像以及對應的真實頭部姿態信息,不使用深度信息。
表1 是使用本方法在不同關鍵點分布情況下在BIWI 數據集上面的平均誤差。其中第一行是保留了全部68 個關鍵點的頭部姿態估計結果,第二行是去除了人臉輪廓之后剩下的51 個關鍵點的集合,第三行是僅僅保留了人眼4 個角點、眉毛6 個點和鼻尖位置的11 個點的集合。在分別去除了人臉輪廓以及嘴部關鍵點之后,對于頭部姿態估計的誤差有了明顯的下降,驗證了本文之前的設想。因此本文決定采用表1 所示的第三行的關鍵點集合。同時,為了驗證本文方法的性能,選擇了現有的頭部姿態估計的算法作為比較對象,它們在BIWI 數據集上能效性能效果如表2 所示。

表1 不同關鍵點分布的誤差分析

表2 與各種方法的比較
為了對所提方法的有效性進行評估,本文收集了如圖13 所示的真實駕駛情況下的駕駛員注視區域的數據集。該數據集有三個不同的個體,戴眼鏡與不帶眼鏡,以及不同的性別和身高。每個個體需要注視7個區域,每個區域收集20 張圖片,三個個體共收集到圖片420 張。在該數據集上進行測試得到了如表3 所示的混淆矩陣。各區域的平均準確率為86.67%,滿足實際使用要求。

圖13 數據集部分圖片示例

表3 驗證結果混淆矩陣
為了分析本方法的時間效能,本文統計了各個部分的計算用時。實驗所采用的計算機配置為:CPU 為Intel 酷睿i3-4170,GPU 為英偉達GTX 1060,其中人臉檢測與人臉關鍵點檢測使用PyTorch 框架實現,使用了GPU 并行加速計算,頭部姿態的解決使用了OpenCV中實現的solvePnP()方法。測試了3 分鐘的視頻,其平均幀率為8.97,各階段的平均計算耗時如表4 所示。從表中可以看出人臉和人臉關鍵點檢測耗費了較多的時間,但是整體運行時間能夠達到實時性的要求。

表4 時間性能分析
本文提出了一種基于RGB 相機的駕駛員注視區域檢測方法,使用人臉檢測、人臉關鍵點檢測以及圖形學中的坐標變換的方法有效地獲取了駕駛員的注視區域。但是,由于本方法在輸入方面采用的是可見光源的方法,在夜間的效果不好,下一步將會考慮將加入紅外光源,以增加在夜間的適用性。時間方面,算法在人臉檢測和關鍵點檢測階段的時間復雜度較高,可以考慮將兩個神經網絡合成一個多任務的網絡,使其能夠復用前面的網絡層學到的特征,進而減少在人臉部分的時間開支,使系統有更高的實時性。此外通過實驗分析可以看到,本方法對于區域3、6、7 的預測精度較差,主要是由于這些區域的頭部轉動角度較小,眼球轉動較大,因此下一步還可以眼球注視方向估計以增強注視區域估計的準確度。