目录

前言

设计思路

一、课题背景与意义

二、算法理论原理

2.1 坐标注意力机制

2.2 BiFPN

三、检测的实现

3.1 数据集

3.2 实验环境搭建

3.3 实验及结果分析

最后


前言

       📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

         选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

        大家好,这里是海浪学长毕设专题,本次分享的课题是

        🎯基于深度学习的列车司机疲劳驾驶检测算法系统

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO 人工智能 机器学习

设计思路

一、课题背景与意义

       疲劳驾驶是诱发事故发生的一个重要因素,因此如何准确地识别司机的疲劳状态并及时发出警告已经成为交通运输业必须面临的挑战。当列车司机感到疲劳时,他们会表现出不同的疲劳状态和行为特征,因此本文通过分析驾驶员面部特征设计出一套疲劳驾驶检测系统。当系统检测出驾驶员疲劳或有异常行为时会出现警示,确保驾驶员专心,从而避免交通事故发生。

二、算法理论原理

2.1 坐标注意力机制

       坐标注意力机制(Coordinate Attention)是一种在注意力机制的基础上进行改进的模块,通过引进坐标注意力CA模块,目的是可以将横向和纵向的位置信息编码到不同渠道关注中,使得移动网络能够关注大范围的位置信息又不会带来过多的计算量,从而提高原始模型的表达能力。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

       通过将YOLOv5的骨干网络结构中的第6层C3模块引入注意力机制模块:

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

2.2 BiFPN

       随着图像的特征点信息越来越丰富,但主要的关键点信息逐渐减少。而识别人脸,受环境因素影响很大,包括光照、角度、远近拍摄方向等,对小目标检测非常不利。入BiFPN网络结构,BiFPN结构是一种基于双向特征金字塔网络的结构,它可以更好地融不同尺度的特征图。与PANet结构不同,BiFPN结构采用了自适应的特征融合方式,可以根据不同的特征图自动调整权重,从而提高检测精度。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

       在YOLOv5中,将特征输入检测层来预测物体类别和位置信息之前,需要先在Neck端对主干网络提取的特征进行充分融合。所以Neck端的特征融合效果对于检测结果非常重要。将BiFPN引入YOLOv5的Neck网络中,以提升模型的性能。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

相关代码:

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, GlobalAveragePooling2D, Dense, Reshape, Multiply

# 定义位置注意力模块
def position_attention(input_tensor):
    # 获取输入张量的通道数
    channels = input_tensor.shape[-1]
    
    # 全局平均池化
    squeeze = GlobalAveragePooling2D()(input_tensor)
    
    # 添加全连接层
    excitation = Dense(channels // 16, activation='relu')(squeeze)
    excitation = Dense(channels, activation='sigmoid')(excitation)
    
    # 重塑张量形状以便与输入张量相乘
    excitation = Reshape((1, 1, channels))(excitation)
    
    # 通过乘法将位置注意力应用于输入张量
    output_tensor = Multiply()([input_tensor, excitation])
    
    return output_tensor

# 创建模型
def create_model():
    model = tf.keras.Sequential()
    
    # 添加卷积层
    model.add(Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=(224, 224, 3)))
    
    # 使用位置注意力模块
    model.add(position_attention(model.layers[-1].output))
    
    # 添加更多的卷积层和其他层
    
    return model

# 测试模型
model = create_model()
model.summary()

三、检测的实现

3.1 数据集

       采用自制数据集,该数据集涵盖了来自各种场景,包括户外、室内、自然光和人工光等图像。数据集中的人脸实例都显示一个边界框和五个特征点(左/右眼、鼻子、左/右嘴角)。数据集有61个不同的类别,针对每个类别随机分配实验数据集,其中50%用于测试集,40%用于训练集,10%用于验证集,并根据人脸大小分成三类具有简单、中等和复杂背景的图像。人脸分辨率分为50×50,30×30,10×10三个不同大小的像素。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

       数据集的数据分布显示了一种不平衡状态,需要将特定的类别重新集成。图像灰度化将复杂的颜色信息转换成简单的黑白信息。灰度化图像将原本仅包含亮度信息的图像转换为更加清晰、更加精细的模式,这样不仅能够大大降低图像处理的复杂性,而且还能够极大地改善图像的质量。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

3.2 实验环境搭建

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

3.3 实验及结果分析

       改进后的YOLOv5可以过滤其他级别的特征,并将有用的信息保持在该级别,以提高对微小人脸的检测精度。然后,采用BiFPN特征融合网络,使得网络可以在不同层次之间进行信息交流。这种双向连接可以帮助网络更好地捕捉不同尺度的特征,从而提高网络的性能。利用注意力机制结构,可以使模型更好地捕捉图像中的关键信息,提高模型的准确性。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

       YOLOv5通过采用了BiFPN特征融合方法来改进原始的Neck网络结构,从而改善PANet对多尺度特征融合的不良影响。引入注意力机制CA模块后,mAP的表现显著提升,明显高于其他三种目标检测算法,这表明模型具有更强的非线性表达能力,可以更有效地处理复杂的变换,从而更好地捕捉更多复杂的特征输入。证明了改进后YOLOv5算法的正确性和有效性。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO python 卷积神经网络 人工智能 机器学习

       训练程序完成后,我们可以在weights文件夹下找到新生成best.pt权重文件,它代表最好的权重。我们可以在detect.py中更改对应的权重进行测试,输入带有目标动作的测试图像,置信度均达到了0.8以上,符合我们的预期。当视频中人脸出现打哈欠、眨眼动作时,会根据单位时间内闭眼帧数、打哈欠的次数,综合得出当前PERCLOS值,与设定的阈值进行比较,在右方输出红色的“疲劳”警示。

毕业设计-基于深度学习的列车司机疲劳驾驶检测算法系统 YOLO 人工智能 机器学习

相关代码如下:

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# 加载和预处理数据集
def load_dataset():
    # TODO: 加载驾驶人脸图像数据集,并进行预处理(如图像大小调整、归一化等)
    pass

# 构建模型
def build_model():
    model = tf.keras.Sequential()
    
    # TODO: 添加卷积层、池化层、全连接层等构建深度学习模型的代码
    # 根据需要选择合适的模型架构
    
    return model

# 进行模型训练
def train_model(model, X_train, y_train):
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    model.fit(X_train, y_train, epochs=10, batch_size=32)
    
# 进行模型评估
def evaluate_model(model, X_test, y_test):
    loss, accuracy = model.evaluate(X_test, y_test)
    print("Test Loss:", loss)
    print("Test Accuracy:", accuracy)

创作不易,欢迎点赞、关注、收藏。

毕设帮助,疑难解答,欢迎打扰!

最后

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐