口罩数据集2万张 yolo目标检测
近2万张图片集,全网最多最全,
目标检测任务有两个对象类名称,“Mask”代表戴口罩的数据样本,标签值为0;“No Mask”代表不带口罩的数据样本,标签值为1。
口罩检测数据集 (Face Mask Detection Dataset)
描述: 本数据集旨在支持对戴口罩和未戴口罩的人脸进行自动检测,特别适用于公共场所的监控、健康安全管理、智能门禁系统等领域。通过使用该数据集训练的模型可以帮助及时发现并分类人脸是否佩戴口罩,提高公共卫生安全。
类别:
Mask
(戴口罩)No Mask
(未戴口罩)
数据量:
- 总图片数: 约20,000张
- 标注格式: YOLO 格式
文件格式:
- 图像采用常见的JPEG或PNG格式。
- 标注文件采用YOLO格式,即每个图像对应一个文本文件,其中包含边界框坐标及类别标签。例如,对于
Mask
类别的标注,文本文件中的每一行将按照以下格式表示:<class_id> <x_center> <y_center> <width> <height>
,其中<class_id>
为0(代表Mask
)或1(代表No Mask
),其余参数均为归一化后的浮点数值。
数据集结构
确保您的数据集目录结构如下所示(这只是一个示例结构,您可以根据实际情况调整):
face_mask_detection_dataset/
├── images/
│ ├── train/
│ │ ├── img1.jpg
│ │ ├── img2.jpg
│ │ └── ...
│ ├── val/
│ │ ├── img15001.jpg
│ │ ├── img15002.jpg
│ │ └── ...
├── labels/
│ ├── train/
│ │ ├── img1.txt
│ │ ├── img2.txt
│ │ └── ...
│ ├── val/
│ │ ├── img15001.txt
│ │ ├── img15002.txt
│ │ └── ...
└── data.yaml
data.yaml
配置文件
创建一个名为 data.yaml
的配置文件,内容如下:
train: ./face_mask_detection_dataset/images/train
val: ./face_mask_detection_dataset/images/val
nc: 2 # 类别数量
names: ['Mask', 'No Mask'] # 类别名称
使用方法
1. 准备环境
确保安装了必要的Python库,如ultralytics
(用于YOLOv8)和其他相关依赖:
pip install ultralytics
2. 修改配置文件
根据实际路径修改 data.yaml
文件中的路径。
3. 训练脚本
以下是一个使用YOLOv8进行训练的Python脚本示例:
from ultralytics import YOLO
import torch
# 设置设备
device = 'cuda' if torch.cuda.is_available() else 'cpu'
# 加载预训练模型或从头开始训练
model = YOLO('yolov8n.pt') # 使用预训练的YOLOv8n模型
# model = YOLO() # 从头开始训练
# 开始训练
results = model.train(
data='path/to/data.yaml', # 指定数据集配置文件路径
epochs=100, # 训练轮次
batch=16, # 批处理大小
imgsz=640, # 输入图像尺寸
workers=8, # 数据加载线程数
device=device, # 使用GPU设备编号,默认为0
project='face_mask_detection', # 保存结果的项目名称
name='exp', # 实验名称
exist_ok=True # 如果存在相同实验名,覆盖旧的结果
)
# 可视化训练结果
results.plot()
# 保存模型
model.save('face_mask_detection_model.pt')
训练结果
模型: YOLOv8
性能指标:
- 准确率 (Accuracy): [根据实际结果填写]
- 精确度 (Precision): [根据实际结果填写]
- 召回率 (Recall): [根据实际结果填写]
- F1分数 (F1 Score): [根据实际结果填写]
- 平均精度均值 (mAP@0.5:0.95): [根据实际结果填写]
模型文件:
- 提供了YOLOv8的预训练模型文件,可以直接用于推理或进一步微调。
总结
这个口罩检测数据集提供了约20,000张高质量的真实场景图片,并且已经使用YOLO格式进行了标注。数据集涵盖了两种不同的目标类别:戴口罩和未戴口罩。通过使用YOLOv8框架,可以有效地识别和分类这些目标。提供的预训练模型可以在实际应用中提供可靠的检测结果。
特点
-
多样性:
- 包含多种不同类型的场景,覆盖了各种光线条件和背景。
- 图像采集自真实场景,具有较高的多样性和实用性。
-
标注质量:
- 图像采用高质量的标注,包括边界框和类别标签。
- 提供YOLO格式的标注文件,方便在深度学习框架中使用。
-
规模适中:
- 20,000张图像的数据集规模适中,既足够训练模型,又不会导致过长的训练时间。
-
可扩展性:
- 数据集可以进行扩充,以增加更多图像数据,提高模型的泛化能力。
标注格式转换
虽然本数据集提供的是YOLO格式的标注文件,但如果您需要将其转换为VOC或COCO格式,可以通过以下步骤实现:
-
YOLO到VOC格式转换:
-
可以使用现有的脚本工具,如
labelme
或自定义脚本来进行转换。以下是一个简单的Python脚本示例:import os import xml.etree.ElementTree as ET def yolo_to_voc(yolo_path, voc_path, image_path): with open(yolo_path, 'r') as f: lines = f.readlines() image_name = os.path.basename(image_path).split('.')[0] image_ext = os.path.basename(image_path).split('.')[-1] image = cv2.imread(image_path) height, width, _ = image.shape annotation = ET.Element("annotation") folder = ET.SubElement(annotation, "folder").text = "images" filename = ET.SubElement(annotation, "filename").text = f"{image_name}.{image_ext}" size = ET.SubElement(annotation, "size") ET.SubElement(size, "width").text = str(width) ET.SubElement(size, "height").text = str(height) ET.SubElement(size, "depth").text = "3" for line in lines: class_id, x_center, y_center, w, h = map(float, line.strip().split()) xmin = int((x_center - w / 2) * width) ymin = int((y_center - h / 2) * height) xmax = int((x_center + w / 2) * width) ymax = int((y_center + h / 2) * height) object_elem = ET.SubElement(annotation, "object") ET.SubElement(object_elem, "name").text = "Mask" if class_id == 0 else "No Mask" ET.SubElement(object_elem, "pose").text = "Unspecified" ET.SubElement(object_elem, "truncated").text = "0" ET.SubElement(object_elem, "difficult").text = "0" bndbox = ET.SubElement(object_elem, "bndbox") ET.SubElement(bndbox, "xmin").text = str(xmin) ET.SubElement(bndbox, "ymin").text = str(ymin) ET.SubElement(bndbox, "xmax").text = str(xmax) ET.SubElement(bndbox, "ymax").text = str(ymax) tree = ET.ElementTree(annotation) tree.write(voc_path) # 示例用法 yolo_to_voc('path/to/yolo_label.txt', 'path/to/voc_annotation.xml', 'path/to/image.jpg')
-
-
YOLO到COCO格式转换:
-
可以使用现有的工具,如
pycocotools
或自定义脚本来进行转换。以下是一个简单的Python脚本示例:import json import os from PIL import Image def yolo_to_coco(yolo_dir, image_dir, output_file): categories = [ {"id": 0, "name": "Mask"}, {"id": 1, "name": "No Mask"} ] images = [] annotations = [] annotation_id = 0 for i, filename in enumerate(os.listdir(yolo_dir)): image_filename = os.path.join(image_dir, filename.replace('.txt', '.jpg')) if not os.path.exists(image_filename): continue image = Image.open(image_filename) width, height = image.size images.append({ "id": i, "file_name": os.path.basename(image_filename), "width": width, "height": height }) with open(os.path.join(yolo_dir, filename), 'r') as f: lines = f.readlines() for line in lines: class_id, x_center, y_center, w, h = map(float, line.strip().split()) x_center *= width y_center *= height w *= width h *= height xmin = x_center - w / 2 ymin = y_center - h / 2 xmax = x_center + w / 2 ymax = y_center + h / 2 annotations.append({ "id": annotation_id, "image_id": i, "category_id": int(class_id), "bbox": [xmin, ymin, w, h], "area": w * h, "iscrowd": 0 }) annotation_id += 1 coco_data = { "images": images, "annotations": annotations, "categories": categories } with open(output_file, 'w') as f: json.dump(coco_data, f, indent=4) # 示例用法 yolo_to_coco('path/to/yolo_labels', 'path/to/images', 'output_coco.json')
-
希望这些信息和脚本能帮助您更好地理解和使用这个数据集。如果您需要更详细的信息或特定的帮助