基于YOLOv5m/YOLOv8m/YOLOv11m/YOLO26m的智能教室学生行为检测系统,支持图片、视频和实时摄像头检测。
📋 系统特性
- ✅ 多模型支持:YOLOv5m、YOLOv8m、YOLOv11m、YOLO26m
- ✅ 多种检测模式: 图片、视频逐帧、摄像头实时
- ✅ 统一后端推理: FastAPI + Python后端处理所有推理逻辑
- ✅ 现代化前端: 左侧侧边栏导航,多页面架构,纯HTML+JS
- ✅ 性能对比: 自动生成模型性能统计和可视化图表
- ✅ 12类行为检测:Using_phone、弯曲、书、bow_head、举手、电话、raise_head、阅读、睡眠、turn_head、直立、书写
- ✅ 自动启动: 运行脚本后自动打开浏览器
- ⚡ 硬件优化:针对RTX 4080 + i7-13700K优化的训练参数
🗂️ 项目结构
YOLO26_Intelligent_Classroom_Abnormal_Behavior_Detection_System/
├── src/
│ ├── train/ # 训练脚本
│ │ ├── train_yolov5m.py # YOLOv5m训练
│ │ ├── train_yolov8m.py # YOLOv8m训练
│ │ ├── train_yolov11m.py # YOLOv11m训练
│ │ └── train_yolo26m.py # YOLO26m训练
│ ├── inference/ # 推理模块
│ │ ├── model_manager.py # 模型管理器
│ │ └── app.py # FastAPI后端服务
│ └── eval/ # 评估模块
│ └── evaluate_models.py # 性能评估脚本
├── web/ # 前端界面
│ ├── index.html # 主页面
│ ├── style.css # 样式文件
│ └── app.js # 前端逻辑
├── models/ # 🎯 生产环境模型(API和推理使用)
│ ├── yolov5m/
│ │ ├── best.pt # 最佳权重
│ │ └── metrics.json # 性能指标
│ ├── yolov8m/
│ │ ├── best.pt
│ │ └── metrics.json
│ ├── yolov11m/
│ │ ├── best.pt
│ │ └── metrics.json
│ └── yolo26m/
│ ├── best.pt
│ └── metrics.json
├── experiments/ # 📊 训练实验数据(仅用于训练过程)
│ ├── yolov5m/
│ │ ├── weights/
│ │ │ ├── best.pt # 训练生成的最佳权重
│ │ │ └── last.pt # 最后一轮权重
│ │ ├── results.csv # 训练曲线
│ │ └── metrics.json # 训练指标(自动复制到models/)
│ ├── yolov8m/
│ └── yolov11m/
├── yolo_repos/ # YOLO仓库统一存放目录
│ ├── README.md # 仓库管理说明
│ └── yolov5/ # [自动下载]
├── Student_dataset/ # 数据集(YOLO格式)
│ ├── train/
│ ├── val/
│ ├── test/
│ └── data.yaml
├── requirements.txt # Python依赖
└── README.md # 本文件
📁 目录说明
models/: 生产环境模型目录- API 从这里读取 metrics.json
- 推理服务从这里加载权重
- 训练完成后自动更新
experiments/: 训练实验数据目录- 仅用于存储训练过程中的临时文件
- 包含完整的训练日志、曲线、权重历史
- API 和推理服务不直接访问此目录
🚀 快速开始
1️⃣ 环境要求
必须使用指定的Conda环境:
Python解释器: D:\Anaconda3\envs\pytorch\python.exe
2️⃣ 安装依赖
D:\Anaconda3\envs\pytorch\python.exe -m pip install -r requirements.txt
3️⃣ 训练模型
💡 重要提示: 所有训练脚本已针对 RTX 4080 + i7-13700K + 32GB 内存优化!
✨ 当前配置亮点(v1.4.7 - RTX 4080 极速训练 900p)
🚀 极速训练优化(速度提升 2-3 倍):
- Cache Disk: 数据集磁盘缓存(速度提升 1.5-2x,节省 RAM)
- Workers: 4 (最优平衡点,分辨率 ≥ 1024)
- Mosaic: 0.0 (禁用CPU密集型增强,速度提升 1.3x)
- Multi-Scale: GPU自适应缩放(不增加CPU负担)
- CUDA优化: OpenMP/MKL环境变量优化
📊 900p 平衡训练:
- Image Size: 896 (900p,32的倍数,平衡速度和精度)
- Batch Size: 16 (充分利用 RTX4080 16GB 显存)
- Rect Training: 启用 (保留宽高比,减少padding)
- 优势: 速度更快(相比1280p),batch更大,检测精度依然优秀
🔥 Focal Loss:
- fl_gamma: 2.0 (自动聚焦难分类样本)
- 效果: 自动处理类别不平衡,提升少数类 Recall
🌈 极速训练数据增强策略:
- Mosaic: 0.0 (禁用,CPU密集型,速度提升 1.3x) 🚀
- MixUp/Copy-Paste: 0.0 (禁用)
- Color Jitter: 保留 (hsv_h/s/v: 0.015/0.7/0.4)
- Geometric: 保留轻度旋转/平移 (degrees: 3.0, translate: 0.05)
- Flip: 左右翻转 0.5 (教室场景适用)
- Optimizer: AdamW (稳定训练)
一键训练所有模型(推荐):
run_train_all.bat
⏱️ 预计总时长: 3-5 小时 (RTX 4080 极速模式 900p 🚀)
- YOLOv5m: ~1-1.5 小时 (900p + Cache Disk + 禁用 Mosaic)
- YOLOv8m: ~0.8-1.2 小时
- YOLOv11m: ~0.7-1 小时 ⭐ 最推荐
- YOLO26m: ~0.6-0.9 小时
💡 速度提升 2-3 倍:相比默认配置(磁盘缓存)
训练单个模型(使用 640×640 标准配置):
# 训练YOLOv5m (默认: epochs=300, batch=32, img_size=640, 12类)
D:\Anaconda3\envs\pytorch\python.exe src/train/train_yolov5m.py
# 训练YOLOv8m (默认: epochs=300, batch=64, img_size=640)
D:\Anaconda3\envs\pytorch\python.exe src/train/train_yolov8m.py
# 训练YOLOv11m (默认: epochs=300, batch=64, img_size=640) - 最推荐
D:\Anaconda3\envs\pytorch\python.exe src/train/train_yolov11m.py
# 训练YOLO26m (默认: epochs=300, batch=64, img_size=640) - 如果可用
D:\Anaconda3\envs\pytorch\python.exe src/train/train_yolo26m.py
自定义训练参数:
# 标准 640×640 训练(推荐,适合12类数据集)⭐
python src/train/train_yolov5m.py --img-size 640 --batch-size 32
# 高分辨率训练(提升精度,速度稍慢)
python src/train/train_yolov5m.py --img-size 1280 --batch-size 8
# 低显存显卡配置
python src/train/train_yolov5m.py --img-size 640 --batch-size 16 --epochs 200
训练参数说明:
--data: 数据集配置文件(默认: Student_dataset/data.yaml, 12类)--epochs: 训练轮数 (默认: 300)--batch-size: 批次大小 (默认: 32,适配640×640标准分辨率)--img-size: 图像大小 (默认: 640,标准分辨率) ✨- 640: 标准分辨率,适合大多数场景(推荐)⭐
- 1280: 高分辨率,极致精度(速度稍慢,显存占用大)
- 1920: 超高分辨率,需要大量显存
--device: 设备(空=自动,0=GPU,cpu=CPU)--workers: 数据加载线程数 (默认: 4,极速优化值)
4️⃣ 启动后端服务
方法1: 使用批处理脚本(推荐)
run_server.bat
特性:
- ✅ 自动检查环境
- ✅ 自动打开浏览器
- ✅ 详细的服务器信息
- ✅ 可在任何目录运行
方法2: 手动启动
D:\Anaconda3\envs\pytorch\python.exe -m uvicorn src.inference.app:app --reload
服务将在 启动http://localhost:8000
5️⃣ 访问前端界面
**浏览器会自动打开!**或手动访问:
http://localhost:8000/web/index.html
界面采用左侧侧边栏布局:
- 左侧:模型选择 + 功能导航菜单
- 右侧:各功能页面(首页/图片检测/视频检测/摄像头检测/性能统计)
6️⃣ 评估模型性能
使用批处理脚本
run_evaluate.bat
特性:
- ✅ 自动检查训练好的模型
- ✅ 交互式设置测试图片数量
- ✅ 显示评估进度和结果
- ✅ 可在任何目录运行
📊 API端点
后端提供以下API端点:
端点方法说明/models去获取可用模型列表/load_model后期加载指定模型/infer_frame后期图片推理/infer_video后期视频逐帧推理/infer_streamWebSocket摄像头实时推理/metrics去获取性能统计/health去健康检查
API使用示例
加载模型:
curl -X POST http://localhost:8000/load_model \
-H "Content-Type: application/json" \
-d '{"model_id": "yolov8m"}'
图片推理:
curl -X POST http://localhost:8000/infer_frame \
-H "Content-Type: application/json" \
-d '{"image_base64": "data:image/jpeg;base64,...", "conf_threshold": 0.25}'
获取性能统计:
curl http://localhost:8000/metrics
🎯 检测类别
系统可检测以下 12 种学生行为:
- Using_phone (使用手机)⚠️
- 弯腰(弯腰)⚠️
- 书(书本)
- bow_head (低头)⚠️
- 举手(举手)
- 电话(手机)⚠️
- raise_head (抬头)
- 阅读(阅读)
- 睡觉(睡觉)⚠️
- turn_head (转头)⚠️
- upright(端正坐姿)
- 写字(写字)
带⚠️标记的为异常行为
📈 性能评估
运行评估脚本对所有模型进行性能测试:
D:\Anaconda3\envs\pytorch\python.exe src/eval/evaluate_models.py --num-images 100
评估结果将保存到 ,前端可自动读取并可视化。experiments/logs/metrics.json
评估指标:
- 平均推理时间
- 平均FPS
- 最小/最大推理时间
- 平均检测数量
🔧 配置说明
数据集配置 (Student_dataset/data.yaml)
train: ../train/images
val: ../valid/images
test: ../test/images
nc: 12
names: ['Using_phone', 'bend', 'book', 'bow_head', 'hand-raising', 'phone', 'raise_head', 'reading', 'sleep', 'turn_head', 'upright', 'writing']
数据集统计:
- 训练集: 3192 张图像
- 验证集: 581 张图像
- 测试集: 292 张图像
- 总计: 4065 张图像
模型配置 (src/inference/model_manager.py)
在 中配置支持的模型:ModelManager.SUPPORTED_MODELS
SUPPORTED_MODELS = {
'yolov5m': {
'name': 'YOLOv5m',
'weights': 'models/yolov5m_best.pt',
...
},
...
}
📱 使用说明
界面导航
- 左侧侧边栏:
- 顶部:模型选择和加载
- 中部:功能导航菜单(5个页面)
- 底部:系统状态信息
- 主内容区: 当前选中的功能页面
图片检测
- 在左侧选择并加载模型
- 点击左侧"图片检测"导航
- 点击"选择图片"上传文件
- 调整置信度阈值(默认0.25)
- 点击"开始检测"
- 查看原图和检测结果对比
视频检测
- 点击左侧"视频检测"导航
- 点击"选择视频"上传文件
- 点击"开始检测"
- 实时查看处理进度和逐帧检测结果
摄像头检测
- 点击左侧"摄像头检测"导航
- 点击"启动摄像头"(浏览器会请求权限)
- 系统自动进行实时检测
- 查看FPS、延迟和检测数统计
性能统计对比
- 点击左侧"性能统计对比"导航
- 查看总体统计数据
- 分析FPS和推理时间对比图表
- 查看详细数据表格
- 点击"刷新统计"更新数据
🛠️ 技术栈
后端
- 框架:FastAPI
- 深度学习: PyTorch
- 计算机视觉: OpenCV
- 模型: YOLOv5/v8/v11/v26
前端
- 架构: 左侧侧边栏 + 多页面布局
- 结构: HTML5
- 样式: CSS3(渐变背景、卡片设计)
- 逻辑: Vanilla JavaScript(页面路由、状态管理)
- 图表: Chart.js
- 通信: Fetch API + WebSocket
- 交互: 响应式设计,支持移动端
⚠️重要规范
- Python环境: 必须使用
D:\Anaconda3\envs\pytorch\python.exe - 推理位置: 所有推理逻辑在后端执行,前端仅展示
- 模型型号: 仅支持m型号(YOLOv5m/8m/11m/26m)
- 项目结构: 不得随意修改目录结构
- 数据集路径: 固定为 Student_dataset/
🐛 常见问题
**问:模型加载失败?**A: 确保模型权重文件存在于 目录,先运行训练脚本。models/
**问:CUDA不可用?**答:检查PyTorch是否正确安装CUDA版本,或使用CPU模式。
**问:摄像头无法启动?**答:检查浏览器权限,使用HTTPS或localhost。
**问:WebSocket连接失败了吗?**A: 确保后端服务正在运行,检查防火墙设置。
📄 许可证
本项目仅供学习和研究使用。
👥 贡献
欢迎提交Issue和Pull Request!
📞 联系方式
如有问题,请联系项目维护者。
祝您使用愉快! 🎉
