基于YOLOv5的教室人数检测统计系统

server/2024/9/23 5:49:56/

基于YOLOv5的教室人数检测统计系统可以有效地用于监控教室内的学生数量,适用于多种应用场景,比如

以下是如何构建这样一个系统的概述,包括环境准备、数据集创建、模型训练以及如何处理不同类型的媒体输入。

代码布置

.
├── dataset # 数据集
│   ├── annotations # XML 标签
│   ├── images # 图片
│   └── labels # txt 标签
├── detect.sh # detect shell 脚本
├── hellodata.py # 数据探索、预处理
├── LICENSE
├── README.md
├── res
│   ├── demo_picture1.png # 样例图片
│   └── demo_picture2.png
├── runs
│   ├── detect # 训练后的文件结果
│   └── train # 训练后的权重
├── train.sh # train shell 脚本
├── xml2txt.py # 将 XML 转换为 txt 标签
└── yolov5 # 从 @ultralytics/yolov5 clone├── data│   ├── coco.yaml│   ├── headset.yaml # 自定义训练集│   ├── hyp.scratch.yaml│   ├── images # 存放 detect 输入数据│   │   ├── bus.jpg│   │   └── zidane.jpg│   └── videos # 存放 detect 输入数据├── detect.py├── Dockerfile├── hubconf.py├── models # 预训练模型 YAML 文件├── requirements.txt # Python 依赖库├── test.py├── train.py├── utils└── weights # 预训练权重

数据排布

目标检测 (Object Detection) 在教室人数统计上的应用尝试
先借助 YOLOv5 预训练模型对图片数据集进行训练,再测试多种输入流
数据集下载:Classroom Monitoring Dataset - kaggle
images 图片

partA 2000张,格式: [PartA_num].jpg
partB 2405张,格式:[PartB_num].jpg
annotations 标签,标注了图片中 目标的类别和坐标位置
partA 2000条,格式:[PartA_num].xml
partB 2405条,格式:[PartB_num].xml

主要工具包版本为 PyTorch 1.7.1+cu110 和 Python 3.8.5

代码运行

安装 Python 库依赖:pip3 install -r yolov5/requirements.txt
下载预训练权重,把下载的 .pt 文件部署在 yolov5/weights/ 路径下

代码训练

为了方便执行,编写了脚本 detect.sh 和 train.sh,分别进行训练与预测测试
根据训练效果调整 train.sh 文件中常用参数:

-epochs # 训练的 epoch,默认值 300
--batch-size # 默认值 16
--cfg yolov5s.yaml --weights '' # 从头开始训练
--cfg yolov5s.yaml --weights yolov5s.pt # 从预训练模型开始训练
--data # 数据集的配置文件,默认为 data/coco128.yaml
--resume # 是否从最新的 last.pt 中恢复训练,布尔值
--evolve # 进化超参数 (Evolve Hyperparameters),布尔值
--cache-images # 缓存图片可以更快的开始训练,布尔值
--weights # 初始化参数路径,默认值 ''
--adam # 使用 adam 优化器,布尔值

一般只需改动这两个脚本文件就可,如需训练自定义的数据集,请参考官方文档:Train Custom Data - YOLOv5 Documentation

其他

自定义数据集
观察数据
数据集大小
数据集样本
图像分辨率
数据预处理
数据清洗,观察发现,有一些图像的 label 存在缺失,在 XML 转换 TXT 的过程中一并丢弃
YOLOv5 原生预处理
搭建模型,可视化分析

分析与调整训练,提高模型泛化能力

结果

多视角 稳定识别!
demo 的 detect 结果:
在这里插入图片描述

最后

计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!

http://www.ppmy.cn/server/120661.html

相关文章

C语言 | Leetcode C语言题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; int characterReplacement(char* s, int k) {int num[26];memset(num, 0, sizeof(num));int n strlen(s);int maxn 0;int left 0, right 0;while (right < n) {num[s[right] - A];maxn fmax(maxn, num[s[right] - A]);if (right - …

五、CAN总线

目录 一、基础知识 1、can介绍 2、CAN硬件电路 3、CAN电平标准 4、CAN收发器芯片介绍 5、CAN帧格式 ① CAN帧种类 ② CAN数据帧 ③ CAN遥控帧​编辑 ④ 位填充 ⑤ 波形实例 6、接收方数据采样 ① 接收方数据采样遇到的问题 ② 位时序 ③ 硬同步 ④ 再同步 ⑤ 波…

换个手机IP地址是不是不一样?

在当今这个信息爆炸的时代&#xff0c;手机已经成为我们生活中不可或缺的一部分。而IP地址&#xff0c;作为手机连接网络的桥梁&#xff0c;也时常引起我们的关注。你是否曾经好奇&#xff0c;换个手机&#xff0c;IP地址会不会也跟着变呢&#xff1f;本文将深入探讨这个问题&a…

Neo4j 简单使用

在 Neo4j 项目中&#xff0c;搭建和使用主要包括以下几个步骤&#xff1a; 1. 安装 Neo4j 首先&#xff0c;安装 Neo4j 可以选择多种方式&#xff0c;包括&#xff1a; 本地安装&#xff1a;在 Windows、macOS 或 Linux 系统中&#xff0c;通过官网下载对应的 Neo4j 安装包。…

【论文阅读】Benchmarking Retrieval-Augmented Generation for Medicine

论文&#xff1a;https://arxiv.org/abs/2402.13178 代码&#xff1a; GitHub - Teddy-XiongGZ/MIRAGE: Official repository of the MIRAGE benchmark GitHub - Teddy-XiongGZ/MedRAG: Code for the MedRAG toolkit 研究背景&#xff1a; 系统地评估医用rag QA系统&#xff0…

【LLM论文日更】| 俄罗斯套娃嵌入模型

论文&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2022/file/c32319f4868da7613d78af9993100e42-Paper-Conference.pdf代码&#xff1a;GitHub - RAIVNLab/MRL: Code repository for the paper - "Matryoshka Representation Learning"机构&#x…

Spring 的循环依赖

在 Spring 中&#xff0c;循环依赖是指两个或多个 Bean 相互依赖&#xff0c;导致在创建过程中出现了依赖死锁的问题。为了解决循环依赖&#xff0c;Spring 引入了三级缓存机制。了解为什么需要三级缓存机制&#xff0c;首先要明白循环依赖是如何发生的&#xff0c;以及两级缓存…

vue-ts-demo

npm i -g vue/cli PS D:\kwai\vue3\project> vue create vue3-te-demo element-plus 一个 Vue 3 UI 框架 | Element Plus https://element-plus.org/zh-CN/guide/installation.html 安装&#xff1a; npm install element-plus --save 完整引入使用&#xff1a; 使用&…