封面

🎓 YOLO智能教室异常行为检测系统

写作时间:2026-06-20 15:02:00
# yolo
# python
# 项目复盘

基于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 种学生行为:

  1. Using_phone (使用手机)⚠️
  2. 腰(弯腰)⚠️
  3. (书本)
  4. bow_head (低头)⚠️
  5. 举手(举手)
  6. 电话(手机)⚠️
  7. raise_head (抬头)
  8. 阅读(阅读)
  9. 睡觉(睡觉)⚠️
  10. turn_head (转头)⚠️
  11. upright(端正坐姿)
  12. 写字(写字)

带⚠️标记的为异常行为

📈 性能评估

运行评估脚本对所有模型进行性能测试:

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个页面)
  • 底部:系统状态信息
  • 主内容区: 当前选中的功能页面

图片检测

  1. 在左侧选择并加载模型
  2. 点击左侧"图片检测"导航
  3. 点击"选择图片"上传文件
  4. 调整置信度阈值(默认0.25)
  5. 点击"开始检测"
  6. 查看原图和检测结果对比

视频检测

  1. 点击左侧"视频检测"导航
  2. 点击"选择视频"上传文件
  3. 点击"开始检测"
  4. 实时查看处理进度和逐帧检测结果

摄像头检测

  1. 点击左侧"摄像头检测"导航
  2. 点击"启动摄像头"(浏览器会请求权限)
  3. 系统自动进行实时检测
  4. 查看FPS、延迟和检测数统计

性能统计对比

  1. 点击左侧"性能统计对比"导航
  2. 查看总体统计数据
  3. 分析FPS和推理时间对比图表
  4. 查看详细数据表格
  5. 点击"刷新统计"更新数据

🛠️ 技术栈

后端

  • 框架:FastAPI
  • 深度学习: PyTorch
  • 计算机视觉: OpenCV
  • 模型: YOLOv5/v8/v11/v26

前端

  • 架构: 左侧侧边栏 + 多页面布局
  • 结构: HTML5
  • 样式: CSS3(渐变背景、卡片设计)
  • 逻辑: Vanilla JavaScript(页面路由、状态管理)
  • 图表: Chart.js
  • 通信: Fetch API + WebSocket
  • 交互: 响应式设计,支持移动端

⚠️重要规范

  1. Python环境: 必须使用D:\Anaconda3\envs\pytorch\python.exe
  2. 推理位置: 所有推理逻辑在后端执行,前端仅展示
  3. 模型型号: 仅支持m型号(YOLOv5m/8m/11m/26m)
  4. 项目结构: 不得随意修改目录结构
  5. 数据集路径: 固定为 Student_dataset/

🐛 常见问题

**问:模型加载失败?**A: 确保模型权重文件存在于 目录,先运行训练脚本。models/

**问:CUDA不可用?**答:检查PyTorch是否正确安装CUDA版本,或使用CPU模式。

**问:摄像头无法启动?**答:检查浏览器权限,使用HTTPS或localhost。

**问:WebSocket连接失败了吗?**A: 确保后端服务正在运行,检查防火墙设置。

📄 许可证

本项目仅供学习和研究使用。

👥 贡献

欢迎提交Issue和Pull Request!

📞 联系方式

如有问题,请联系项目维护者。


祝您使用愉快! 🎉