当前位置: 首页 > news >正文

快速跑通YOLO入门项目——口罩检测

备注

1.采用模型:yolov5

  • 社区使用最广,教程、代码和预训练模型非常多。

  • 基于 PyTorch,安装和上手都很方便。

  • 适合做入门项目和快速实验。

2.数据集:https://public.roboflow.com/object-detection/mask-wearing/4(选v5+torch会把配置文件一并给你)口罩数据集

3.解释器:python3.10

4.虚拟环境:anaconda3

前期准备

1.必要准备

准备pycharm和anaconda3,并具有创建pychon3.10以上环境的能力

2.环境搭建

(1)准备一个空文件夹,有git可以直接git clone,没有就下载zip再解压。https://github.com/ultralytics/yolov5

(2)用pycharm打开这个文件夹,创建和激活虚拟环境,

conda create -n yolov5 python=3.10 -y

conda activate yolov5

如果前面搞坏了就删了重新创建。

conda deactivate

conda remove -n yolov5 --all -y

路径前面有这个括号虚拟环境的名称就进入成功了,可以pip list看看是不是初始的几个简单的包

3.依赖下载

在虚拟环境下

pip install -r requirements.txt

等待依赖下载完成

有nvidia显卡可以另外下载CUDA和对应版本的pytorch来让GPU参与训练。当前默认是CPU训练(比较慢)

4.快速自检

python detect.py --weights weights/yolov5s.pt --source data/images/bus.jpg --img 640

看看runs/detect/exp/有无输出,有则ok,否则检查前面的问题。

操作过程

1.下载和解压数据集

在网站上下载对应的数据集并解压,已经配好了的。

yolov5/
├─ datasets/ # 数据集文件夹
│  └─ mask/  # 其中一份数据集 
│     ├─ train/
│     │  ├─ images/   # 训练集图片
│     │  └─ labels/   # 训练集标签(txt)
│     ├─ val/
│     │  ├─ images/   # 验证集图片
│     │  └─ labels/   # 验证集标签(txt)
│     └─ test/        # 可选
│        ├─ images/
│        └─ labels/

先将下载好的数据集文件夹名改一个比较简单的,防止格式有误。比如原名->Mask Wearing Dataset

因为YOLOv5 默认用 val/ 作为验证集,所以把 valid 改名为 val

yolov5/下增加一个配置文件mask.yaml

train: datasets/Mask Wearing Dataset/train/images
val: datasets/Mask Wearing Dataset/val/images
test: datasets/Mask Wearing Dataset/test/imagesnc: 3
names: ['with_mask', 'without_mask', 'mask_weared_incorrect']# ⚠ 注意:names 的顺序要和数据集标签里的类别一致(Roboflow 的 mask 数据集一般就是这 3 类)

2.开始训练

yolov5/下运行

python train.py --img 640 --batch 8 --epochs 50 --data mask.yaml --weights yolov5s.pt 即开始训练(没什么意外的话),其实用CPU的话不用管batch,epoch第一次练可以先设为5,看看整个流程能不能跑完,后面再加

参数详解

--img 640

  • 指定训练时输入图片的大小(这里是 640x640)。
  • YOLOv5 会把你的图片 resize 到这个尺寸再训练。
  • 常见取值:4166401280
  • 越大,精度可能更高,但训练速度和显存占用都会增加。

--batch 16

  • 批次大小(batch size),每次训练送入 GPU 的图片数量。
  • 取值受限于显存:
    • 显存 4GB:--batch 8
    • 显存 8GB:--batch 16
    • 显存 12GB+:--batch 32
  • 如果显存不足,会报 CUDA out of memory 错误,那就改小点。

--epochs 50

  • 训练总轮数。
  • 每个 epoch = 训练集完整走一遍。
  • 一般从 50~100 起步,根据数据量大小调节。
  • 数据少可以少点,多的话就多点(100–300 都可以)。

3.训练结束

结束后,提供了一些过程性和结果性的内容文件

runs/train/exp/
├─ weights/
│   ├─ best.pt   # 验证集表现最好
│   └─ last.pt   # 最后一轮
├─ results.png   # 精度曲线图
├─ confusion_matrix.png
└─ opt.yaml      # 参数配置记录

(1)模型文件(训练成果的核心)

训练完成后,YOLOv5 会在 runs/train/exp/ 目录下保存结果:

  • weights/last.pt —— 训练最后一轮的模型权重
  • weights/best.pt —— 在验证集上表现最好的模型权重(一般用这个做推理)

👉 这两个文件就是“训练成果”,后续推理、部署都用 best.pt

(2)训练过程记录(日志 + 图表)

runs/train/exp/ 目录下还会有很多文件,比如:

  • results.png

    包含了 loss 曲线、mAP 曲线、precision/recall 变化趋势。

    • 你可以直观地看出模型是否收敛、有没有过拟合。
  • confusion_matrix.png
    类别之间预测的混淆矩阵,可以看出模型在哪些类别上容易混淆。

  • labels.jpg
    展示了训练集标注框的分布情况。

  • train_batch0.jpg, train_batch1.jpg
    随机挑选的训练图片+标注,可检查数据是否正确加载。

(3)查看验证结果

在训练最后,会输出类似这样的指标:

Class     Images  Instances          P          R      mAP50   mAP50-95
all         100       300      0.912      0.878      0.901      0.754
with_mask    40       120      0.935      0.910      0.925      0.800
without_mask 30       100      0.890      0.850      0.880      0.720
mask_weared  30        80      0.910      0.870      0.900      0.740
  • P = Precision(查准率)
  • R = Recall(查全率)
  • mAP@0.5 = mAP 在 IoU=0.5 时的平均精度
  • mAP@0.5:0.95 = 更严格的指标,越高说明模型泛化更好

4.推理测试

测试用例:自备的一张或多张众人戴口罩的图片,最好是一张图中有些人有戴有些人没戴的,上网下载即可。

yolov5/data/images/下新建一个文件夹,用来装本次测试图片

单张图片检测:

python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.25 --source data/images/maskers/test1.jpg

多图检测:

python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.25 --source data/images/

如果是视频文件:

python detect.py --weights runs/train/exp/weights/best.pt --source test.mp4

如果用摄像头实时检测:

python detect.py --weights runs/train/exp/weights/best.pt --source 0

参数说明:

  • --weights:你训练好的模型(推荐用 best.ptlast.pt就是最后一次训练的结果模型)
  • --img 640:输入图片大小(要和训练时一致),不输入也可以,默认就是一致的
  • --conf 0.25:预测框的置信度阈值
  • --source:图片所在目录,也可以是单张图片路径

运行完成后,结果会自动保存在:runs/detect/exp/

后日谈

1.增量训练

已经训练好了一个口罩检测模型,如果以后想继续训练,有两种常见方式:


重新从头训练(fresh training)

  • train.py 再跑一遍,指定同样的 --data mask.yaml--weights yolov5s.pt(或者换更大的 YOLOv5m/l/x)。
  • 这样会完全忽略之前的训练成果,从头开始。
  • 适合 你有全新的数据集(比如换了任务、数据分布完全不同)。

增量训练 / 继续训练(resume training)

YOLOv5 支持从已有的 checkpoint 接着训练,相当于“增量训练”。

✅ 方法一:resume

如果你只是想从上次的中断继续:

python train.py --resume

默认会从 runs/train/exp/weights/last.pt 接着训练。


✅ 方法二:指定权重文件

如果你有新的数据,想在之前训练好的模型上微调,可以指定权重:

python train.py --img 640 --batch 16 --epochs 50 --data mask.yaml --weights runs/train/exp/weights/best.pt

区别:

  • --weights yolov5s.pt 👉 从官方 COCO 预训练模型开始(更通用)
  • --weights best.pt 👉 从你自己训练好的口罩模型继续训练(更快收敛,适合新增数据)

迁移学习(transfer learning)

  • 如果你以后换任务(比如要做安全帽检测、手机检测),也可以把 best.pt 当作起点:
python train.py --data helmet.yaml --weights runs/train/exp/weights/best.pt --epochs 100
  • YOLO 会自动把检测头替换成新任务的类别数(比如 nc=1 只检测“安全帽”)。
  • 这种做法通常比从头训练快得多,而且准确率更高。

快速上手暂且如此,实际上需要根据项目需求做出一些改变。

问题记录

http://www.sczhlp.com/news/62348/

相关文章:

  • 回溯专题其五(棋盘篇)
  • 四川建设厅报名网站电脑培训班电脑培训学校
  • 建单页网站网站设计师接单
  • 做网站一般链接什么数据库电子商务公司图片
  • 棕色网站产品宣传短视频制作
  • 记一次荒唐错误
  • ARM64 linux页表项
  • HyperWorks许可报警
  • Net8 限制固定IP访问(防黑客)
  • 房地产行业网站西安关键词seo公司
  • 襄阳做网站公司有哪些网络营销公司加盟
  • 网站后台管理系统内容中国建设银行官网站住房公积金
  • 重庆响应式网站建设网站主题包括
  • 建设彩票网站需要多少投资北京官方网站网
  • 做盗版电影网站问题西安网站建设全包
  • 企业网站建设方案新闻腾讯视频分享到wordpress
  • 免费查企业app排行榜seo交流中心
  • 易语言做网站爆破工具没有网站可以做cpc吗
  • 爬虫——夜幕团队JS逆向系列课
  • 算法面试简单小结
  • 如何使用qq邮箱做网站如何购买域名和空间
  • designer怎么做网站ui交互设计课程培训
  • 网站建设 山西网络营销失败案例及分析
  • 南宁网站制作价格恒峰网站建设问题
  • dedecms网站首页个人博客系统源码
  • 怎么做一个网站怎么样自己做网站可以随便起名字吗
  • 新素材网站网站修改建议
  • 张家口网站设计厦门十大软件公司
  • 专业做网站优化排名什么人适合学ui设计
  • 做网站软件流程服装设计公司英文