利用yolov5实现口罩佩戴检测算法

589 阅读3分钟

什么是YOLOV5?

YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,它使用单个神经网络来完成对象检测。YOLOV5是由Ultralytics公司开发生产的升级版YOLO系列模型,采用了最新的设计架构,包括更先进的特征提取、多尺度训练和数据增强等功能。该模型主要有三种版本:S型、M型和L型,每个版本有不同的模型大小和性能,可根据实际需求进行选择。

数据集

为了训练和测试口罩佩戴检测算法,我们需要使用相应的数据集。Mirrored面罩数据集是一个开源的用于口罩佩戴检测的数据集,其中包含超过5000个样例图像及其注释信息。该数据集对外开放,可以从该链接中下载:

github.com/bruceyoungs…

准备工作

在开始构建口罩佩戴检测器之前,您需要确保使安装了必要的工具和选项。以下是您需要准备的一些内容:

  1. Python 3.x
  2. PyTorch 1.7或更高版本
  3. torchvision
  4. NumPy
  5. OpenCV
  6. Pillow
pip install torch torchvision numpy opencv-python Pillow

训练YOLOV5模型

在进行训练之前,需要先下载 YOLOv5 的代码和 Mirrored数据集,并将其放置到相应的目录中。

克隆 YOLOv5 代码:

!git clone https://github.com/ultralytics/yolov5.git

克隆数据集:

!git clone https://github.com/bruceyoungsysu/MirrorMask_Dataset.git

接下来,我们需要将数据集划分为训练集和验证集。可以使用官方提供的数据集分割脚本来实现这一点:

!python yolov5/scripts/create_folds.py --data MirrorMask_Dataset/metadata/data.yaml --num-stratified-folds 10 --no-random-shuffle

此命令将创建一个名为“folds_v{set_size}”的新文件夹,其中“{set_size}”对应于指定的训练和验证数据集大小。例如,如果指定的大小为“0.9,0.1”,则生成的文件夹名称为“folds_v10”。

然后,我们需要用文本编辑器打开 data.yaml 文件,并修改其中的路径,以适应我们的文件布局。例如,如果您的数据目录如下所示:

data/
  - train/
    - images/
    - labels/
  - val/
    - images/
    - labels/

则需要将 data.yaml 中的路径配置为以下内容:

train: data/train/images
val: data/val/images

nc: 3
names: ['mask', 'no-mask', 'wrong-mask']

其中,“nc”表示需要检测的类别数量,“names”指定标签类别的名称。

最后,可以开始训练模型。下面是一个实例命令:

!python yolov5/train.py --img 640 --batch 16 --epochs 100 --data MirrorMask_Dataset/metadata/data.yaml --cfg yolov5l.yaml --weights yolov5l.pt --name yolov5l_results --device 0

接着,我们将逐个解释并说明上述命令中的各参数:

  • --img: 对输入图像进行缩放的尺寸,建议640或更高
  • --batch: 每批次处理的图像张数
  • --epochs: 训练时进行迭代的最大次数
  • --data: 所使用数据集的路径及其信息
  • --cfg: 所使用模型的配置文件(S/M/L/XL)
  • --weights: 预训练好的权重文件路径
  • --name: 训练结果保存的名称
  • --device: 所使用的GPU设备序号

算法测试

完成模型训练后,我们可以通过运行下面的脚本以测试算法:

!python yolov5/detect.py --source MirrorMask_Dataset/test/images --weights runs/train/yolov5l_results/weights/best.pt --conf 0.4 --save-txt

在执行此命令之前,确保您已经下载了 Mirrored 数据集并将其保存到了相应的路径。该命令的主要参数如下:

  • --source:待检测图像的源目录路径
  • --weights:先前训练好的模型的权重路径
  • --conf:置信度阈值,可用来过滤一些不太可能的预测结果并提高准确性。
  • --save-txt:将检测结果写入.txt文件

这样YOLOv5就能逐个检测每张图像中是否佩戴口罩。