Advertisement

基于YOLOv8深度学习的智慧考场考试作弊行为自动检测与语音报警系统

阅读量:

随着教育智能化进程的不断推进

系统架构主要由以下几个核心组件构成:

  1. 数据收集与前处理过程:通过模拟真实监考环境构建覆盖多种作弊类型的数据样本集合;
  2. 深度学习模型优化:结合YOLOv8算法进行深度学习模型的训练工作;
  3. 实时监控分析模块:通过高效的计算机制,在线解析 streaming 视频数据以识别异常行为模式;
  4. 自动语音提醒系统:向监考员发出警报指令并建议采取应对策略。实验结果显示该方案展现出良好的稳定性和泛化能力,并保证了较高的在线处理能力和用户体验。

本研究基于智慧考场监控系统构建了新的方法论框架,并提出了一种创新性的解决方案以优化系统性能。该系统能够明显提高监考效率,并通过动态评估机制确保了考试过程的公平公正。此外,在实际应用中展现出极广的应用前景,并获得了良好的社会认可度。

算法流程

Tipps:详细分析项目的算法流程,并系统性地探讨其核心技术实现逻辑。涵盖数据加载与预处理环节一直到核心算法的设计和优化阶段,在结果可视化展示方面也进行了详尽的规划,并深入揭示技术背后的原理以及实现思路。

项目数据

Tipps:为了收集各类考试作弊相关图片,并同时利用Labelimg对每张图片进行精确标注。具体包括:1)使用手机作弊;2)传递作弊材料;3)考试直接抄袭;4)偷看他人试卷;5)低头查看答案;6)无任何违规行为。

目标检测标注工具
(1)LabelImg: 一个开源的图像标注工具,默认支持分类任务与目标检测功能。该工具采用Python编写并基于Qt构建图形界面,在操作上较为简便且易于上手(尽管提供英文界面)。其注释数据采用PASCAL VOC格式存储为XML文件(该格式同样适用于ImageNet项目)。此外 LabelImg 还支持COCO数据集格式。(2)在CMD中安装LabelImg可通过以下命令完成:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

打开后,我们自己设置一下

在View中勾选Auto Save mode

接下来我们打开需要标注的图片文件夹

首先,在上图所示的"Change Save Dir"位置进行配置参数设置(上图中的Change Save Dir)
接下来就开始标注流程:启动标注器,在界面中选择图片文件夹(上图中的Change Save Dir)
在界面上画出目标区域并为其添加标签(上图中的Change Save Dir)
切换到下一张图片继续重复上述操作

Labelimg的快捷键

(3)数据准备
在此处,建议创建一个名为'data'的目录(这是一般做法),其中包含一个名为'images'的子目录用于存储待标注的照片;接着在这个'data'目录下再建立一个名为'labels'的数据文件来存储分类标签;最后,在这个'txt'中记录需要分类的所有类别名称。

data的目录组织如下:

首先在images这个文件夹放置待标注的图片。
生成文件如下:

“classes.txt”定义了你的 YOLO 标签所引用的类名列表。

(4)YOLO模式创建标签的样式

存储标签信息的文件其名称与图片名一致其内容由N行×5列的数据构成

注意:这里的中心点坐标、宽和高都是相对数据!!!

用于存储标签类别的文件名设定为classes.txt(固定不变),用作存储创建的标签类别

完成后可进行后续的yolo训练方面的操作。

硬件环境

我们使用的是两种硬件平台配置进行系统调试和训练:
(1)外星人 Alienware M16笔记本电脑:

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

该硬件配置为模型提供了充足的计算资源支持大规模图像数据集的训练与高效运算。GPU设备的应用大幅缩短了模型训练所需时间。通过两种不同的硬件平台进行调试与训练操作能够更加全面地评估系统的关键性能参数、适应性及稳定性。这种方法显著提升了系统的鲁棒性、泛化能力和开发成本效率,并为实际部署场景奠定了坚实的技术基础。

模型训练

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

1.YOLOv8的基本原理

YOLOv8是一款先进的目标检测模型,在Yolo系列现有技术基础上进行了创新性改造,并引入了全新的架构设计与优化算法,在多端设备上实现了高效运行与精准识别效果的显著提升。该模型通过整合改进后的主干网络结构、创新性的检测头结构以及新型损失函数设计等技术手段,在通用计算资源至高性能GPU等多种硬件平台中展现出卓越的应用价值

YOLOv8引领了新的技术浪潮,在各项关键指标上均超过现有的物体检测与实例分割技术,并融合创新设计思路从多个主流方向进行优化提升。它实现了对基础架构的重大优化升级,并确保在功能简洁的同时提升了运行效率。

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

2.数据集准备与训练

本研究采用了包含涉及考试作弊行为的数据集,并借助Labelimg标注工具对每张图像中的目标边界框(Bounding Box)及其类别进行了标注。在此数据集中,采用YOLOv8n模型进行了训练。随后,在验证集中系统对其表现进行了全面的性能评估和详细对比分析,并将整个流程划分为三个关键阶段:数据准备阶段、模型训练阶段以及模型评估阶段。研究结果表明,在涉及考试作弊的行为类别上取得了显著成效,并明确指出该数据集中总计包含了10918张图像的具体分类分布情况如下

训练集:包含7640张图像的数据样本用于模型训练与参数优化。验证集:共计2184张图像的数据样本被用来检验模型对新数据的适应能力以防止过拟合问题的发生。测试集:共有1094张图像的数据样本经过系统检测后将被用来进行全面检验以确保模型具有良好的泛化性能。

以下统计图表详细描述了训练数据集、验证数据集以及测试数据集中图像的数量分布情况:

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

部分标注如下图所示:

该类数据分布策略通过科学的设计实现了各类样本在不同训练阶段的合理分配,在训练、验证以及测试阶段均能维持良好的平衡状态。基于此方法构建的YOLOv8n模型架构不仅具备高效的推理性能,在性能评估方面也展现了显著的优势。

图片数据应按照指定存储格式组织,在项目根目录中创建一个新的 datasets 子文件夹,并将待检测的图像按照训练集和验证集进行分类,并将其存放在 datasets 子文件夹中。

随后需要用一个data.yaml文件来配置训练数据的相关信息以及模型需要检测的目标类别。YOLOv8在开展模型训练的过程中会自动调用该文件中的参数信息,并据此完成模型的训练与验证工作。
data.yaml的具体内容包括:

该文件明确了用于模型训练与验证的数据集路径,并指定了将被模型检测的目标类别。

在完成数据准备之后, 通过运行train.py文件来执行模型训练. 其中, epochs参数用于调节模型训练的迭代次数, batch参数则用于控制模型训练的批量规模(并根据内存容量设定最小值为1).

CPU/GPU训练代码如下:

导入名为yolov8n.pt的预训练YOLOv8模型文件,并通过调用相关接口完成模型参数加载

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

在深度学习的阶段中,在线分析模型训练过程中的关键指标——损失函数下降曲线——为我们提供了重要的观察依据。YOLOv8模型的主要训练内容包括定位损失(box_loss)、分类损失(cls_loss)以及动态特征损失(dfl_loss)。这些任务的优化工作对提升目标检测性能具有重要意义。

损失函数作用说明:
(1)定位损失 (box_loss):代表预测边界框与真实边界框之间的差距(GIoU指标),数值越小则表明定位精度越高。
(2)分类损失 (cls_loss):用于评估锚框所对应的目标类别标签匹配程度,在结果越小时反映出分类准确性越高。
(3)动态特征损失 (dfl_loss):通过DFLLoss算法计算预测边界框与目标边界框间的距离关系,并在不同尺度特征图中进行优化融合处理,从而显著提升目标检测模型的整体定位精度。

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

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

(1)损失函数变化趋势图
(2)评估指标曲线图(mAP, precision, recall)
(3)分类结果矩阵
(4)(P-R) 评估曲线

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

训练指标如下:
train/box_loss:
具体来说, 该指标衡量的是预测的目标边界框与真实边界框之间的差异程度。
从起始值2.5开始逐步递减, 最终趋于稳定在约1.1附近, 这表明模型对目标边界框的预测能力逐渐增强。

loss指标:
定义:该指标用于衡量预测结果与真实标签之间的差异程度。
变化趋势:从初始值约为1.5的状态一路降至接近0.5的状态,并且整体呈现出稳定的下降态势。

dfl_loss在训练过程中发挥着重要作用:

  • 作用:它是提升边界框定位精度的关键组件。
  • 变化趋势:该指标从初始值1.8降至最终值1.1, 表明模型在目标框检测方面的能力得到了显著提升。

验证指标:
val/box_loss:
含义:基于验证集的边界框回归损失,在测试过程中与训练阶段的 box_loss 相似,并用于评估模型在未见数据上的泛化能力。
趋势:该指标从初始值 2.0 开始下降,在测试阶段稳定降至约 1.1 水平,并呈现出与训练阶段一致的趋势。

val/cls_loss:
作用:测试集上的分类损失与训练阶段表现出的一致性较高。
趋势:从约1.0逐步降低至大约一半(接近0.5),同步减少,并表明模型在测试数据上的分类性能不断增强。

val/dfl_loss:
定义:基于目标检测的任务中的数据集上进行的分布聚合损失计算方法。
数值变化:该指标从初始值1.8降至约1.1,在测试过程中表现出较为稳定的性能特征。

性能指标:
metrics/precision(B):
定义:在训练过程中用于衡量模型表现的指标。
具体来说,在分类任务中该指标表示在预测为正类的所有样本中实际确实属于正类的比例。
变化趋势表明随着训练轮数增加趋于稳定,并最终达到接近1.0的水平。这表明模型对正类的分类能力得到了显著提升。

metrics/recall(B):
含义:召回率指标衡量了在训练过程中所有真实目标中被正确识别的比例。
趋势:随着轮次的推进而稳步提升,并逐渐趋于稳定状态,在最终达到或接近1.0的水平之前持续增长。

metrics/mAP50(B):
定义:基于验证集计算得出的mAP@0.5指标(平均检测精度),其中mAP@0.5表示IoU阈值为0.5时的平均精度数值。
趋势:随着训练轮次的增加而迅速提升,并逐渐趋于稳定状态;最终达到接近1.0的程度(即最高水平),这表明该模型在目标检测任务中表现出较强的检测性能能力

metrics/mAP50-95(B):
定义:验证集上的 mAP@0.5-0.95 是一个用于衡量模型性能的关键指标;它体现的是模型在多个不同IoU(交并比)阈值下的平均精度表现;该指标通过计算不同IoU范围内的准确率并取其平均值得出;趋势分析显示,在经过多轮训练后该指标稳步提升,并最终趋于稳定状态;经过测试发现其最终达到约75%左右水平;这一结果表明模型在面对严格IoU条件下仍能保持较高的识别能力

总结:
(1)训练与验证损失: 损失指标(box_loss, cls_loss, dfl_loss)均呈下降趋势,训练和验证集表现一致,表明模型收敛良好。
(2)精度与召回率: 精度与召回率逐渐上升并接近1.0,显示模型分类和检测性能出色。
(3)mAP指标: mAP50接近1.0,mAP50-95接近0.75,表明模型在不同IoU阈值下均表现良好。

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

曲线说明:
浅蓝色线条:
类别:CellPhone
平均精度(AP):0.958

橙色线条:
类别:GivingCheats
平均精度(AP):0.985

绿色线条:
类别:Cheating
平均精度(AP):0.963

红色线条:
类别:LookingOver
平均精度(AP):0.986

紫色线条:
类别:LookingDown
平均精度(AP):0.981

棕色线条:
类别:NotCheating
平均精度(AP):0.977

蓝色粗线:
表示所有类别的整体性能。
均值平均精度(mAP@0.5):0.975

模型在各分类任务中均表现优异(mAP@0.5=0.975),其中LookingOver与GivingCheats任务达到最佳水平,而CellPhone任务表现稍低但依然出色。

混淆矩阵 (Confusion Matrix) 作为一种关键的评估工具,在分类模型性能分析中发挥着重要作用。该矩阵通过对比模型在每个类别上的预测结果与实际结果之间的差异来衡量分类性能。

结论:
该模型整体上表现出色,在NotCheating与Cheating等主要类别上的分类准确率均较高。应着重解决LookingDown与Cheating类别间的误分问题,通过数据增强以及模型优化手段来提升区分度。

4.检测结果识别

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

加载所需的库模块

加载模型路径和图片路径:
(1)path = ‘models/best.pt’:指定预训练模型存放的位置。
(2)img_path = “TestFiles/imagetest.jpg”:指定用于目标检测的图片文件位置。

加载预训练模型:
(1)根据指定路径加载YOLO模型,并将检测任务设为目标检测 (detect)。
(2)在配置目标检测时设定置信度阈值,在配置非极大值抑制(NMS)过程中设定交并比(IoU)阈值。

进行图片检测:
(1)results = model(img_path):针对指定的图片进行目标检测运算,在此过程中将返回一个包含检测结果的$variables。

(1)res = results[0].plot():呈现检测结果至图像中。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库展示处理后的图像。
(3)cv2.waitKey(0):暂停并等待用户按下任意键以退出程序

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

此段输出基于YOLOv8模型对图片"imagetest.jpg"进行检测,并包含具体信息如下

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

检测结果:
(1)1 个 CellPhone(手机)
(2)1 个 LookingDown(低头)

处理速度:
(1)预处理时间: 4.6 毫秒
(2)推理时间: 5.0 毫秒
(3)后处理时间: 66.4 毫秒

总结:YOLOv8模型在图像处理中通过精准识别CellPhone和LookingDown目标展现了其卓越的表现,并且能够支持高效的推理能力和精确的识别能力。

运行效果

– 运行 MainProgram.py

主要功能:
(1)该系统可实时识别目标图片中的考试作弊行为;
(2)该系统支持通过摄像头、视频文件及图像文件进行检测,并且能够批量处理图像文件;
(3)操作界面实时呈现目标位置坐标、目标总数、检测置信度以及完成时间等关键数据信息;
(4)该系统能够将检测结果保存为图像或视频文件

2.检测结果说明:

(1)置信度阈值:当前设定为0.25。
(2)交并比阈值:目前设定为0.70。
(3)该方法通过使用IoU评估检测框与真实框之间的相似程度。
(4)基于IoU计算两个框重叠区域的比例。

这两个重要参数常被用来于目标检测系统中,在进行调节时会对其模型的检测精确度以及误报率产生显著影响。

(1)该模型完成检测所需时间为0.145秒。
(2)这一结果体现了模型的实时性,并且检测速度极快。

目标数目(Number of objects detected):
(1)检测到的目标数量等于2;表示这是本次检测过程中第一个被检测到的目标。

该用户可通过此下拉菜单设定所需目标类型

语音提醒(Voice Reminder):
本系统的语音提醒功能旨在提供便捷的监督手段。(此类情况须引起高度重视,请监考老师予以特别关注!)

目标检测类型:

当前选择的结果是 “传递作弊材料”,表明该系统正在对检测到的“GivingCheats”内容进行高亮显示。

该模型对被检测的目标属于‘病床空闲’类别表现出90.98%的置信度。
高置信度表明模型对该检测结果越倾向于认为其正确性。

目标位置(Object location):
(1)其左上点的坐标值为(xmin, ymin),用于表示目标区域在图像中的位置信息。
(2)其右下方的坐标值为(xmax, ymax),用于确定目标区域的具体范围边界。

这些坐标值确定了图像中目标区域的范围,并明确了检测到的"传递作弊材料"所处的位置

这张图呈现了考试作弊行为的一次检测记录。该记录涵盖了各项参数信息如测试时间、检出类型、各行为表现概率及目标定位坐标等细节数据。通过该界面用户可直观观察并深入分析检出数据从而显著提高考试作弊行为检测效率水平。

3.图片检测说明

(1)传递作弊材料

(2)低头作弊查看

(3)考试直接作弊

(4)使用手机作弊

(5)偷看他人试卷

(6)考生没有作弊

操作演示如下:
(1)选择目标下拉框后,则可以选择指定目标的结果信息以显示出来。
(2)选择保存按钮后,则会将检测结果存储起来,默认存储路径位于save_data目录中

分析结果显示:通过系统识别技术发现图片中存在异常行为模式代表考试作弊行为,并生成并展示该分析结果的信息框内容:涉及总的目标数量、时间长度、不同类别异常行为特征及其准确性评分以及具体位置坐标数值。

4.视频检测说明

单击视频按钮后,在线打开供检测的视频文件,并且检测结果会立即呈现。再次单击可关闭该视频窗口。单击保存按钮后将对当前的检测结果进行存储,并且存储在save_data目录中。

分析结果:该系统实现了对视频流的实时监控,并成功识别出可疑考试行为的具体表现形式。详细列出了每个异常行为的置信度评分及其发生位置坐标,并通过结合图像识别算法与行为模式匹配技术完成了数据采集

该界面呈现了系统在视频帧中的多目标检测能力。该系统具有精确识别考试作弊行为的能力,并且能够提供详细的结果数据以及相应的置信度评估。

5.摄像头检测说明

按下启动摄像头按钮后即可启动摄像头执行连续检测流程。再次按下该按钮将使摄像头停止工作。

检测结果:系统通过网络与摄像头建立连接后自动进行实时数据分析,在监控到考试作弊行为后即时反馈相关数据信息。动态展示摄像头图像的同时对捕获的行为位置进行标记,在监控界面下方生成详细报告供后续参考。

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

保存

保存

(1)图片保存

(2)视频保存

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

(1)该数据遵循data.yaml文件中的数据集定义。
(2)训练迭代次数设定为150次。
(3)每个训练批次包含4幅图像(批量大小)。
(4)模型训练完成后……存储至train_v8目录下。
(5)该优化算法采用随机梯度下降法(SGD)进行参数更新。

尽管在大多数深度学习任务中,在GPU上通常能够实现更快的训练速度;但由于硬件限制或其他因素的影响,在某些情况下可能会导致不得不使用CPU进行训练。

温馨提醒:使用CPU进行深度学习模型的训练通常会比使用GPU效率较低;尤其是像YOLOv8这样的计算密集型模型更为明显。除非有特别的需求,在这种情况下推荐优先选择GPU以节省时间成本。

2.训练日志结果

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

(1)模型经过了150轮的训练后,在总耗时上达成了5.103小时。
(2)本次训练采用了NVIDIA GeForce RTX 3070 Ti显卡。
(3)得益于YOLOv8模型的优化设计与高性能硬件的支持下,该系统的训练效率表现优异。

验证结果:
(1)mAP@50: 当IoU阈值设定为0.50时的平均精度均值表现优异,在此情况下数值达到97.5%。
(2)mAP@[48-88]: 当IoU阈值范围扩展至从48到88时计算得出的平均精度均值同样表现出色,在这一范围内数值维持在76%以上。

速度:
(1)预处理所需时间为0.2ms
(2)推理所需时间为1.4ms
(3)后处理所需时间为0.7ms
(4)显示模型的推理效率较高,并适用于实时检测场景

Validation results are stored in the specified path located within runs\detect\train_v8 directory.

完成信息如下:
(1)进程以退出码0成功退出:
表明整个验证过程已完成且未出现错误。

模型整体表现优异(mAP50=97.5%,mAP50-95=75.2%),基于其优异的mAP值和高效的推理速度,该模型适用于实时应用场景。

全部评论 (0)

还没有任何评论哟~