朱玉斌,延向軍,申旭奇,盧兆林
(1.中國礦業(yè)大學 信息與控制工程學院,江蘇 徐州 221116;2.山西潞安集團余吾煤業(yè)有限責任公司 自動化科,山西 長治 046199;3.山西潞安環(huán)能股份有限公司 常村煤礦,山西 長治 046102)
疲勞檢測技術分為3類:基于生理特征的方法[1],這類方法檢測結果準確,但會干擾司機駕駛;基于車輛特征的方法[2],這類方法具有非侵入性,但司機的駕駛習慣會影響檢測的準確性;基于視覺特征的方法[3],這類方法對司機的干擾小,準確率高。周云鵬等[4]用LBP算子表征人眼并采用SVM區(qū)分睜眼和閉眼,然后結合嘴巴與頭部的狀態(tài)綜合分析駕駛員的狀態(tài)。此類方法采用人工特征訓練分類器判斷駕駛員的狀態(tài),特征的選擇對結果的影響較大。白中浩等[5]用人臉關鍵點計算眼睛和嘴巴寬高比判斷司機狀態(tài)。該方法降低了算法復雜性,但結果易受光照變化和遮擋的影響。近期,基于CNN的疲勞檢測成為研究的熱點。趙雪鵬等[6]用眼部關鍵點計算眼睛寬高比判斷司機的狀態(tài)。Fang Zhang等[7]用人臉關鍵點提取眼部圖像,然后用CNN判斷眼部狀態(tài)。這類方法利用CNN自動提取特征具有更好的表達能力,但需要較大量的數(shù)據(jù)且訓練過程復雜耗時,上述基于CNN的方法均采用單一的疲勞參數(shù),不能夠準確地描述司機的狀態(tài)。
寬度學習[8]在中小數(shù)據(jù)集上的識別準確率與深度學習相當,但訓練和測試時間比深度學習短。本文采用寬度學習系統(tǒng)判斷司機的眼睛和嘴部狀態(tài),然后把眼睛、嘴部和頭部狀態(tài)序列作為二級BLS網絡的輸入,檢測司機的疲勞狀態(tài)。
圖像的質量是影響疲勞檢測精度的重要因素之一,但在車輛行駛過程中,復雜的光照條件以及眼鏡的遮擋都使疲勞檢測的準確率下降。紅外光能夠彌補夜間光照不足并且可以透過眼鏡采集到人眼圖像,所以,采用紅外攝像頭作為圖像采集設備。非正臉的頭部姿態(tài)會導致人臉檢測算法的準確度降低,進而使關鍵點定位不準,不能準確地提取出感興趣區(qū)域。針對該問題,通過漸進校準網絡(PCN)[9]檢測人臉。
PCN級聯(lián)3個CNN網絡由粗到細的預測人臉框[10]和人臉角度值。如圖1所示,PCN-1在預測人臉標記框的同時對人臉角度執(zhí)行二分類任務,把[-180°,180°]的人臉翻轉到[-90°,90°]。同理,PCN-2對人臉角度進行三分類,把人臉的角度范圍限制到[-45°,45°]。PCN-3使用角度偏差回歸預測出精準的角度。如式(1)所示,3個網絡預測的角度之和為最終的人臉偏移角度
θRIP=θ1+θ2+θ3
(1)
圖1 PCN人臉檢測
(2)
用訓練好的模型對測試集進行關鍵點檢測,將預測的人臉關鍵點坐標標記在圖像上,如圖3所示。
圖3 關鍵點定位
面部五官的比例一般符合“三庭五眼”的標準[13]。如圖4所示,本文根據(jù)人臉關鍵點和五官比例的特點提取雙眼和嘴巴。眼部和嘴巴的提取方式如式(3)和式(4)所示。
圖4 感興趣區(qū)域定位
(3)
(4)
式(3)中的x1為特征點檢測網絡定位到的左眼中心的橫坐標。同理,x2為右眼中心的橫坐標。眼部區(qū)域的寬和高由左右眼中心橫坐標的差乘以相應的系數(shù)得到。式(4)中的x4和x5分別為左側和右側嘴角的橫坐標,嘴巴區(qū)域的寬和高由二者的差乘以相應的系數(shù)得到,把二者的中心點作為嘴巴區(qū)域的中心。
相比于傳統(tǒng)的機器學習算法,深度網絡的分類與回歸效果都有極大提升,但深層結構的超參數(shù)過多,導致模型的收斂時間很長。為了減少模型的訓練時間,提高完成任務的效率,陳俊龍?zhí)岢鰧挾葘W習系統(tǒng),寬度學習系統(tǒng)結構如圖5所示。BLS處理數(shù)據(jù)的流程如下:首先,用原始的數(shù)據(jù)生成映射特征。然后,用隨機權重處理映射特征生成增強特征。最后,串聯(lián)映射特征與增強特征作為單層感知器的輸入。
圖5 寬度學習系統(tǒng)結構
(5)
Hj=j(ZiWhj+βhj),j=1,…,m
(6)
生成第i組映射特征Zi的方法如式(5)所示。其中,X表示原始輸入數(shù)據(jù),Wei表示呈高斯分布的隨機權重矩陣,βei表示偏置常量,φi表示稀疏化和正則化處理函數(shù)。生成第j組增強特征Hj的方法如式(6)所示。其中,Zi=[Z1,…,Zi] 為所有的映射特征,Whj是經過正交規(guī)范化后的隨機矩陣,βhj為偏置常量,j為非線性函數(shù)。BLS的表達式如式(7)所示。其中,Hj=[H1,…,Hj] 為所有的增強特征,Wm為連接權重,Y為網絡的輸出。在進行建模時,可以通過改變i和j的值來應對不同復雜度的任務
Y=[Z1,…,Zi|(ZiWh1+βh1),…,(ZiWhj+βhj)]Wm=
[Z1,…,Zn|H1,…,Hj]Wm=
[Zi|Hj]Wm
(7)
在生成映射節(jié)點的過程中,BLS對原始數(shù)據(jù)進行高斯濾波和稀疏表示,降低原始數(shù)據(jù)的噪聲和線性相關度。在生成增強節(jié)點的過程中,BLS用正交矩陣把數(shù)據(jù)映射到高維子空間,使數(shù)據(jù)在高維上線性可分,并進一步用非線性函數(shù)處理數(shù)據(jù),增加網絡模型的非線性。
圖像作為網絡輸入的處理方式如式(8)所示。其中,I(n,n) 為位置 (n,n) 的像素值,X為網絡的輸入。標記每幅眼睛和嘴巴圖像的狀態(tài)作為輸出標簽Y, 其中,睜眼或張嘴標記為0,閉眼或閉嘴標記為1[14]。
設XZH=[Z1,Z2,…,Zn,H1,H2,…,Hm], 則網絡連接權重的求解如式(9)所示。相比于多層神經網絡通過反向傳播的求解方式,BLS通過偽逆的求解方法,極大地縮短了網絡的訓練時間。此外,BLS還支持3種增量學習方法,包括增強節(jié)點增量,特征節(jié)點增量和輸入數(shù)據(jù)增量。增量學習的方式,只要計算新加入節(jié)點的偽逆,就能完成對網絡參數(shù)的更新,使網絡的訓練時間進一步縮短
X=[I(1,1),…,I(1,n),I(2,1),…,I(n,n)]
(8)
Wm=(XZHTXZH+αI)-1XZHTY
(9)
如圖6所示,頭部姿態(tài)由3種基本姿態(tài)(pitch,yaw,roll)疊加而成。當司機處于疲勞狀態(tài)時,頭部會向下轉動。頭部繞y軸小幅度轉動可以認為司機在觀察視鏡,當幅度過大時表明司機在違規(guī)查看路徑。
圖6 頭部姿態(tài)
利用非線性最小二乘法建立人臉姿態(tài)模型,如式(10)所示。采用POSIT[15]計算基本頭部姿態(tài)角度。 (α,β,γ) 分別為人臉在3個方向上的旋轉角度,n為構建模型的人臉特征點個數(shù),qi為進行人臉估計圖像的面部特征點,pi為三維通用標準模型的特征點,R為旋轉矩陣,t為空間偏移量,C為伸縮因子
(10)
R=Rx(α)Ry(β)Rz(γ)
(11)
(12)
(13)
(14)
當司機低頭超過30度即pitch<-30°或左右轉頭超過30度即|Yaw|>30°時頭部狀態(tài)Sh設置為1否則為0,如式(15)所示
(15)
駕駛員進入疲勞狀態(tài)的表現(xiàn)有,閉眼時間增長,打哈欠以及頭部俯仰角度變大,并且眼睛狀態(tài),嘴巴狀態(tài)和頭部俯仰的變化在時序上存在著上下文關聯(lián)性。因此,構建面部狀態(tài)時序序列表征人臉的狀態(tài),如式(16)所示。其中,Sen,Smn,Shn分別表示眼睛,嘴部和頭部在第n幀的狀態(tài)
(16)
將疲勞和正常狀態(tài)下的面部狀態(tài)時序序列S分別標記為1和0。用S及其標簽訓練一個BLS疲勞檢測網絡。疲勞檢測的流程如圖7所示。
圖7 疲勞檢測流程
實驗平臺處理器為Intel(R) Core(TM) i5-4460,主頻3.2 GHZ,內存8 GB。kaggle人臉關鍵點數(shù)據(jù)集包含7000張標記有15個人臉關鍵點的96×96人臉灰度圖像。選取其中3000張圖像并在水平和鉛直方向旋轉,將數(shù)據(jù)擴充到9000張,用6750張圖片作為訓練數(shù)據(jù),2250張作為測試數(shù)據(jù)。測試集的均方誤差為1.95,表明單個關鍵點在圖像上的平均偏移誤差值為1.4(圖像大小96×96),能夠滿足感興趣區(qū)域提取任務的精度要求。由于缺少疲勞檢測相關的數(shù)據(jù)庫,采用自建的面部疲勞視頻數(shù)據(jù)(MT-F)驗證算法的有效性。采集9名志愿者各9分鐘在不同光照條件下佩戴透鏡,太陽鏡和裸眼3種情況下的疲勞和正常狀態(tài)下的視頻,部分數(shù)據(jù)如圖8所示。從視頻中截取睜眼和閉眼圖像各2000張,3000張用于訓練,1000張用于測試,同時,截取張嘴和閉嘴圖像做訓練。從各類視頻中間選取連續(xù)的60幀(幀率為20 fps)圖像為一組并對每張圖像處理得到面部時序狀態(tài)序列S的集合,將該集合分成3:1分別作為疲勞檢測網絡的訓練和測試集。
圖8 數(shù)據(jù)樣本
寬度學習網絡通過交替改變不同種類節(jié)點數(shù)量的方式調整網絡結構。眼睛狀態(tài)識別網絡的結構調整過程如表1所示。首先,保持網絡中映射節(jié)點的個數(shù)不變,逐步設置更多的增強節(jié)點,網絡的識別準確率上升。當網絡的增強節(jié)點過多時,網絡過擬合,識別準確率降低。此時,將增強節(jié)點的數(shù)量恢復到上一次的值并保持不變,然后逐步設置更多的映射節(jié)點,網絡的識別準確率上升,直至網絡的識別準確率下降時,停止網絡的調整。最后,采用識別準確率最高的網絡作為結果。嘴巴狀態(tài)識別網絡包含100個映射節(jié)點和2500個增強節(jié)點。疲勞檢測網絡包含50個映射節(jié)點和600個增強節(jié)點。BLS眼睛狀態(tài)識別網絡的平均單次訓練時間為1.6 s。
表1 BLS眼睛狀態(tài)識別網絡調參過程
DROWSY[16]數(shù)據(jù)庫包含14個測試者每人3段在不同疲勞程度下的視頻,不包含戴墨鏡的情況。表2展示了在MT-F和DROWSY數(shù)據(jù)庫上人眼狀態(tài)識別的結果。由于MT-F有更復雜的光照條件和墨鏡遮擋,在MT-F上的識別準確率要低于在DROWSY上的識別準確率。嘴部狀態(tài)的識別準確率為98.3%。
表2 眼睛和嘴部狀態(tài)識別結果
用視頻(每段包含60幀圖像)對算法做測試,結果見表3。為了驗證多參數(shù)融合的效果,分別使用眼睛狀態(tài)序列訓練的疲勞檢測網絡和使用面部狀態(tài)序列訓練的網絡對視頻進行檢測。實驗結果表明,多參數(shù)融合網絡的檢測準確率更高。
為驗證提出的算法的優(yōu)越性,分別從檢測準確率和檢測時間兩個方面與其它疲勞檢測算法進行對比,結果如表4
表3 疲勞檢測結果
所示。提出的算法的檢測準確率高于CNN+PERCLOS,這是因為多參數(shù)融合提升了檢測的準確率。與傳統(tǒng)方法相比,基于BLS和CNN的方法的檢測時間變長,這是因為網絡中的參數(shù)較多。在使用多參數(shù)的情況下,提出的算法的檢測時間仍比基于CNN的方法少6.18 ms。
表4 算法性能對比
本文利用紅外攝像頭采集圖像,減少因光照變化和戴眼鏡對檢測結果產生的影響,采用CNN回歸網絡檢測人臉關鍵點,基于此提取感興趣區(qū)域并用寬度學習系統(tǒng)對面部器官狀態(tài)進行判別,最后,通過二級寬度學習網絡融合眼睛,嘴部和頭部狀態(tài)序列推斷司機狀態(tài)。檢測結果表明,本算法的檢測準確率為94.9%,單幀檢測時間為52.43 ms,能夠滿足疲勞檢測系統(tǒng)實時性與準確性的要求。