Advertisement

基于YOLOv8深度学习的智慧课堂学生注意力集中检测与语音提示系统

阅读量:

在教育技术发展进程中,在智能化和个性化的教学模式下逐步转型。学生注意力状态的调整对教学效果产生显著影响,在此基础上建立相应的监测机制显得尤为重要。为了更好地了解学生的专注度变化趋势,在本研究开发了一种基于YOLOv8深度学习算法的注意力检测与语音反馈系统,在实时追踪和分析学生课堂行为数据的基础上实现精准的教学干预措施

该系统基于Pyqt5框架构建了可视化展示模块,并能够对课堂中学生的注意力状态进行精确分类。主要分为"学生注意力集中"与"学生注意力分散"两种类型。系统首先利用YOLOv8算法进行行为目标检测,并提取关键特征信息;同时采用优化的卷积神经网络(CNN)架构来提升检测精度和稳定性。通过数据增强技术扩展训练数据集,并有效提升模型的泛化能力;确保模型在各种复杂场景下均能维持良好性能。

该系统采用PyQt5构建的友好界面设计,在实时监控学生注意力状态方面表现出色。并集成语音提示功能,在学生注意力分散时自动触发提醒。实验结果表明,在准确性与实时性方面该系统展现了明显优势。能够为教学过程提供有效的辅助支持,并推动教育智能化进程。

算法流程

Tipps:深入分析项目的算法流程,并系统梳理其技术实现的关键逻辑。从数据加载和预处理阶段入手,在核心算法的设计阶段及其优化过程中展开详细探讨;最后至结果展示环节,通过清晰结构和简洁语言全面呈现各项技术要素的表现形式及其内在关联

硬件环境

我们采用的是两种硬件平台配置方案进行系统调试与训练过程:(1)外星生物 Alienware M16笔记本电脑:

(2)惠普 HP暗影精灵10 台式机:

上面的硬件环境提供了足够的计算资源,能够支持大规模图像数据的训练和高效计算。GPU 的引入显著缩短了模型训练时间。
使用两种硬件平台进行调试和训练,能够更全面地验证系统的性能、适应性和稳定性。这种方法不仅提升了系统的鲁棒性和泛化能力,还能优化开发成本和效率,为实际应用场景的部署打下良好基础。

模型训练

Tipps:模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8是一款处于行业前沿水平(SOTA)的模型,在现有版本Yolo系列的基础上进行了更新与优化,并新增了功能与改进点(新增了功能与改进点),从而进一步提升了性能与灵活性(进一步提升了性能与灵活性),成为执行目标检测(执行目标检测)、图像分割(图像分割)、姿态估计(姿态估计)等任务的理想选择(理想选择)。其主要创新点包括一个全新的骨干网络(一个全新的骨干网络)、一个新的Ancher-Free检测头(一个新的Ancher-Free检测头)以及一个新的损失函数(一个新的损失函数),能够在多种硬件平台上运行(能够在多种硬件平台上运行)。

YOLOv8在Yolo系列中树立了新的标杆,在各项评估指标上均超越当前的对象检测与实例分割模型;它融合了这些模型的成功经验,在在此基础上实现了相应的优化,并且保留了简洁高效的特点

Yolov8模型网络结构图如下图所示:

2.数据集准备与训练

本研究采用了包含学生注意力的学生注意力数据集,并基于Labelimg标注工具对每张图像中的目标边界框(Bounding Box)及其类别进行了标注。在此数据集上,利用YOLOv8n模型进行了训练。随后对模型在验证集上的表现系统性地进行了全面的性能评估与对比分析。整个训练与评估流程包括以下步骤:数据准备、模型训练、模型评估阶段的具体实施细节如下:首先完成了数据预处理工作;接着对YOLOv8n模型进行参数优化;最后完成了模型测试工作并记录结果。本次标注的目标类别主要集中在学生注意力这一领域。所涉数据总计共有42589张图片资料来源分布情况如表1所示

训练数据集由29,810张图像组成,并用于实现模型的学习与优化目标。
验证数据集包含8,518张图片,并用于评估模型在未见过的数据上的性能表现。
测试数据集中共有4,261张图片,并被用来最终检验模型在泛化方面的能力。

该图表呈现了训练集、验证集和测试集的图像数量分布情况。

部分数据集图像如下图所示:

部分标注如下图所示:

这种数据分布方式确保了数据在模型训练、验证和测试阶段的均衡性,并且为YOLOv8n模型的开发与性能评估提供了可靠的基础支持。

图片数据的存储格式为上述所述,在项目根目录创建datasets文件夹,并将待检测的图像按照训练集与验证集进行分类,并存放在datasets文件夹内。

接下来需要创建一个data.yaml文件,并详细记录下训练所需的数据路径以及模型识别的关键分类类别。YOLOv8系统在执行模型训练的过程中能够自动读取该配置文件中的相关信息,并据此完成相应的模型识别任务。数据.yaml的具体内容如下:

这个文件指定了在模型训练与验证过程中使用的数据集路径,并且此外还说明了该模型将被识别的目标类别。

在数据准备完成之后,在运行train.py文件时执行模型训练过程,在这一过程中会设置epochs参数来控制模型迭代次数以及batch参数来设定每一批次的数据量(通常会根据可用内存容量进行自动调节,并规定最低设置为1)

CPU/GPU训练代码如下:

导入用于训练的预 trained YOLOv8 模型 yolov8n.pt

3.YOLOv8模型训练结果与性能评估

在深度学习中,默认的做法是通过分析损失函数下降的趋势曲线来评估模型训练效果。YOLOv8模型的训练过程主要围绕定位、分类以及动态特征三个方面分别引入对应的损失函数进行优化;优化这些损失对于提升目标检测性能至关重要。

损失函数作用说明:
(1)定位损失 (box_loss):衡量预测边界框与真实边界框之间的差异程度(GIoU),值越小则定位精度越高。
(2)分类损失 (cls_loss):用于判断锚框所对应的类别标签是否正确,值越小则分类准确性越高。
(3)动态特征损失 (dfl_loss):DFL损失函数用于估计预测边界框与真实目标边界框之间的距离,并结合多尺度特征图进行优化,从而显著提升目标检测的定位精度。

训练和验证结果文件存储:

训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1)损失曲线图
(2)性能评估指标曲线图
(3)错误分类表格
(4)Precision-Recall (P-R) 曲线

损失曲线(Loss Curve)和性能指标分析:

训练指标:
train/box_loss:
该指标衡量的是预测的目标边界框与真实边界框之间的差异程度。
随着训练过程的推进,该损失指标持续下降的趋势表明模型在不断优化其对目标边界的预测精度。

训练中的分类损失项:
作用:该术语表示预测类别与真实类别之间的差异。
变化趋势显示该值持续减少。

train/dfl_loss:
目的:分布融合损失(Distribution Focal Loss),以提升边界框检测的准确性为目标。
趋势:随着训练过程的发展,损失值持续下降的趋势表明模型在物体特征检测方面表现出持续的进步。

验证指标:
val/box_loss:
含义:在验证集上计算的边界框回归损失指标,在测试过程中表现与训练阶段的 box_loss 相似度较高,并且该指标用于评估模型在未知数据上的泛化能力表现。
趋势:随着模型不断优化,在验证集上的 val/box_loss 值持续下降的趋势表明模型具备较好的泛化能力,并未表现出对训练数据过度拟合的现象。

该指标用于评估模型在验证集上的分类性能表现。
具体而言, val/cls_loss 指标持续下降,这表明模型在验证阶段表现出良好的收敛性。
随着分类损失逐步下降,模型在类别识别任务中的表现更加稳定。

val/dfl_loss:
定义:验证集上的分布融合损失。
趋势:该指标持续下降表明模型在验证集上对物体特征的预测能力不断提升。经过持续训练后,在验证集上对物体特征的预测精度得以显著提升,并最终稳定于较高水平。

性能指标:
metrics/precision(B)
定义为预测为正类样本中的真实正类率。
其趋势表明模型在分类任务中具有较高的判别能力。

参数/recall(B):
定义:在训练过程中被评估的召回率指标(Recall),其数值代表了在所有实际存在的目标中被成功识别出来的比例。
变化趋势:该指标持续上升表明模型识别能力不断增强,在捕捉真实对象方面表现更为卓越;同时伴随这一变化的是漏检数量的减少。

在验证集上计算得到的mAP@0.5指标即IoU阈值为0.5时的平均精度数值。
该指标数值持续上升表明模型在目标检测任务中的整体性能不断提升其检测效果不断改善。

验证集上的mAP@0.5-0.95(B),体现了多个IoU阈值下的平均精度指标。
随着训练进程的推进,在多个IoU阈值下的mAP@0.5-0.95稳步提升。
这一现象表明模型不仅在较低IoU标准下的表现优异,
而且在更为严格的评估条件下也能持续优化性能。

这些图表呈现了一个训练优秀模型的实例,在模型训练过程中,其预测准确度逐步提升,并且在验证集上的性能不断改善。

Precision-Recall(P-R)曲线分析:

曲线说明:
蓝色曲线
表示“专注”类,mAP值为0.981。

橙色曲线
表示“分心”类,mAP值为0.989。

蓝色粗线
表示所有类别的mAP值为0.985,综合了两个类的检测结果。

该模型在专注类与分心类的检测任务中均表现出色,在专注类任务上取得了0.981的平均精度,在分心类任务上则达到了0.989的平均精度;综合考虑两项指标后得到的整体平均精度(mAP)为0.985

该分析通过混淆矩阵(Confusion Matrix)进行评估。该分析采用混淆矩阵作为核心工具来评估分类模型的表现。它展示了模型在每个类别上的预测结果与实际结果之间的对比情况。

结论:
(1)准确率:该模型在"专注"类别上的表现尤为出色,在该类别上的识别效率显著高于其他类别。其主要优势体现在对"专注"类别的精准识别上,在此类别中仅有极少数样本会被误判为"分心"或"背景"类型。
(2)"分心"类别:尽管该模型在多数情况下能够正确识别出"分心"类别的样本并给予相应的标记标签,在少部分边缘案例中仍会出现误判现象。具体而言,在处理一些复杂场景时可能会出现将原本应归类的样本误判为其他类型的情况。
(3)背景类别:相对而言,在处理'背景'类别的识别任务时该模型的表现尚有提升空间,在此领域中的识别误差率较高,并且对于将'背景'归类为'专注'或'分心'这类情况的处理效果有待优化

4.检测结果识别

模型训练结束后, 我们能够获得一个最优的训练成果模型best.pt文件, 位于runs/train/weights目录中. 该文件可用于后续推理检测工作的开展. imgTest.py 图片检测代码如下:

加载所需库:
(1)通过from ultralytics import YOLO导入YOLO模型类,并用于进行目标检测。
(2)通过import cv2导入OpenCV库,并用于图像处理和显示效果。

请在Markdown格式中输出以下内容:
加载模型路径和图片路径:
(1)path = ‘models/best.pt’:指定预训练模型的路径,并将该模型部署于目标检测任务中。
(2)img_path = “TestFiles/imagetest.jpg”:此参数指定了待检测的图片文件的位置。

加载预训练模型:
(1)基于给定路径加载YOLO模型,并将目标检测任务设为目标检测 (detect)。
(2)借助conf参数设定目标检测的目标置信度阈值;同时借助iou参数配置非极大值抑制算法的交并比阈值。

图像检测:
(1)results = model(img\_path):针对输入的图片进行目标识别操作。

展示检测结果:
(1)res = results[0].plot():将捕获到的检测结果绘制于图像中。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库向屏幕上显示名为“YOLOv8 Detection”的图像窗口,并传递该图像数据给用户查看。
(3)cv2.waitKey(0):等待键盘输入以关闭结果显示窗口,并在此过程中执行程序后续操作。

执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

该段信息是通过YOLOv8模型在名为'imagetest.jpg'的图像上执行检测操作所得到的结论。

图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为640×640像素。

检测结果:
(1)1 个“Distracted”(分心)行为

处理速度:
(1)预处理时间: 4.0 毫秒
(2)推理时间: 6.5 毫秒
(3)后处理时间: 86.9 毫秒

总结:

运行效果

– 运行 MainProgram.py

主要功能:
(1)具备应用于实际场景中的注意力集中检测能力;
(2)不仅支持图片、视频以及摄像头进行检测工作,
还支持批量处理图片的检测;
(3)设计的界面能够实时显示包括目标位置在内的一系列信息:
如目标总数、置信度及用时数据;
(4)系统不仅能够对图片进行检测结果保存工作,
还能够对视频数据进行相应的保存操作

2.检测参数设置:

(1)信心水平界限:目前设定在0.25水平,在此系统中只有当目标信心水平超过25%时才被纳入输出范围。信心水平越高,则表明模型对于检测结果的信任程度也越高。(2)交并率界限:现设定在0.70水平上,在此系统中只有当交并率超过70%时才被视为有效的检测框。交并率是指检测框与真实框重叠区域所占的比例,在衡量两个框相似程度方面具有重要价值;数值越大则代表重叠程度越高

这两个参数常被用来作为目标检测系统中的重要指标;通过调整这些参数能够优化模型的检测精度以及减少误检率。

声音通知系统(Voice Reminder):
(1)异常情况声音通知:当学生注意力分散时会自动发出提示。
(2)紧急情况提示:当发生紧急情况时系统会立即发出警报并暂停当前操作。

这张图表呈现了基于YOLOv8模型的目标检测系统的检测结果界面。详细说明各字段的具体含义。

(1)这表明模型完成整个检测过程所需时间为0.058秒。
(2)这体现了模型的实时性与极快的检测速度。

目标数目(Number of objects detected):
(1)检测到的目标数为1,则表示这是第一个被检测到的目标。

这个系统提供了一个配置框用于设置目标分类。(1)这里有一个配置框。(2)在默认状态下,默认选项被设置为"全部"选项卡,该选项卡会呈现所有被检测的目标数据.

3.检测结果说明:

该图表展示了基于YOLOv8模型的目标检测系统的检测结果界面。具体而言,每个字段都具有特定的含义.

目标选择:
(1)提供选择检测目标的选项,这里显示为全部,说明当前显示的是所有检测到的目标。

结果(Result): 学生注意力难以集中被识别出,并且系统正在实时高亮显示这一现象。

(1)该模型识别出的目标属于“学生注意力分散”类别的概率为94.23%。
(2)置信度则反映了模型对该检测结果的信任程度。

目标位置(Object location):
(1)xmin=26,ymin=58:描述了目标区域在图像中的具体位置坐标点(xmin,ymin)。
(2)xmax=175,ymax=271:确定了边界的位置坐标点(xmax,ymax)。

这些位置信息代表了图像中的目标区域范围,在此范围内确定了被检测出的学生注意力分散的位置区域。

此图表展示了检测系统所获得的具体数据:涉及目标类型分类、识别信心水平以及目标在图像中的精确定位坐标。此类界面一般用以呈现模型对图像中目标的定位与识别结果,并提供相应的位置数据及信心评估。

3.图片检测说明

(1)学生注意力分

(2)学生注意力集中

操作演示如下:
(1)选择目标下拉框后,则可以选择指定目标的相关结果信息进行显示。
(2)选择保存按钮,则可实现检测结果的保存功能,并将存储路径设置为位于save_data目录中。

系统解析出图片中的注意力状态,并生成相应的检测结果

4.视频检测说明

单击视频按钮后,在线选择待检测的视频片段,则系统会立即展示分析结果。再次单击窗口右上角关闭按钮即可退出当前窗口。

单击保存按钮后,在线处理后的分析结果将被存储至指定位置:位于save_data文件夹中存放的所有数据文件都将包含完整的分析报告内容。

结果显示为:该系统能够实时对视频内容进行分析,并识别出注意力集中在某处的结果。通过表格的形式展示了视频中多个检测点及其置信度和位置信息。

此界面可呈现该系统在处理视频帧时的多目标检测功能。该系统能准确识别注意力集中,并能提供详细的结果与置信度评分。

5.摄像头检测说明

按下启动摄像头按钮,则系统会启动摄像头功能;即可实现摄像头开启;即可执行实时检测流程;再次按下启动按钮,则可关闭摄像头设备。

系统通过摄像头实现了持续性的数据采集与分析过程,在此过程中识别出被观察者的注意力状态并实时反馈相关数据。动态呈现摄像头的画面内容,并在图像中标注行为发生的具体位置。对于每帧画面的数据结果进行了详细的记录与存储。

6.保存图片与视频检测说明

点击完成后执行保存操作时,默认会对所选项目中的图片(包括批量处理的图片)以及视频内容进行完整的检测并完成存储操作。
系统会在save_data文件夹中自动生成对应的结果数据包。
以下展示了所有保存下来的检测结果文件信息:

(1)图片保存

(2)视频保存

– 运行 train.py
1.训练参数设置

导入名为 yolov8n.pt 的预训练YOLOv8模型, 该文件是预先训练好的模型权重.

尽管大多数深度学习任务中使用GPU时通常能够获得更快的训练速度。
然而,在某些特定情况下(如硬件限制或其他因素存在时),用户可能需要在CPU上进行训练。

一般情况下,在GPU上训练深度学习模型比在CPU上要快得多;尤其是作为计算密集型的一种代表——YOLOv8——它需要更多的时间进行训练。

2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。

训练总时长:
(1)经过了150轮的持续训练后,《算法导论》课程内容全部完成并可顺利通过考试。
(2)在本次课程设计中采用了高性能GPU架构方案。
(3)凭借先进的算法优化技术和专业的技术支持,《深度学习实战》书籍内容质量得到了显著提升。

验证结果:
(1)mAP50: 98.5%
(2)mAP50-95: 87.5%

速度:
(1)预处理所需时间为0.1ms
(2)推理所需时间为0.7ms
(3)后处理所需时间为0.5ms
(4)可以看出该模型在推理效率方面表现优异,并且适用于实时检测场景

结果被保存:(1)记录被存储至 runs\detect\train_v8 目录中。

完成情况:(1)Process completed with exit code 0表明整个验证流程运行成功且无错误发生。

在经过150轮系统的训练后, 该模型具备极佳的准确性, 在检测学生的行为方面表现出色. 其中, 学生表现出注意力集中状态或注意力分散状态的行为特征均被有效识别. 此外, 该模型在测试集上的平均精度值 (mAP) 和精确率值 (Precision) 均维持在较高水平.

全部评论 (0)

还没有任何评论哟~