肖心遠(yuǎn),黃 劍,孫瀟鵬,吳朝榮
(廣東交通職業(yè)技術(shù)學(xué)院,廣州 510650)
道路運(yùn)輸中,人、車、路、環(huán)境是影響駕駛安全的最主要因素,而人的因素又是影響駕駛安全的最重要因素。據(jù)統(tǒng)計(jì),在各類道路運(yùn)輸安全事故中,80%~90%的安全事故是由人為因素造成[1],疲勞駕駛又是造成安全事故的最主要原因。據(jù)統(tǒng)計(jì),在交通事故中,有30%左右是因疲勞駕駛造成,每年大約有1 500 人死于疲勞駕駛引起的事故[2],因此對(duì)駕駛員的疲勞狀態(tài)進(jìn)行監(jiān)測非常重要。本文主要是采用視覺圖像處理技術(shù)對(duì)駕駛員的疲勞度進(jìn)行監(jiān)測,預(yù)防駕駛員疲勞駕駛。當(dāng)前在圖像模式識(shí)別中,由于CNN神經(jīng)網(wǎng)絡(luò)避免了對(duì)圖像復(fù)雜的前期預(yù)處理,節(jié)省了很多工作,CNN成為了眾多科學(xué)領(lǐng)域的熱點(diǎn)研究領(lǐng)域,應(yīng)用也越來越廣泛[3]。傳統(tǒng)的駕駛員駕駛行為檢測方法是使用SIFT、HOG 或者Haar 等特征描述算子[4],并且使用人工提取特征方式進(jìn)行模式識(shí)別,在現(xiàn)實(shí)復(fù)雜的駕駛環(huán)境下往往精度不能滿足要求,其魯棒性也有待提高。深度學(xué)習(xí)技術(shù)是一類能從大量數(shù)據(jù)中自動(dòng)學(xué)習(xí)出特征進(jìn)行表示的方法[5],這些年在目標(biāo)檢測、目標(biāo)識(shí)別、目標(biāo)跟蹤,人臉識(shí)別、場景語義理解等領(lǐng)域有了快速的發(fā)展,其強(qiáng)大的學(xué)習(xí)能力和特征表達(dá)能力,對(duì)大部分有遮擋、光照明暗變化等外界干擾條件的場合也表現(xiàn)出了較強(qiáng)的魯棒性[6]。因此,本文選取駕駛員身體特征,比如眼睛閉合、嘴巴張開程度等,設(shè)計(jì)使用基于深度學(xué)習(xí)算法的疲勞駕駛檢測算法,來表示疲勞駕駛的特征,設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)模型,檢測車輛駕駛員是否疲勞并判斷其疲勞程度。
本系統(tǒng)采用前期研發(fā)的道路車輛駕駛員監(jiān)測信息的采集及處理系統(tǒng)[7],監(jiān)測終端利用當(dāng)今最流行的Android嵌入式開發(fā)系統(tǒng),并在該系統(tǒng)的基礎(chǔ)上,升級(jí)了系統(tǒng)的軟硬件,之前利用ARM Cortex-A8 內(nèi)核的REAL210 核心開發(fā)板[8],但速度明顯慢,沒有達(dá)到理想的效果,最后使用了樹莓派3 作為主控板,達(dá)到了要求。目前主控處理器更新為樹莓派4B,在該開發(fā)板中進(jìn)行有效開發(fā),通過對(duì)監(jiān)測終端的開發(fā),系統(tǒng)的外圍接口模塊有電源模塊、5G無線模塊、GPS定位模塊、視頻圖像采集模塊、溫度信號(hào)采集模塊、心率信號(hào)采集模塊、存儲(chǔ)器模塊、LCD顯示模塊、ZigBee 通信模塊[8]??蓪?shí)現(xiàn)人臉識(shí)別、疲勞度監(jiān)測、酒精度監(jiān)測、GPS 定位監(jiān)測、心率體溫監(jiān)測、顯示和Web數(shù)據(jù)上傳功能。各個(gè)模塊分別作為一個(gè)線程同時(shí)執(zhí)行,監(jiān)測模塊將采集的數(shù)據(jù)生成臨時(shí)文件進(jìn)行保存,顯示屏模塊通過對(duì)數(shù)據(jù)文件進(jìn)行讀取將數(shù)據(jù)進(jìn)行顯示,Web 數(shù)據(jù)上傳模塊通過對(duì)數(shù)據(jù)文件進(jìn)行讀取定時(shí)將數(shù)據(jù)進(jìn)行上傳,實(shí)現(xiàn)對(duì)駕駛員的實(shí)時(shí)監(jiān)控。駕駛員信息采集系統(tǒng)原如圖1 所示。
圖1 駕駛員疲勞檢測系統(tǒng)原理
本文使用基于深度學(xué)習(xí)的疲勞駕駛檢測算法。首先利用深度學(xué)習(xí)CNN模型YOLOv3 算法[9]檢測出常規(guī)攝像頭實(shí)時(shí)采集的駕駛員人臉圖像,其次,利用特征點(diǎn)模型實(shí)現(xiàn)眼睛和嘴巴區(qū)域的分割,然后通過循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)中的長短記憶網(wǎng)絡(luò)算法訓(xùn)練模型,進(jìn)行駕駛員疲勞度預(yù)警,疲勞度監(jiān)測流程如圖2 所示。
圖2 疲勞度監(jiān)測流程
人臉識(shí)別模塊主要通過調(diào)用百度人臉識(shí)別接口實(shí)現(xiàn)人臉識(shí)別功能。首先在樹莓派中安裝百度人臉識(shí)別接口的SDK,并在百度云平臺(tái)申請(qǐng)并生成接口的密鑰,在云平臺(tái)中創(chuàng)建人臉庫,將人臉圖像信息以及個(gè)人信息上傳到人臉庫中將會(huì)自動(dòng)生成一個(gè)唯一的用戶ID賬號(hào),在系統(tǒng)開發(fā)板中,通過已經(jīng)注冊的接口密鑰調(diào)用SDK 的AipFace()方法創(chuàng)建一個(gè)客戶端,再通過樹莓派的USB 攝像頭獲得當(dāng)前鏡頭前的圖像信息,獲取的人臉圖像如圖3 所示。
圖3 人臉原始圖像
將圖像信息臨時(shí)生成一張圖片進(jìn)行保存,再通過已經(jīng)創(chuàng)建好的客戶端將采集到的人臉照片以及對(duì)應(yīng)的人臉庫用戶組名,通過網(wǎng)絡(luò)的方式發(fā)送請(qǐng)求到百度云人臉識(shí)別平臺(tái)進(jìn)行人臉識(shí)別操作,百度人臉識(shí)別平臺(tái)將會(huì)根據(jù)上傳的人臉圖像已經(jīng)對(duì)應(yīng)的人臉倉庫進(jìn)行比較,并將結(jié)果返回。
在使用卷積神經(jīng)網(wǎng)絡(luò)YOLOv3 算法檢測出視頻中的人臉后,本項(xiàng)目引入長短時(shí)記憶網(wǎng)絡(luò)(LSTM)[10]獲取各個(gè)時(shí)刻的圖像特征之間的相互關(guān)聯(lián)信息。LSTM 是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種,可以對(duì)時(shí)間進(jìn)行顯式建模,并且引入時(shí)間序列維度來解決幀數(shù)據(jù)間的聯(lián)系。
卷積神經(jīng)網(wǎng)絡(luò)是前饋神經(jīng)網(wǎng)絡(luò)的一種,它具有豐富的人工神經(jīng)元,對(duì)圖像處理、圖像識(shí)別、圖像特征提取有非常出色的表現(xiàn),它主要包括卷積層、池化層和全連接層3 層[11]。
利用深度卷積神經(jīng)網(wǎng)絡(luò)對(duì)人臉圖像進(jìn)行捕捉,深度學(xué)習(xí)模型如圖4 所示。
圖4 深度卷積神經(jīng)網(wǎng)絡(luò)模型
本文的CNN 人臉檢測采用基準(zhǔn)人臉數(shù)據(jù)集Wider Face進(jìn)行訓(xùn)練,數(shù)據(jù)集共包含了32 203 張圖像和393 703個(gè)人臉標(biāo)注,自帶標(biāo)注好的人臉框,在下載的數(shù)據(jù)集中,每個(gè)集合中的圖像數(shù)據(jù),根據(jù)人臉檢測的難易程度分為“Easy”“Medium”“Hard”3 種,其中人工標(biāo)注邊界框?yàn)榫G色的矩形框,在尺度、遮擋、姿態(tài)、裝扮、表情、光照等方面的人臉差異較大,人臉特征具有多樣性[12]。針對(duì)模型訓(xùn)練,本文按照?qǐng)D像的識(shí)別難度把數(shù)據(jù)集分成為3 個(gè)子集,并把數(shù)據(jù)集中60%用作訓(xùn)練集,30%用作測試集,10%為驗(yàn)證集用于模型訓(xùn)練。
算法實(shí)現(xiàn)步驟如下。
(1)算法選擇。人臉檢測算法為YOLOv3。
(2)部署應(yīng)用環(huán)境搭建。試驗(yàn)采用Tensorflow 深度學(xué)習(xí)框架[13];環(huán)境為tensorflow-gpu1.14,keras 2.1.5;Ubuntu,NVIDIA Tesla驅(qū)動(dòng)程序,CUDA10 版本,cuDNN神經(jīng)網(wǎng)絡(luò)加速庫7.4.2 版本。
(3)訓(xùn)練設(shè)置。超參數(shù)動(dòng)量因子設(shè)置為0.944,權(quán)重衰減正則系數(shù)設(shè)置為0.000 6,最大迭代次數(shù)epoch 設(shè)置為100,alpha學(xué)習(xí)率為0.001 5 次迭代時(shí),batch_size為8;每訓(xùn)練50 次時(shí)疊加學(xué)習(xí)率0.000 1,batch_siz為1;網(wǎng)絡(luò)結(jié)構(gòu)為CSPDarknet53 +PAnet-SPP +Yolov3 head 結(jié)構(gòu)(圖5)。
圖5 YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv3 算法采用的主干網(wǎng)絡(luò)為Darknet-53[14],其主要特征是使用了殘差網(wǎng)絡(luò)Residual,對(duì)殘差卷積進(jìn)行一次3*3、2 步長的卷積,再保存該卷積layer,進(jìn)行一次1*1 的卷積和一次3*3 的卷積,把這個(gè)結(jié)果加上layer作為最后的結(jié)果。殘差網(wǎng)絡(luò)的優(yōu)點(diǎn)是容易優(yōu)化,它能夠使用增加深度的方法來提高識(shí)別準(zhǔn)確率。本文在YOLOv3 的基礎(chǔ)上借鑒了CSPNet,對(duì)Darknet-53 做了網(wǎng)絡(luò)機(jī)構(gòu)的局部改進(jìn)[15]。
在特征金字塔部分設(shè)計(jì)中,YOLOv3 主要使用SPPNet和PANet兩種結(jié)構(gòu)。模型中不同尺寸特征圖進(jìn)入全連接層時(shí)引發(fā)的問題主要由SPP- Net 模塊解決。對(duì)CSPdarknet53 最后一個(gè)特征圖進(jìn)行3 次卷積,然后用4個(gè)不同尺度的池化核(13*13、9*9、5*5、1*1)進(jìn)行最大值池化,最后分離出最顯著的特征,PANet 是一種特征圖融合方式[16],特點(diǎn)是對(duì)提取的特征進(jìn)行多次重復(fù)利用。
YOLOv3 采用了Mosaic 數(shù)據(jù)增強(qiáng)方式,其原理類似CutMix,隨機(jī)裁剪4 張圖片,然后拼接成一張圖片作為圖片訓(xùn)練數(shù)據(jù)。這樣做豐富了圖片背景,增強(qiáng)了對(duì)常見背景之外的目標(biāo)的檢測精度。減少了估計(jì)均值和方差時(shí)對(duì)batch-size的要求,降低了訓(xùn)練成本,單GPU 也可以進(jìn)行訓(xùn)練[17]。
本文使用YawDD數(shù)據(jù)集作為疲勞駕駛檢測模型的數(shù)據(jù)集,該數(shù)據(jù)集里面包含各類駕駛車輛人員在不同條件,不同光照環(huán)境下拍攝的模擬駕駛視頻,可用于駕駛員疲勞檢測等算法的驗(yàn)證試驗(yàn)。YawDD 數(shù)據(jù)集有2 個(gè)視頻集,包含了多個(gè)具有不同面部特征的駕駛車輛人員行為[18]。錄制視頻分辨率為640×480,以30 幀/s 的速率錄制,采用24bit真彩色進(jìn)行顯式。第1 個(gè)視頻集安裝的攝像頭在駕駛室后視鏡的下方,共有322 段視頻,每個(gè)駕駛員錄制3~4 段視頻,第2 個(gè)視頻集是把攝像頭安裝在駕駛室儀表盤上方,每個(gè)駕駛員錄制一段視頻。
駕駛?cè)藛T的面部特征包括:(1)駕駛員正常駕駛(不說話,設(shè)置標(biāo)簽為Normal);(2)駕駛員駕駛時(shí)說話或唱歌(設(shè)置標(biāo)簽為Talking);(3)駕駛員開車打哈欠(設(shè)置標(biāo)簽為Yawning);(4)駕駛員開車閉眼晴(設(shè)置標(biāo)簽為Sleeping)。數(shù)據(jù)樣本如圖6 所示。
圖6 YawDD數(shù)據(jù)集示例
項(xiàng)目設(shè)計(jì)使用循環(huán)神經(jīng)網(wǎng)絡(luò)中的長短時(shí)記憶網(wǎng)絡(luò)模型對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練,選取數(shù)據(jù)集中30 s以上的視頻作為測試樣本,選取視頻數(shù)據(jù)集中的60%作為模型的訓(xùn)練集,30%作為測試集,10%作為驗(yàn)證集進(jìn)行模型訓(xùn)練。LSTM網(wǎng)絡(luò)模型是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),它解決了RNN的長期依賴與梯度消失問題[19],這種網(wǎng)絡(luò)能夠記住數(shù)據(jù)的長期依賴關(guān)系,前一時(shí)刻的網(wǎng)絡(luò)輸出被它選擇性地記憶下來,給后面的網(wǎng)絡(luò)學(xué)習(xí)提供了豐富的事件關(guān)聯(lián)性[20-21]。
本文中,駕駛員監(jiān)控視頻被按幀按時(shí)間順序分解成圖片序列,將一幀幀圖片的臉部疲勞狀態(tài)參數(shù)矩陣Xt輸入LSTM,LSTM模型會(huì)判斷出來運(yùn)動(dòng)狀態(tài)下的駕駛員疲勞狀態(tài)。
訓(xùn)練部署應(yīng)用如下:(1)實(shí)驗(yàn)平臺(tái)主機(jī)電腦采用Intel(R)Core(TM)i7-1165,@2.80 GHz,內(nèi)存16 GB;(2)在Windows10 操作系統(tǒng)下采用Tensorflow 深度學(xué)習(xí)模塊;(3)優(yōu)化器采用ADAM,不需GPU加速;(4)實(shí)驗(yàn)的數(shù)據(jù)集為YawDD 視頻數(shù)據(jù),將正常駕駛、說話狀態(tài)、唱歌狀態(tài)標(biāo)注為非疲勞狀態(tài),將打哈欠、閉眼睛標(biāo)注為疲勞狀態(tài);(5)使用上述長短記憶網(wǎng)絡(luò)(LSTM)進(jìn)行訓(xùn)練。
若由于攝像頭沒有獲取到人臉的監(jiān)測數(shù)據(jù),系統(tǒng)則會(huì)將疲勞度文件的疲勞數(shù)據(jù)修改為-1,表示數(shù)據(jù)異常,并且將錯(cuò)誤信息保存在錯(cuò)誤信息文件中,顯示屏將會(huì)讀取錯(cuò)誤信息并顯示。
本文針對(duì)傳統(tǒng)的特征算子檢測精度較低,搭建了駕駛員疲勞檢測的信息采集系統(tǒng),系統(tǒng)采集駕駛員的人臉圖像、溫度、心率、GPS 定位等多種信息,并通過后臺(tái)處理駕駛員疲勞狀態(tài)圖像。系統(tǒng)選取駕駛員身體特征,比如眼睛閉合、嘴巴張開程度等,設(shè)計(jì)使用基于神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)算法的疲勞駕駛檢測算法,來表示疲勞駕駛的特征,使用YawDD數(shù)據(jù)集作為疲勞駕駛檢測模型的數(shù)據(jù)集,數(shù)據(jù)集中60%用作訓(xùn)練集,30%用作測試集,10%為驗(yàn)證集用于模型訓(xùn)練,使用循環(huán)神經(jīng)網(wǎng)絡(luò)中的長短時(shí)記憶網(wǎng)絡(luò)模型對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練結(jié)果表時(shí),實(shí)驗(yàn)結(jié)果能滿足駕駛員疲勞檢測的要求。