【YOLO 系列】基于YOLO V8的学生上课行为检测系统【python源码+Pyqt5界面+数据集+训练代码】

news2024/9/20 0:38:02

前言

在现代教育环境中,学生上课行为的监测对于提升教学质量和学生学习效率具有重要意义。然而,传统的人工观察方法不仅效率低下,而且难以保证客观性和准确性。为了解决这一问题,我们启动了这个项目,目的是利用YOLOV8这一先进的深度学习技术,开发一个自动化的学生上课行为检测系统。

通过对上课行为数据集进行深入分析和标注,我们训练了YOLOV8模型,使其能够精确识别学生在课堂上的各种行为状态。这一系统能够实时监控并分析学生的行为,为教师提供即时反馈,帮助他们优化教学方法,提高课堂互动质量。

基于此项目,设计了一个使用Pyqt5库来搭建页面展示系统。本系统支持的功能包括训练模型的导入、初始化;置信度与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;摄像头的上传、检测、可视化结果展示与结束检测;已检测目标信息列表、位置信息;以及推理用时。本博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。

优势

  1. 高效率:自动化的监测系统大大减少了人工观察的时间和劳动成本,提高了监测效率。

  2. 高准确性:YOLOV8模型在目标检测领域的先进性确保了行为识别的高准确度。

  3. 实时反馈:系统能够提供实时的学生行为反馈,使教师能够及时调整教学策略。

  4. 多场景适用:无论是传统教室还是在线教学环境,该系统都能够灵活应用。

  5. 数据驱动:系统收集的数据可以用于进一步分析,为教育决策提供科学依据。

应用场景

  1. 课堂教学:教师可以利用该系统实时监控学生上课状态,及时调整教学方法,提高课堂参与度。

  2. 学生评估:系统可以作为一个评估工具,帮助教师客观评价学生的课堂表现和学习态度。

  3. 教育研究:研究人员可以利用系统收集的数据,进行教育心理学、教学方法等方面的研究。

  4. 个性化教学:根据学生的上课行为数据,教师可以为学生提供更加个性化的教学内容和辅导。

  5. 远程教学:在远程教学中,该系统可以帮助教师远程监控学生的上课状态,确保教学质量。

  6. 行为矫正:系统可以辅助教师识别需要特别关注的学生,制定相应的行为矫正计划。


一、软件核心功能介绍及效果演示

软件主要功能

  1. 支持图片、图片批量、视频及摄像头进行检测,同时摄像头可支持内置摄像头和外设摄像头

  2. 可对检测结果进行单独分析,并且显示单个检测物体的坐标、置信度等;

  3. 界面可实时显示目标位置检测结果检测时间置信度检测结果回滚等信息;

  4. 支持图片视频摄像头的结果保存,将检测结果保持为excel文件;

界面参数设置说明

  1. 标签4 摄像头源/相机/网络源

  2. 标签5 交并比阈值:目标检测时的iou参数,只有目标检测框的交并比大于该值,结果才会显示;

  3. 标签6 置信度阈值:目标检测时的conf参数,只有检测出的目标置信度大于该值,结果才会显示;

  4. 标签7 显卡选择:在进行推理时是否使用显卡,默认勾选(使用显卡);

  5. 标签8 半精度选择:启用半精度(FP16)推理,可加快支持的 GPU 上的模型推理速度,同时将对精度的影响降至最低,默认不勾选(不适应半精度);

  6. 标签9 图片推理尺寸: 在推理时将推理图片固定的尺寸;

  7. 标签10 数据集的配置文件:数据集在训练时的配置文件(.yaml);

  8. 标签11 训练好的模型:最终要进行推理的模型,一般选择最优的一个模型;

  9. 标签12 类别名:该项目的所有类别,可以方便在后续查看某一个类别。

视频演示

StudentClassroomBehavior Detection_哔哩哔哩_bilibili

图片检测演示

  1. 点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

视频检测演示

  1. 点击视频按钮图标,打开选择需要检测的视频,在点击开始运行会自动显示检测结果。再次点击停止按钮,会停止检测视频。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

摄像头检测演示

  1. 选择相机源中输入需要检测的摄像头(可以是电脑自带摄像头,也可以是外接摄像头,视频流等方式),然后点击摄像头图标来固定选择的推理流方式,最后在点击开始运行即可开始检测,当点击停止运行时则关闭摄像头检测。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

检测结果保存

点击导出数据按钮后,会将当前选择的图片【含批量图片】、视频或者摄像头的检测结果进行保存为excel文档,结果会存储在output目录下。

环境搭建

创建专属环境

conda create -n yolo python==3.8

 激活专属环境

conda activate yolo

安装torch-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torch-2.0.1+cu118-cp38-cp38-win_amd64.whl"

安装torchvision-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torchvision-0.15.2+cu118-cp38-cp38-win_amd64.whl"

安装ultralytics库

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

测试环境

yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

 此时就表明环境安装成功!!!

安装图形化界面库 pyqt5

pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

算法原理

YOLOv8是一种前沿的深度学习技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

YOLOv8目标检测算法具有如下的几点优势:

(1)更友好的安装/运行方式;

(2)速度更快、准确率更高;

(3)新的backbone,将YOLOv5中的C3更换为C2F;

(4)YOLO系列第一次使用anchor-free;

(5)新的损失函数。

YOLO各版本性能对比

网络结构

YOLOv8模型的整体结构如下图所示:

YOLOv8与YOLOv5模型最明显的差异是使用C2F模块替换了原来的C3模块;另外Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free

YOLOv8的网络架构包含了多个关键组件,这些组件共同工作以实现快速而准确的目标检测。首先是其创新的特征提取网络(Backbone),YOLOv8的Backbone采用了最新的网络设计理念,通过深层次的特征融合和精细的特征提取策略来增强对目标的识别能力。这一策略的成功关键在于其特征提取器能够充分捕获目标的细微特征,同时保持计算效率。

YOLOv8在训练策略上也进行了优化。与YOLOv7相比,YOLOv8采用了SPFF(Spatial Pyramid Fusion Fast)策略,该策略通过高效的多尺度特征融合提高了模型对不同大小目标的检测能力。此外,YOLOv8在训练过程中引入了一种名为Task Aligned Assigner的新技术,这种技术能够更精准地将预测框与真实目标对齐,从而提高检测的准确率。

在损失函数的设计上,YOLOv8进行了创新,采用了JFL(Joint Family Losses),这是一种集成了多个损失函数的复合损失函数,能够同时优化目标检测的多个方面。这些损失函数包括用于提升模型对目标位置和大小预测准确性的CIOU Loss,以及优化分类准确性的分类损失函数。JFL的设计允许YOLOv8更全面地考虑检测任务中的不同需求,通过协调各种损失来提升总体的性能。

YOLOv8的原理不仅在于其创新的技术点,更在于这些技术如何被综合应用于解决实际的目标检测问题。通过其精心设计的网络架构、高效的训练策略以及综合的损失函数设计,YOLOv8实现了在保持实时性的同时,提高了在复杂场景下的检测准确率。这些改进使得YOLOv8成为了一个强大的工具,适用于从自动驾驶到智能视频监控等多种应用场景。

四、模型的训练、评估与推理

数据集准备

本项目使用的是检测学生课堂行为的数据集,名为 SCB-dataset(Student Classroom Behavior dataset)。

SCB-dataset 的特点和挑战包括:

  • 教室是人口密集的环境,多个主题同时进行不同的动作。

  • 举手行为与其他行为类别在视觉上有很高的相似性,这给检测任务带来了挑战。

  • 数据集中的图像是从不同拍摄角度捕获的,包括正面、侧面和背面视图,这对视觉表现有显著影响。

  • 教室环境和座位安排可能因课程而异,增加了检测和识别举手行为的复杂性。

  • 学生在不同的学习阶段,举手行为可能有很大差异。

图片数据集的存放格式如下:

下载数据集后,请将图片数据放在images文件夹内,标注数据放在Annotations文件夹内,然后运行下述代码:

  1. 运行splitDataset.py,用于划分数据集;

  2. 运行xml2txt.py,用于得到训练标注文件;

  3. 运行ViewCategory.py,用于查看一共有那些类别;

  4. mydata.yaml,用于填写模型训练的数据配置文件。

注意:在xml2txt.py和mydata.yaml中的类别名称的顺序要一致。

模型训练

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,代码如下:

yolo detect train data=./VOCData/myvoc.yaml model=yolov8n.yaml pretrained=./weights/yolov8n.pt epochs=100 imgsz=640
from ultralytics import YOLO

# build from YAML and transfer weights
model = YOLO('yolov8n.yaml').load('./weights/yolov8n.pt')

# Train the model
model.train(data='./VOCData/mydata.yaml', epochs=100, imgsz=640)

训练结果分析

YOLOv8在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:、

P_curve.png

confusion_matrix_normalized.png

训练 batch

验证 batch

模型推理

模型训练完成后,可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们通过使用该文件进行后续的推理检测。

图片检测代码如下:

yolo detect predict model=./runs/detect/train/weights/best.pt source=./img save=True device=0
from ultralytics import YOLO

# Load a model
model = YOLO('./runs/detect/train/weights/best.pt')

# Run batched inference on a list of images
model.predict("./img", imgsz=640, save=True, device=0)

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

关于该系统涉及到的完整源码、UI界面代码、数据集、训练代码、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。

五、获取方式

本文涉及到的完整全部程序文件:包括 python源码、数据集、训练好的结果文件、训练代码、UI源码、测试图片视频等(见下图),获取方式见文末:

注意:该代码基于Python3.8开发,运行界面的主程序为GUI.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照requirements.txt配置软件运行所需环境。

 点击链接直接打开:https://m.tb.cn/h.gda39fK?tk=H3OGWFLGArl CA6496

六、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1702958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode算法】第83题:删除排序链表中的重复元素

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路:双指针法,只需遍历一遍。使用low指向前面的元素,high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面,实…

make disclean V=1 分析

文章目录 make distclean步骤1:2090-2114行,执行依赖 clean步骤2:2120-2124行,执行依赖 $(mrproper-dirs)步骤3:2118-2129行,执行依赖 mrproper步骤4:2135-2142行,实现 distclean 编…

恶意退市潮?

一张A4纸,炸出一池鱼。史上(最)严新规,这一拳打到了(违规减持)上。 新规算是对新国九条的补充,更是给大股东们上紧箍咒。那市场买账吗?昨晚爆出19家董监高亲属(违规&…

post请求

文章目录 一、get请求和post请求区别二、get请求和post请求的用法对比1.get请求2.post请求 三、如何知道是get请求还是post请求 一、get请求和post请求区别 二者区别就是一句话:post请求更安全 二、get请求和post请求的用法对比 1.get请求 get请求: 请求参数&am…

RK3568笔记二十七:LPRNet车牌识别

若该文为原创文章,转载请注明原文出处。 记录自训练并在RK3568上部署。 一、介绍 LPRNet的Pytorch实现,一种高性能和轻量级的车牌识别框架。完全适用于中国车牌识别(Chinese License Plate Recognition)及国外车牌识别&#xf…

Vue2和Vue3生命周期的对比

Vue2和Vue3生命周期的对比 Vue2 和 Vue3 生命周期对照表Vue2 和 Vue3 生命周期图示 Vue2 和 Vue3 生命周期对照表 触发时机Vue2.xVue3.x组件创建时运行beforeCreate setup createdsetup 挂载在DOM时运行beforeMountonBeforeMountmountedonMounted响应数据修改时运行beforeUpdat…

张大哥笔记:赚钱高手养成计划---如何将一份时间产生N份收入?

我们常说的赚钱的四种境界有哪些? 1.靠体力挣钱 2.靠技能挣钱 3.靠知识挣钱 4.靠平台钱生钱 所以对应的收入的模式就会是下面4种模式: 1.一份时间卖1次 2.一份时间卖N次 3.一份时间溢价卖N次 4.购买他人时间为自己所用 时间对于每个人都是相同的…

如何被谷歌收录?

最简单的方法就是提交网站给谷歌,但这种方法可操作空间不大,一天一般也就只有十条左右的链接可以提交,对于一些大网站来说,这种方法显然不适用,这时候GPC爬虫池的好处就体现了,GPC爬虫池对希望提升Google搜…

小而美的前端库推荐

小而美,指的是“小即是美”的事物,这是马云在 2009年 APEC 中小企业峰会上首次提出的观点 👍 前端有很多小而美的库,接入成本很低又能满足日常开发需求 🎉

D - New Friends(AtCoder Beginner Contest 350)

题目链接: D - New Friends (atcoder.jp) 题目大意: 题目解析: 题目的大致意思: 假如A和B是朋友 B和C也是朋友 那么当A和C不是朋友的时候 可以通过B让A和C也成为朋友 问你增加了多少对的朋友关系 题目分析: 咱们可以从图论去考虑 当这一群是一个连通块 那么这一群点(人) 都…

SQL 语言:完整性约束

文章目录 概述主键 ( Primary Key ) 约束外键(Foreign Key)约束属性值上的约束全局约束总结 概述 数据库的完整性是指数据库正确性和相容性,是防止合法用户使用数据库时向数据库加入不符合语义的数据。保证数据库中数据是正确的,…

多线程JUC 第2季 BlockingQueue 阻塞队列

一 阻塞队列 1.1 阻塞队列介绍 阻塞队列(BlockingQueue)是一个在队列基础上又支持了两个附加操作的队列: put方法:当队列装满时,添加的线程则被阻塞,直到队列不满,则可用。 take方法&#x…

【vue与iframe通讯】

vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue & iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言:vue嵌套iframe实现步骤 发送数据…

HTML+CSS+JavaScript网页制作案例教程第2版-黑马程序员-第9章动手实践

文章目录 效果代码网盘 效果 代码 index.html <!doctype html> <html> <head> <meta charset"utf-8"> <title>通栏效果</title> <link rel"stylesheet" type"text/css" href"index.css"> …

【STM32踩坑】HAL固件库版本过高导致烧录后无法运行问题

问题引入 目前STM32CUBEMX已经更新到了6.11版本&#xff0c;对应的固件库也一直在更新&#xff1b; 以STM32F1库为例&#xff0c;目前最新的库对应版本为1.8.5 但是我们会发现&#xff0c;如果直接使用1.8.5版本的固件库生成HAL源码后&#xff0c;烧录是可以烧录&#xff0c;但…

程序无法监听端口,但netstat -aon | findstr却显示该端口未被占用

程序无法监听端口&#xff0c;但netstat -aon | findstr却显示该端口未被占用 ⚙️1.软件环境⚙️&#x1f50d;2.问题描述&#x1f50d;&#x1f421;3.解决方法&#x1f421;&#x1f914;4.结果预览&#x1f914; ⚙️1.软件环境⚙️ Windows10 教育版64位 &#x1f50d;2.问…

P1115 最长子段和

题目描述 给出一个长度为 &#x1d45b;n 的序列 &#x1d44e;a&#xff0c;选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数&#xff0c;表示序列的长度 &#x1d45b;。 第二行有 &#x1d45b;n 个整数&#xff0c;第 &#x1d456; 个整数表示序列的…

知识存储概述

文章目录 知识存储概述知识存储方式知识存储基础工具技术发展趋势 知识存储是针对知识图谱的知识表示形式设计底层存储方式&#xff0c;完成各类知识的存储&#xff0c;以支持对大规模图数据的有效管理和计算。知识存储的对象包括基本属性知识、关联知识、事件知识、时序知识和…

Overall Accuracy(OA)、Average Accuracy(AAcc)计算公式

四个重要的指标&#xff1a; True Positive&#xff08;TP&#xff09;、False Positive&#xff08;FP&#xff09;、True Negative&#xff08;TN&#xff09;和False Negative&#xff08;FN&#xff09;。 TP表示分类器预测结果为正样本&#xff0c;实际也为正样本&#xf…

以一道简单的例题计算灵敏性分析

在例1.1中&#xff0c;全部的变量包括&#xff1a;猪的重量w(磅),从现在到出售猪期间经历的时间t(天),t天内饲养猪的花费C(美元),猪的市场价格p(美元/磅),售出生猪所获得的收益R(美元),我们最终获得的净收益P(美元).这里还有一些其他的有关量&#xff0c;如猪的初始重量(200磅)…