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

embedded/2024/9/23 2:35:51/

基于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/embedded/115357.html

相关文章

DNF Decouple and Feedback Network for Seeing in the Dark

DNF: Decouple and Feedback Network for Seeing in the Dark 在深度学习领域,尤其是在低光照图像增强的应用中,RAW数据的独特属性展现出了巨大的潜力。然而,现有架构在单阶段和多阶段方法中都存在性能瓶颈。单阶段方法由于域歧义&#xff0c…

weblogic CVE-2018-2894 靶场攻略

漏洞描述 Weblogic Web Service Test Page中⼀处任意⽂件上传漏洞,Web Service Test Page 在 "⽣产模式"下默认不开启,所以该漏洞有⼀定限制。 漏洞版本 weblogic 10.3.6.0 weblogic 12.1.3.0 weblogic 12.2.1.2 28 weblogic 12.2.1.3 …

多个PDF合并为一个PDF

1、安装依赖: 首先,确保在Python环境中安装了 PyPDF2 库,可以通过以下命令安装: pip install pypdf22、合并 PDF 文件的代码: import os from PyPDF2 import PdfMergerdef merge_pdfs(pdf_list, output_path):merge…

一种全新的webapi框架C#webmvc初步介绍

这个框架分三部分,第一部分数据结构层,第二部分http和业务管理以及sql层,第三部分加密层和工具类。 数据结构层分key和数据长度定义 public class Auth { [Key] public string Id { get; set; } [MaxLength(50)…

蓝桥杯【物联网】零基础到国奖之路:八. RTC

蓝桥杯【物联网】零基础到国奖之路:八. RTC 第一节 RTC的基本知识第二节 CubeMX配置第三节 代码 第一节 RTC的基本知识 RTC是实时时钟,指可以想时钟一样输出实际时间的电子设备,一般会是集成电路,也被称为是时钟芯片。总之,RTC只…

深度学习02-pytorch-01-张量形状的改变

在 PyTorch 中,张量的形状(或称为形状变换)可以通过多种方式进行改变,这有助于数据的重新排列、打平、扩展或压缩。常用的操作包括 view(), reshape(), transpose(), unsqueeze(), squeeze(), 和 permute() 等等。下面将详细介绍这…

【java面经】Redis速记

目录 基本概念 string hash list set zset 常见问题及解决 缓存穿透 缓存击穿 缓存雪崩 Redis内存管理策略 noeviction allkeys-lru allkeys-random volatile-random volatile-ttl Redis持久化机制 RDB快照 AOF追加文件 Redis多线程特性 Redis应用场景 缓…

数据处理与统计分析篇-day08-apply()自定义函数与分组操作

一. 自定义函数 概述 当Pandas自带的API不能满足需求, 例如: 我们需要遍历的对Series中的每一条数据/DataFrame中的一列或一行数据做相同的自定义处理, 就可以使用Apply自定义函数 apply函数可以接收一个自定义函数, 可以将Series对象的逐个值或DataFrame的行/列数据传递给自…