孙浩哲 张言利 陈红昌 张喜伟
摘 要:根据公安部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—),男,汉族,甘肃静宁人,本科在读,研究方向:通信与计算机视觉。