孫浩哲 張言利 陳紅昌 張喜偉
摘 ?要:根據公安部2022年發布的數據,我國眾多交通事故中大約有10%~20%的事故是由疲勞駕駛誘發的。為了更好地保障駕駛員的生命財產安全,設計一種基于車載視頻分析和卷積神經網絡YOLOv5的疲勞駕駛行為檢測算法。使用公開數據集與自采集數據集進行訓練,同時對算法進行了優化,使之能夠在云GPU環境下進行訓練與檢測。結果顯示,經過訓練后,模型檢測準確率可達90%,具有較好的應用和推廣前景。
關鍵詞:深度學習;疲勞駕駛檢測;YOLOv5;卷積神經網絡(CNN)
中圖分類號:TP183;TP391.4 文獻標識碼:A 文章編號:2096-4706(2023)16-0089-06
Design and Implementation of Fatigue Driving Behavior Detection Algorithm Based on Vehicle Video Analysis
SUN Haozhe, ZHANG Yanli, CHEN Hongchang, ZHANG Xiwei
(School of Information, North China University of Technology, Beijing ?100144, China)
Abstract: According to the data released by the Ministry of Public Security in 2022, there are about 10%~20% of traffic accidents in China are caused by fatigue driving. In order to better protect the life and property safety of drivers, a fatigue driving behavior detection algorithm based on vehicle video analysis and convolutional neural network YOLOv5 is designed. Train is performed using open dataset and self-collected dataset, while optimizing the algorithm to enable training and detection in a cloud GPU environment. The results show that after training, the model detection accuracy can reach 90%, which has good application and promotion prospects.
Keywords: deep learning; sleep-deprived driving detection; YOLOv5; CNN
0 ?引 ?言
隨著我國經濟的發展,居民收入穩步提高,家用汽車越來越多地進入普通家庭,極大提升了人們的生活質量。但是,問題也隨之而來。據國家統計局2022年發布的數據,2021年機動車交通事故共有233 729起,導致死亡56 249人,受傷238 035人,并造成134 549萬元的經濟損失。公安部的統計數據顯示,機動車重大交通事故發生原因中,疲勞駕駛占比達到了10%~20%[1]。隨著機動車數量的逐漸增加,疲勞駕駛導致的交通事故可能會更多。因此,建立便捷、有效的疲勞駕駛判斷系統并對駕駛員進行適當的提醒,對于維護駕駛員以及交通參與者的生命安全,減少財產損失,維護和諧交通環境,顯然具有重要的現實意義。
疲勞駕駛判斷的實現需要依賴技術檢測系統,國內外研究者一直在致力于開發不同的檢測系統,如沙春發等人基于方向盤握力的疲勞駕駛檢測[2],石曉玲等通過對車輛行駛軌跡、方向盤轉角等特征分析進行疲勞狀態識別[3]等。雖然這些檢測系統具有較高的準確度,但是傳感器等設備可能會對駕駛員的駕駛產生負面影響,而對車輛本身進行分析則對路況及駕駛規范性要求較高,因此實施起來都有一定難度。
要解決上述問題,近年來日趨成熟的生物信息技術進行檢測的方法具有更大的優勢和可行性。人體在疲勞時展現出的異常狀態特征較多,其中駕駛員在疲勞駕駛時展現出的便于檢測的面部特征主要有眼睛睜開大小[4]和嘴部張開大小[5]。利用目前廣泛應用的計算機視覺技術,在不影響駕駛員駕駛的前提下,通過對眼睛和嘴巴特征進行識別,判斷駕駛員是否瞇眼、打哈欠等疲勞變化可以實現統一、高精度的檢測。在車內設置疲勞駕駛檢測設備,檢測到出該類面部特征時,適當進行報警,提示駕駛員進行適度休息或換人駕駛,能夠很大程度上降低事故的發生率。
基于此,本研究擬在卷積神經網絡(Convolutional Neural Networks, CNN)的基礎上,采用無接觸的圖像識別方法,構建新的疲勞檢測算法,以期減少交通事故的發生。
1 ?疲勞檢測算法介紹
本算法基于YOLOv5,通過攝像頭對駕駛員的駕駛狀態進行實時采集分析,判斷駕駛員是否處于疲勞駕駛,檢測過程不影響駕駛員的駕駛狀態。疲勞檢測算法的總體框圖如圖1所示。
1.1 ?YOLOv5算法簡介
YOLOv5是一個較為成熟且識別速度與準確率均較高的算法網絡,可在復雜的情況下保持較高的識別速度與準確率,本系統以YOLOv5作為基礎進行設計,可實現高靈敏度的需求。
YOLOv5是一種單階段目標檢測算法,其網絡結構主要分為四個部分,分別為:輸入端、Backbone、Neck、Prediction。其網絡架構如圖2所示。
1.1.1 ?輸入端
采用Mosaic數據增強技術、自適應初始錨框計算[6]、圖片縮放等技術[7]等。Mosaic數據增強將圖片進行裁剪,之后與向上采樣的圖結合作為訓練數據[8],能更好地檢測小目標人臉。在選定錨框時采用自適應錨框計算,可實現訓練時自主計算出每個訓練集中的最佳錨框值,小目標分配到anchors較小,大目標分配到anchors較大。同時也能實現在小特征圖上檢測大目標,在大特征圖上檢測小目標[9],提高檢測的準確率。
對應的代碼如下:
anchors:
- [4,5, ?8,10, ?13,16] ?# P3/8 ?anchors[0] 檢測小目標,三組尺寸分別為(10,13)(8,10)(13,16)
- [23,29, ?43,55, ?73,105] ?# P4/16 anchors[1] 檢測中目標
- [146,217, ?231,300, ?335,433] ?# P5/32 ?anchors[1] 檢測大目標
同時YOLOv5還采用自適應圖片縮放技術,將圖像的長寬按比例縮放,對于收縮后不滿足條件的一邊再進行填充,減少黑邊的占比,減少了計算量,提高了模型推理速度。
1.1.2 ?Backbone
用Stem模塊替代網絡中原有的Focus模塊,在不降低性能的同時,提高了網絡的泛化能力,降低了計算復雜度。此外,在網絡結構中重復用CBL模塊提取圖片的特征信息。CBL模塊是Conv+BN+激活函數的組合,使用激活函數Hardswish,如式(1)所示。ResUnit模塊替換了原來版本的Bottleneck模塊。這些改進減少了計算量,提升了訓練速度。
(1)
利用CSP1_X模塊對殘差特征進行學習,結構如圖3所示。
Backbone的最后是SPP空間金字塔池化,如圖4所示。利用1個標準卷積模塊將輸入通道減半,然后分別做kernel-size為5、9、13的最大池化,經過3個不同卷積核的最大池化采樣之后,輸出通道數相同,便于后續操作。該部分的作用是將更多不同分辨率的特征進行融合,在送入網絡neck之前能夠得到更多的信息。
1.1.3 ?Neck
與上一層相比較,使用了CSP2_X模塊,并增加了Upsample上采樣結構。其中concat將提取出來的特征進行融合,之后進行上采樣,將提取出的feature map進行放大,以增加圖片的分辨率。同時Neck中整體的網絡結構采用FPN和PANet結構。FPN通過自頂向下的結構,將深層的語義信息傳遞到淺層,將高層特征與底層特征進行融合,能提高對小目標檢測的準確率[10]。與PAN相比,PANet在FPN的基礎上又引入了一個自底向上的Bottom-up,促使PANet對不同層次的特征進行融合,保留了更多的淺層位置特征,將整體特征提取能力進一步提升。
1.1.4 ?輸出端(Prediction)
包含三個檢測層,分別對應Neck中得到的3種不同尺寸的特征圖,并且給每種特征圖都預設了3個不同寬、高比的Anchor,用來預測和回歸目標。同時,采用三種損失函數分別計算分類、邊界框和置信度損失。所使用的損失函數為EIoU_LOSS,計算公式如式(2):
(2)
該損失函數彌補了IoU為0時無法得到預測框和真實框之間距離的缺點,通過NMS非極大值抑制比來提高網絡預測的準確度。采用平均準確率(mean Average Precision, mAP)來進行效果與性能評價,mAP值越大檢測結果越好,而使用EIoU函數后網絡的mAP有了較為顯著的提升,有效提高了疲勞駕駛檢測的精確度[11]。實現人臉檢測的部分代碼如下:
for i, det in enumerate(pred): ?#檢測每一張圖片
if webcam: ?#如果開啟攝像頭
p, im0, frame = path[i], im0s[i].copy(), dataset.count
else: ?#從文件中讀取視頻或圖片
p, im0, frame = path, im0s.copy(), getattr(dataset, 'frame', 0)
p = Path(p) ?#當前圖片或視頻的路徑
save_path = str(Path(save_dir) / p.name) ?# 保存路徑
if len(det): ?#將預測信息映射到原圖
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round()
for c in det[:, -1].unique():
n = (det[:, -1] == c).sum() ?# detections per class
det[:,5:15]=scale_coords_landmarks(img.shape[2:],det[:,5:15],im0.shape).round()
for j in range(det.size()[0]):#在原圖上將檢測出來的人臉畫框顯示置信度闕值
xyxy = det[j, :4].view(-1).tolist()
conf = det[j, 4].cpu().numpy()
landmarks = det[j, 5:15].view(-1).tolist()
class_num = det[j, 15].cpu().numpy()
im0 = show_results(im0, xyxy, conf, landmarks, class_num, j)
最后將檢測后的結果選擇性保存,或在檢測時顯示其結果。
1.2 ?基于Face_Recongnition的關鍵點定位
Face_Recognition庫是基于Python語言開發的開源項目,基于Dlib開源庫的深度學習模型進行構建,其采用的訓練數據集為Labeled Faces in the Wild,測試的成功率高達99.38%。
本系統首先識別人臉,使用Face_Recognition庫實現人臉關鍵點識別,該模型的68個關鍵點如圖5所示。采用人臉的68個特征點與庫中人臉特征點進行對比來完成人臉識別的過程,包含臉的輪廓、眉毛、眼睛、鼻子、嘴等部位的特征。
在利用YOLOv5檢測并框出人臉后,調用Face_Recognition庫中的Face_Landmarks對關鍵點進行定位,代碼如下所示:
face_landmarks_list = face_recognition.face_landmarks(img)
for word, face_landmarks in enumerate(face_landmarks_list): ?# 繪制面部輪廓點
for key, marks in face_landmarks.items():
for i in range(len(marks)):
point = marks[i]
cv2.circle(img, (point[0], point[1]), 2, (255, 125, 0), -1)
1.3 ?疲勞檢測的具體參數
使用YOLO及Face_Recognition對采集的圖像進行處理后,再對面部關鍵點的具體參數進行計算,并設置具體閾值,實現對駕駛員駕駛狀態的判定。針對駕駛員的疲勞狀態檢測,本算法通過以下2個方面進行[12]:
EAR(Eye Aspect Ratio)的檢測:通過計算眼部的距離得到EAR,EAR值隨著人眼開合的大小而改變,閉合時達到最小,算式如式(3)所示,其中X、Y表示眼部關鍵點:
(3)
MAR(Mouth Aspect Ratio)的檢測:通過計算嘴部的距離得到MAR,MAR值隨著嘴巴開合的大小發生改變,當嘴巴張開的時候,MAR會變大,算式如式(4)所示。其中X、Y表示嘴部關鍵點:
(4)
設定MAR和EAR的變化閾值,當變化超過該閾值,算法認為是疲勞駕駛,并發出警示,至此實現了整個疲勞檢測算法的流程。
2 ?準備工作及算法的實現
2.1 ?數據集準備
相對于YOLOv4算法網絡[13],YOLOv5使用PyTorch框架,對用戶非常友好,能夠方便地訓練自己的數據集,并通過數據加載器傳遞每一批訓練數據,同時增強訓練數據。數據加載器進行3種數據增強,包括縮放、色彩空間調整和馬賽克增強。使用公開的YawDD數據集及自采集數據集進行訓練,對獲得的數據集使用Labeling標注軟件進行標注,選用YOLO格式,生成.txt文件,將標注的圖片與標簽分別放至對應的文件夾中,具體分類及數量如表1所示,示例圖片如圖6所示。
2.2 ?模型的訓練與實現
實驗的硬件環境CPU為AMD Ryzen 7_4800U,在恒源云NVIDIA GeForce RTX 3090(24G)GPU上進行實驗。Python版本為Python 3.8,PyTorch版本為1.11.0,編程平臺為PyCharm及恒源云自帶的JupyterLab。
啟動云GPU后,將數據集上傳至JupyterLab指定路徑的文件夾中,對訓練的相關參數進行設定與修改,運行指令進行訓練。具體訓練參數:batch-size=16,epoches=200,使用模型給出的預先權重YOLOv5s.pt進行訓練。
YOLO算法網絡可以自主學習已進行標注的數據集,生成訓練權重,通過在檢測模塊中應用該權重,結合攝像機傳輸的圖像,對駕駛員的駕駛狀態進行實時檢測,并將識別結果實時顯示。YOLO在訓練后,除了權重,還能夠自動將結果數據進行可視化處理,得到直觀的準確度結果png圖像,方便與其他檢測模型的結果進行比較。
本實驗模型及其他模型的對比如表2所示[14],模型訓練結果如圖7所示。
由圖7可知,在訓練至200輪時,不論是Precision還是mAP等參數收斂至約90%,均達到了較高水準,識別效果優于其他網絡。示例測試結果如圖8所示。
2.3 ?模型測試
采用訓練出的last.pt權重進行檢測,攝像頭采集視頻的尺寸為640×640,YOLOv5直接調用視頻進行識別,視頻檢測時采樣速率為30 FPS,測試結果隨著測試者的狀態實時改變,在屏幕上顯示疲勞(tired)或正常(normal)的識別結果,截取識別結果如圖9及圖10所示。
2.4 ?結果分析
使用大小合適的數據集進行訓練后,將獲得的權重應用于該模型中,運行模型進行檢測。結果發現,該模型在照明較差、駕駛員姿態變化的情況下依然能夠進行高準確度的檢測,并能夠實時顯示駕駛狀態,及時給予駕駛員反饋。與前述通過對車輛行駛軌跡、方向盤轉角等特征分析進行疲勞狀態識別的系統相比,具有靈敏性強、準確度高、干擾更低等優點。
3 ?結 ?論
本系統基于YOLOv5算法網絡用于疲勞駕駛的檢測識別模塊,通過使用既定數據集進行訓練,使用獲得的高準確度權重進行疲勞狀態的檢測,并將該模塊與攝像機相結合,進行實時的駕駛員駕駛狀態的分析,設計并實現了一套疲勞駕駛檢測系統。經過檢測證明,此網絡改進訓練后能夠以較高準確率識別出駕駛員的駕駛狀態,并適當對駕駛員進行警示,降低由于駕駛員疲勞駕駛導致交通事故的可能性。本系統大大降低了疲勞駕駛的檢測難度,檢測更便捷,對保障交通安全及生命財產安全具有重要的現實意義。
值得考慮的是,本系統在無照明的夜間道路上,攝像機采集圖像的光線條件較差,對駕駛員狀態的檢測可能存在偏差,如何在無照明條件下準確識別駕駛員的駕駛狀態是后續研究的重點方向之一。
參考文獻:
[1] 李都厚,劉群,袁偉,等.疲勞駕駛與交通事故關系 [J].交通運輸工程學報,2010,10(2):104-109.
[2] 沙春發,李瑞,張明明.基于方向盤握力的疲勞駕駛檢測研究 [J].科學技術與工程,2016,16(30):299-304.
[3] 石曉玲,楊英倉.基于車輛行駛軌跡特征的駕駛人疲勞狀態識別技術研究 [J].中國新通信,2017,19(2):158-160.
[4] HORNG W B,CHEN C Y,CHANG Y,et al. Driver Fatigue Detection Based on Eye Tracking and Dynamic Template Matching [C]//Proceedings of the 2004 IEEE International Conference on Networking, Sensing &Control.Taipei:IEEE,2004:7-12.
[5] FAN X,YIN B C,SUN Y F. Yawning Detection for Monitoring Driver Fatigue [C]//2007 International Conference on Machine Learning and Cybernetics.Hong Kong:IEEE,2007,2:664-668.
[6] 徐征宇,朱宗曉,周康,等.基于深度學習目標檢測的可行駛區域分割 [J].現代信息科技,2020,4(23):106-108.
[7] 周偉鴻,朱思霖.基于深度學習技術的智慧考場方案的應用探究 [J].信息技術與信息化,2020(12):224-227.
[8] 郭智超,徐君明,劉愛東.基于嵌入式平臺與優化YOLOv3的航拍目標檢測方法 [J].兵工自動化,2022,41(3):10-15+20.
[9] 陸峰,劉華海,黃長纓,等.基于深度學習的目標檢測技術綜述 [J].計算機系統應用,2021,30(3):1-13.
[10] 張智堅,曹雪虹,焦良葆,等.基于改進YoloX的輸電通道工程車輛檢測識別 [J].計算機測量與控制,2022,30(9):67-73.
[11] 吳子強.基于改進YOLOv3的疲勞駕駛檢測算法的研究與應用 [D].南昌:南昌大學,2022.
[12] 王小榮,張益通,彭炫.基于人臉關鍵點檢測的車載疲勞駕駛系統研究 [J].無線互聯科技,2022,19(17):82-84.
[13] WANG Z J,WU Y M,YANG L C,et al. Fast Personal Protective Equipment Detection for Real Construction Sites Using Deep Learning Approaches [J/OL].Sensors,2021,21(10):(2021-05-17)[2023-03-25].https://doi.org/10.3390/s21103478.
[14] XING J J,FANG G X,ZHONG J P,et al. Application of Face Recognition Based on CNN in Fatigue Driving Detection [C]//Proceedings of the 2019 International Conference on Artificial Intelligence and Advanced Manufacturing.Dublin:Association for Computing Machinery,2019(56):1-5.
作者簡介:孫浩哲(2001—),男,漢族,山東諸城人,本科在讀,研究方向:通信與計算機視覺;陳紅昌(2001—),男,漢族,云南昆明人,本科在讀,研究方向:通信與計算機視覺;張言利(2003—),女,漢族,河南駐馬店人,本科在讀,研究方向:通信與計算機視覺;張喜偉(2001—),男,漢族,甘肅靜寧人,本科在讀,研究方向:通信與計算機視覺。