YOLOv5 口罩目标检测实战(一):项目整体介绍与数据准备
前言在公共场所佩戴口罩已成为常态化防护措施但人工监督耗时费力且存在盲区。利用计算机视觉技术对摄像头画面进行实时检测能够有效辅助安防和防疫管理。本项目使用早期YOLOv5 2.0版本中的YOLOv5s模型实现端到端的口罩佩戴检测。与图像分类任务不同本项目需要同时解决两个核心问题1. 找到每张人脸在画面中的位置定位2. 判断该人脸属于mask戴口罩还是no-mask未戴口罩。模型最终输出若干个目标框、每个框的类别和置信度。本文作为系列开篇重点介绍项目的目标、数据集构成、文件目录结构以及完整的数据流转流程。后续文章将深入网络结构、Anchor解码、训练调参与推理部署。文章目录前言一、项目目录结构与核心文件核心文件职责说明二、数据集详解与标签格式1. 样本与标注框分布2. YOLO标签格式详解3. data.yaml 配置文件三、完整数据流转与训练推理总流程四、快速上手运行步骤五、常见问题与解决方案数据阶段六、调试建议七、总结与下篇预告一、项目目录结构与核心文件项目代码基于早期YOLOv5 2.0工程推荐使用PyCharm或VSCode打开。目录结构分为数据集存放区MaskDataSet和算法工程区yolov5_2_0。Mask_YOLO │ ├── MaskDataSet/ # 数据集根目录 │ ├── data.yaml # 数据集配置文件路径、类别数、类别名 │ ├── train/ # 训练集 │ │ ├── images/ # 训练图片105张 │ │ └── labels/ # 训练标签YOLO格式txt │ ├── valid/ # 验证集 │ │ ├── images/ # 验证图片29张 │ │ └── labels/ # 验证标签 │ └── test/ # 测试集独立复评 │ ├── images/ # 测试图片15张 │ └── labels/ # 测试标签 │ └── yolov5_2_0/ # 早期YOLOv5工程源码 ├── train.py # 训练总入口 ├── test.py # 验证与测试入口 ├── detect.py # 图片/视频推理入口 ├── camera_mask.py # 【本项目核心】摄像头实时检测入口 ├── models/ # 网络结构定义 │ ├── yolov5s.yaml # YOLOv5s网络结构、Anchor尺寸 │ └── yolo.py # 模型构建与Detect检测头逻辑 ├── utils/ # 工具函数 │ ├── datasets.py # 数据加载、Letterbox、数据增强 │ └── utils.py # IoU计算、损失函数、目标匹配、NMS ├── hyp.yaml # 超参数配置学习率、损失权重、增强参数 └── runs/ # 训练输出 └── exp17/ # 当前项目训练结果 ├── opt.yaml # 训练命令参数复现用 ├── hyp.yaml # 本次训练实际超参数 ├── results.txt # 每轮训练损失与验证指标 └── weights/ ├── best.pt # 验证集综合表现最佳权重用于最终推理 └── last.pt # 最后一轮权重用于恢复训练核心文件职责说明文件职责重要性data.yaml指定训练/验证图片路径、类别数量nc: 2、类别名称mask, no-mask数据入口必须正确配置models/yolov5s.yaml定义Backbone、Neck、Head结构及每层通道数、Anchor尺寸修改网络结构需改动此处hyp.yaml控制学习率lr00.01、动量0.937、损失权重及Mosaic等数据增强参数调优精度的关键文件train.py整合数据、模型、超参数执行训练循环、验证和模型保存训练主程序camera_mask.py调用OpenCV读取摄像头执行预处理、推理、后处理NMS和画框显示最终交付运行入口best.pt保存训练过程中验证集mAP等指标综合表现最好的模型权重最终推理必须加载此文件二、数据集详解与标签格式1. 样本与标注框分布原始数据集经过清洗和划分当前分布如下数据集图片数量Mask框数量No-mask框数量说明训练集train105张573123约4.7:1明显偏向戴口罩类别验证集valid29张14220少数类no-mask样本极少指标易波动测试集test15张915仅用于独立复评不参与训练调参合计149张806148-关键认知模型在训练时看过573道“戴口罩”的题只看过123道“未戴口罩”的题。这种类别失衡是后续项目中容易出现“漏报未戴口罩”或“误报戴口罩”的根本原因之一。2. YOLO标签格式详解每张图片对应一个同名.txt文件如0001.jpg对应0001.txt。标签文件中的每一行代表一个真实目标框格式如下class x_center y_center width height其中class整数0代表mask1代表no-mask。x_center, y_center, width, height均为归一化到[0, 1]之间的浮点数。归一化公式为以x_center为例(框的左上角x 框的右下角x) / (2 * 图片宽度)。标签示例0001.txt内容0 0.5125 0.4300 0.2100 0.3200 1 0.7600 0.5000 0.1800 0.2900这表示图片中有两个目标第一个是戴口罩的人脸位于画面中央偏左第二个是未戴口罩的人脸位于画面右侧。3.data.yaml配置文件数据集路径和类别映射全部在MaskDataSet/data.yaml中定义# data.yamltrain:MaskDataSet/train/imagesval:MaskDataSet/valid/imagestest:MaskDataSet/test/imagesnc:2# number of classesnames:[mask,no-mask]# class names调试提示YOLO读取图片依赖data.yaml中的路径。如果训练时报错FileNotFoundError优先检查此处路径是否为相对路径且与train.py所在目录的相对位置正确。三、完整数据流转与训练推理总流程下图展示了从原始数据到最终摄像头推理的完整链路清晰标出了训练阶段与推理阶段的边界。是否图片 同名YOLO标签检查类别、坐标、空标签和数据分布划分train、valid、test读取data.yaml、yolov5s.yaml、hyp.yaml加载YOLOv5s和预训练权重DataLoader读取图片并同步增强标签Backbone提取多层特征FPN PAN融合不同尺度特征P3、P4、P5三个尺度输出候选真实框与Anchor、Grid匹配计算box、obj、cls三类损失反向传播 SGD更新参数EMA平滑参数在验证集计算P、R和mAP综合表现是否更好保存best.pt继续训练并保存last.pt摄像头或图片推理Letterbox RGB CHW 归一化模型前向得到25200个候选置信度筛选 NMS坐标映射回原图画框、类别、置信度和WARNING收集漏检、误检和错分类坏例图2 项目训练与推理总流程图。上方为训练闭环数据→增强→前向→损失→反向→保存下方为推理闭环摄像头→预处理→前向→NMS→画框→坏例收集。四、快速上手运行步骤安装环境依赖建议使用Python 3.8pipinstalltorch torchvision opencv-python pandas matplotlib pyyaml tqdm检查数据集确保MaskDataSet文件夹与yolov5_2_0位于同级目录。随机打开train/labels/下的一个txt文件检查坐标是否在0~1之间。开始训练在yolov5_2_0目录下python train.py--data../MaskDataSet/data.yaml--weightsyolov5s.pt--epochs200--batch-size4--img-size640摄像头实时检测python camera_mask.py五、常见问题与解决方案数据阶段问题原因解决方法训练报错No labels founddata.yaml中路径错误或labels文件夹为空检查train/val路径是否指向images父目录确保标签与图片同名标签解析报错IndexError: list index out of range标签文件中某行缺少空格或坐标数量不为5使用文本编辑器检查txt文件确保格式为class x y w h类别数量不对应data.yaml中nc: 2但标签里出现了2或-1检查所有标签文件确保class只包含0和1验证集mAP忽高忽低验证集太小仅29张no-mask仅20框属于正常现象应结合分类别指标和具体坏例分析不只看总体mAP图像无法读取corrupted image图片文件损坏或不是标准格式如.jpg实际为.png使用cv2.imread()逐张测试修复或删除损坏图片六、调试建议建议在训练前运行以下简单脚本验证数据加载是否正确importcv2 pathMaskDataSet/train/images/0001.jpglabel_pathMaskDataSet/train/labels/0001.txtimgcv2.imread(path)print(f图片Shape:{img.shape})# 期望 (H, W, 3)withopen(label_path,r)asf:print(f标签内容:{f.read()})观察变量img是否为None标签坐标值是否在0~1范围内。七、总结与下篇预告本文作为系列的开篇梳理了YOLOv5口罩目标检测项目的基本盘我们明确了目标检测与图像分类的区别掌握了149张图片、954个标注框的数据分布特点理解了目录结构中每个关键文件的职责并且通过流程图对数据如何一步步变成检测框有了全局印象。值得记住的是本项目的训练集存在约4.7:1的类别失衡且验证集规模较小这意味着我们在后续解读mAP指标时必须保持审慎。下一篇预告我们将深入YOLOv5s的模型内部从像素、卷积、特征图开始剖析BackboneFocus/CSP/SPP、NeckFPNPAN和Detect检测头是如何将一张640×640的图片编码为25200个候选框的敬请期待。版权说明本文为原创技术文章转载请注明出处。文中代码及配置均经过实际测试可根据项目需求修改扩展。如发现疏漏或错误欢迎在评论区交流讨论。

相关新闻

DAQ-GP-CT485电流互感器自动化测试方案与RS485通信实战

DAQ-GP-CT485电流互感器自动化测试方案与RS485通信实战

如果你在工业自动化、电力监测或能源管理领域工作,电流互感器的测试和校准可能是你日常工作中既基础又关键的一环。传统测试方法往往依赖笨重的标准设备、复杂的接线和手动记录数据,整个过程耗时且容易出错。而今天要介绍的 DAQ-GP-CT485 电流互感器测试…

2026/10/17 13:59:05 阅读更多 →
VC++多线程同步实战:Windows事件机制与生产者-消费者模型详解

VC++多线程同步实战:Windows事件机制与生产者-消费者模型详解

1. 项目概述:为什么多线程同步是Windows桌面开发的“必修课”?如果你在Windows平台上用Visual C(VC)开发过稍微复杂一点的桌面应用,比如一个需要实时处理数据的监控软件、一个需要后台下载同时保持界面响应的工具&…

2026/10/12 20:31:26 阅读更多 →
Eigen矩阵创建与初始化实战指南:从基础到性能优化

Eigen矩阵创建与初始化实战指南:从基础到性能优化

1. 项目概述:为什么Eigen的矩阵操作值得深究?如果你正在用C做数值计算、机器人、图形学或者机器学习,那么“Eigen”这个名字你肯定不陌生。它不是一个新潮的AI框架,而是一个久经沙场、在学术界和工业界都备受推崇的C模板库&#x…

2026/10/16 2:36:12 阅读更多 →

最新新闻

如何快速部署Qwen3-VL-32B-Heretic-MiniMax-H3-NVFP4:ComfyUI中5分钟替换CLIPLoader的完整流程

如何快速部署Qwen3-VL-32B-Heretic-MiniMax-H3-NVFP4:ComfyUI中5分钟替换CLIPLoader的完整流程

【免费下载链接】Qwen3-VL-32B-Heretic-MiniMax-H3-NVFP4 项目地址: https://ai.gitcode.com/hf_mirrors/Momoking/Qwen3-VL-32B-Heretic-MiniMax-H3-NVFP4 点击查看 免费下载 Qwen3-VL-32B-Heretic-MiniMax-H3-NVFP4 是面向 MiniMax-H3 视频生成的 NVFP4 量化文本…

2026/10/19 6:52:01 阅读更多 →
用25美元把普通眼镜变成AI眼镜?OpenGlass的接线、烧录与玩法拆解

用25美元把普通眼镜变成AI眼镜?OpenGlass的接线、烧录与玩法拆解

用25美元把普通眼镜变成AI眼镜?OpenGlass的接线、烧录与玩法拆解 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 落地在巴黎,推开一家咖啡馆的门&…

2026/10/19 6:52:01 阅读更多 →
Llama-3.2-1B-Instruct-FP8-Block 完全指南:轻松入门 Meta 轻量级指令模型的终极指南

Llama-3.2-1B-Instruct-FP8-Block 完全指南:轻松入门 Meta 轻量级指令模型的终极指南

【免费下载链接】Llama-3.2-1B-Instruct-FP8-Block 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Llama-3.2-1B-Instruct-FP8-Block 点击查看 免费下载 Llama-3.2-1B-Instruct-FP8-Block 是 Meta Llama 3.2 系列中 10 亿参数(1B)轻…

2026/10/19 6:52:01 阅读更多 →
世界模型:没有物理公式,AI如何从隐空间学会预测未来

世界模型:没有物理公式,AI如何从隐空间学会预测未来

你有没有想过,为什么现在AI生成的视频里,抛出去的球会沿抛物线落下,甚至翻滚的物体还会磕碰反弹?在很多圈内人的眼里,这背后靠的不是写死的物理引擎,而是一类被称为“世界模型”(World Model&am…

2026/10/19 6:52:01 阅读更多 →
世界模型如何理解物理规律:架构、训练与评估实战解析

世界模型如何理解物理规律:架构、训练与评估实战解析

世界模型这个词,这两年算是彻底从论文里火到朋友圈了。你可以把它理解成一个特殊的AI系统:给它一段画面、一个动作指令,它生成下一秒甚至未来几十秒的时空演进,让物体遮挡成立、重力成立、碰撞反弹也成立。我身边不少做视频生成、…

2026/10/19 6:52:01 阅读更多 →
Dify工作流实现双模型分栏流式对比:从原理到实践

Dify工作流实现双模型分栏流式对比:从原理到实践

最开始我对比两个模型的回答质量,用的还是最笨的办法:开两个浏览器标签页,把同一个问题分别粘进去,再左右来回切。遇到长回答还得自己对对齐位置,效率低到让人怀疑人生。直到我把这套动作搬进 Dify,用可视化…

2026/10/19 6:51:01 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →