什么是YOLOV5?
YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,它使用单个神经网络来完成对象检测。YOLOV5是由Ultralytics公司开发生产的升级版YOLO系列模型,采用了最新的设计架构,包括更先进的特征提取、多尺度训练和数据增强等功能。该模型主要有三种版本:S型、M型和L型,每个版本有不同的模型大小和性能,可根据实际需求进行选择。
数据集
为了训练和测试口罩佩戴检测算法,我们需要使用相应的数据集。Mirrored面罩数据集是一个开源的用于口罩佩戴检测的数据集,其中包含超过5000个样例图像及其注释信息。该数据集对外开放,可以从该链接中下载:
准备工作
在开始构建口罩佩戴检测器之前,您需要确保使安装了必要的工具和选项。以下是您需要准备的一些内容:
- Python 3.x
- PyTorch 1.7或更高版本
- torchvision
- NumPy
- OpenCV
- 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就能逐个检测每张图像中是否佩戴口罩。