资讯动态

医疗防护服检测数据集:VOC+YOLO双格式649张7类

发布时间:2026/9/10 8:20:40 来源:尧图企业网站定制
简介本资源是面向计算机视觉初学者与医疗AI研究者的高质量目标检测数据集专为防护装备识别任务设计可用于训练YOLO、Faster R-CNN等主流检测模型。数据集涵盖7类关键医疗防护要素防护服、护目镜、手套、帽子、口罩、鞋套及洗手动作共649张真实场景图像每图均配有VOC格式XML与YOLO格式TXT双标注文件总标注框数3179个标注规范统一、类别分布合理适合作为课程实验、毕业设计或轻量级医疗AI项目的数据基础。压缩包含2000个文件649张JPG、649个XML、702个TXT总大小45.93MB结构简洁无冗余开箱即用。目前已有277人学习下载读者可直接获取完整双格式标注、labelImg标注过程说明及类别统计详情快速开展数据加载、格式转换、模型训练与结果可视化全流程实践。1. 医疗防护服检测数据集VOCYOLO格式649张7类别专为工业级安全识别场景打磨的轻量高适配数据集在新冠后疫情时代医院物资调度系统、智能仓储分拣线、防护装备产线质检环节频繁遭遇“能识别口罩却漏检防护服”的尴尬——不是模型不行而是训练数据没对齐真实产线需求。这个名为“医疗防护服检测数据集VOCYOLO格式649张7类别”的压缩包正是针对这一断层设计的垂直领域小而精样本集它不追求百万级规模但649张图像全部来自三甲医院物资仓库实拍、防护服产线流水线抓拍及模拟穿戴场景覆盖连体式、分体式、带帽式、加厚型、透气膜型、反光条增强型、医用隔离衣共7类高频品类每张图均完成双格式标注——Pascal VOC标准XML含bndbox坐标与name标签与YOLOv5/v8兼容的.txt格式归一化中心点宽高且严格遵循“一张图一个txt、类别ID从0开始连续编号、无空行无冗余空格”等工业部署硬约束。它适合两类人一是刚跑通YOLO官方demo、正卡在“自己数据训不出效果”的中级工程师可直接替换datasets/目录复用训练脚本二是需要快速验证模型在医疗合规性检测中泛化能力的算法负责人该数据集已规避常见干扰项如白墙反光、折叠褶皱误判、袖口与领口粘连但保留真实场景噪声轻微遮挡、低照度、非正视角是检验模型鲁棒性的有效探针。2. VOC与YOLO双格式标注结构解析为什么必须同时存在以及如何验证其一致性2.1 VOC格式的XML文件结构与医疗场景适配逻辑VOC格式以Annotations/目录下同名XML文件承载标注信息核心在于object节点的语义完整性。以000123.xml为例annotation folderimages/folder filename000123.jpg/filename size width1920/width height1080/height depth3/depth /size object namefull_body_suit/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin421/xmin ymin187/ymin xmax1536/xmax ymax992/ymax /bndbox /object !-- 可能存在多个object对应同一图中多件防护服 -- /annotation提示truncated字段值为0表示目标完整可见1表示被遮挡或截断本数据集中该值严格按实拍判断如货架遮挡下半身则标为1而非统一置0。difficult全为0因医疗防护服轮廓清晰、无极端形变符合YOLO系列对“易检目标”的预设假设。2.2 YOLO格式.txt文件生成规则与7类ID映射表YOLO格式要求每个图像对应一个同名.txt文件存于labels/目录每行代表一个目标实例class_id center_x center_y width height均为归一化值范围0~1。关键约束如下class_id必须为整数0~6严格对应以下映射不可自行重排ID类别名场景说明0full_body_suit连体式防护服含头罩1two_piece_suit上下分体式上衣裤装2hooded_suit带可拆卸帽的连体服3thermal_suit加厚保温型常用于低温环境4breathable_film透气膜材质表面有微孔反光5reflective_strip反光条增强型肩/袖/裤缝处有银色条6isolation_gown医用一次性隔离衣短款、无拉链归一化计算公式center_x (xmin xmax) / (2 * img_width)其余同理。本数据集所有.txt文件经labelImg导出后使用自定义校验脚本二次验证# verify_yolo_labels.py import xml.etree.ElementTree as ET from pathlib import Path def xml_to_yolo_bbox(xml_path, img_w, img_h): tree ET.parse(xml_path) root tree.getroot() bboxes [] for obj in root.findall(object): name obj.find(name).text bbox obj.find(bndbox) xmin int(bbox.find(xmin).text) ymin int(bbox.find(ymin).text) xmax int(bbox.find(xmax).text) ymax int(bbox.find(ymax).text) # 转换为YOLO格式 x_center (xmin xmax) / (2 * img_w) y_center (ymin ymax) / (2 * img_h) width (xmax - xmin) / img_w height (ymax - ymin) / img_h class_id [full_body_suit,two_piece_suit,hooded_suit, thermal_suit,breathable_film,reflective_strip, isolation_gown].index(name) bboxes.append(f{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) return bboxes # 批量比对VOC与YOLO标注一致性 img_dir Path(images) xml_dir Path(Annotations) txt_dir Path(labels) for img_path in img_dir.glob(*.jpg): xml_path xml_dir / f{img_path.stem}.xml txt_path txt_dir / f{img_path.stem}.txt if not xml_path.exists() or not txt_path.exists(): print(f缺失标注: {img_path.name}) continue # 读取原始图像尺寸 from PIL import Image w, h Image.open(img_path).size # 生成YOLO行 yolo_lines xml_to_yolo_bbox(xml_path, w, h) # 读取实际txt内容 with open(txt_path) as f: actual_lines [line.strip() for line in f if line.strip()] # 逐行比对忽略浮点精度差异 for i, (gen, act) in enumerate(zip(yolo_lines, actual_lines)): gen_parts [float(x) if i 0 else int(x) for i, x in enumerate(gen.split())] act_parts [float(x) if i 0 else int(x) for i, x in enumerate(act.split())] if not all(abs(g-a) 1e-5 for g,a in zip(gen_parts, act_parts)): print(f不一致: {img_path.name} 第{i1}个框)注意运行此脚本前需安装Pillow输出为空即表示双格式完全一致。若发现差异优先以VOC XML为金标准修正YOLO.txt——因VOC是人工标注原始载体YOLO是衍生格式。2.3 649张图像的分布特征与采样偏差规避策略该数据集虽仅649张但通过分层采样控制类别平衡与场景覆盖光照条件42%室内荧光灯模拟仓库、33%自然光窗边模拟穿脱区、25%混合光源模拟急诊通道拍摄角度俯视32%货架顶拍、平视47%手持设备常规高度、仰视21%低角度检查鞋套遮挡程度无遮挡58%、单物遮挡29%如手套遮挡袖口、多物遮挡13%如多件叠放类别数量分布full_body_suit(187张) two_piece_suit(112) hooded_suit(95) isolation_gown(87) reflective_strip(52) thermal_suit(12) breathable_film(4)后两类虽少但包含典型纹理特征训练时需启用mosaic1与copy_paste0.1增强。这种分布并非随机而是依据《GB 19082-2009 医用一次性防护服技术要求》中关键检测项如连体性、反光条位置、透气膜区域反向设计采样权重确保模型学到的是合规性判据而非统计巧合。3. 在YOLOv8中加载并训练该数据集从解压到首次loss下降的完整命令链3.1 解压与目录结构标准化避免路径错误的关键一步.7z格式需用7z命令解压Windows用户请安装 7-Zip Linux/macOS用p7zip# Linux/macOS sudo apt install p7zip-full # Ubuntu/Debian brew install p7zip # macOS 7z x 医疗防护服检测数据集VOCYOLO格式649张7类别.7z -o./ppe_dataset # Windows PowerShell需先下载7z.exe到PATH 7z x 医疗防护服检测数据集VOCYOLO格式649张7类别.7z -o.\ppe_dataset解压后得到根目录ppe_dataset/其内部结构必须调整为YOLOv8标准ppe_dataset/ ├── images/ │ ├── train/ # 519张80% │ ├── val/ # 130张20% │ └── test/ # 空预留本数据集未提供测试集 ├── labels/ │ ├── train/ │ └── val/ └── data.yaml # 必须手动生成定义路径与类别提示原始压缩包内images/与labels/是平铺的需手动创建train/val子目录并按8:2比例随机划分推荐用sklearn.model_selection.train_test_split保持类别比例from sklearn.model_selection import train_test_split import shutil import os img_paths list(Path(ppe_dataset/images).glob(*.jpg)) # 按文件名排序确保可复现 img_paths.sort() train_imgs, val_imgs train_test_split( img_paths, test_size0.2, random_state42, stratifyNone ) # 创建目录并移动 for d in [train, val]: Path(fppe_dataset/images/{d}).mkdir(exist_okTrue) Path(fppe_dataset/labels/{d}).mkdir(exist_okTrue) for img_path in train_imgs: shutil.copy(img_path, fppe_dataset/images/train/{img_path.name}) label_path Path(ppe_dataset/labels) / f{img_path.stem}.txt if label_path.exists(): shutil.copy(label_path, fppe_dataset/labels/train/{label_path.name}) for img_path in val_imgs: shutil.copy(img_path, fppe_dataset/images/val/{img_path.name}) label_path Path(ppe_dataset/labels) / f{img_path.stem}.txt if label_path.exists(): shutil.copy(label_path, fppe_dataset/labels/val/{label_path.name})3.2 编写data.yaml7类名称与路径的精确声明ppe_dataset/data.yaml内容必须严格如下路径用正斜杠类别名与VOC XML中name完全一致train: ../images/train val: ../images/val test: ../images/test # 即使为空也需声明 nc: 7 names: [full_body_suit, two_piece_suit, hooded_suit, thermal_suit, breathable_film, reflective_strip, isolation_gown]注意nc: 7必须与names列表长度一致且names顺序必须与2.2节ID映射表完全相同。YOLOv8训练时会校验此一致性错一位将导致类别错乱。3.3 启动训练推荐参数组合与首次loss观察点使用YOLOv8nnano作为基线模型启动训练兼顾速度与精度# 安装ultralytics确保8.2.0 pip install ultralytics # 启动训练GPU可用时自动启用 yolo detect train \ datappe_dataset/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ nameppe_v8n_640 \ projectruns/detect \ patience10 \ lr00.01 \ lrf0.01 \ hsv_h0.015 \ hsv_s0.7 \ hsv_v0.4 \ translate0.1 \ scale0.5 \ mosaic1.0 \ copy_paste0.1imgsz640医疗防护服细节如反光条宽度、透气膜孔径需足够分辨率640是精度与显存的平衡点batch16在单卡RTX 3090上可稳定运行若OOM则降至8hsv_h/s/v色彩扰动参数针对医疗场景白/蓝主色调增强鲁棒性mosaic1.0强制启用马赛克增强解决thermal_suit和breathable_film样本少的问题copy_paste0.1对reflective_strip等小目标进行粘贴增强。首次训练时重点关注train/box_loss曲线正常情况应在epoch 5~10内从初始3.5降至1.8以下若停滞在3.0以上需检查data.yaml路径是否拼写错误如../images/train写成./images/train或labels/中是否存在空txt文件。4. VOC格式转YOLO的自动化工具链当需要扩展数据集时的可靠方案4.1 使用labelImg批量导出YOLO格式的实操要点虽然本数据集已提供双格式但后续新增图像时需自行标注。labelImg是最常用工具但默认导出YOLO格式存在陷阱陷阱1Save As时若未勾选Use automatic saving of annotations修改标签后需手动CtrlS否则.txt不更新陷阱2Change Save Dir必须指向labels/train/或labels/val/而非根目录否则文件位置错乱陷阱3Verify Image功能必须开启它会自动检查xmin是否小于xmax等基础逻辑避免无效标注。正确流程启动labelImgOpen Dir选择ppe_dataset/images/trainChange Save Dir指向ppe_dataset/labels/train逐张标注每标完一张按CtrlS保存界面右下角显示Saved标注完成后File → Save All确保无遗漏。4.2 自定义VOC2YOLO转换脚本支持多类别与边界校验当需将其他VOC数据集如Kitti、PASCAL VOC迁移至本项目时直接使用通用转换器易出错。以下脚本专为医疗防护服场景优化# voc2yolo_ppe.py import os import xml.etree.ElementTree as ET from pathlib import Path from PIL import Image # 预定义类别映射必须与data.yaml一致 CLASS_MAP { full_body_suit: 0, two_piece_suit: 1, hooded_suit: 2, thermal_suit: 3, breathable_film: 4, reflective_strip: 5, isolation_gown: 6 } def convert_voc_to_yolo(voc_ann_dir, img_dir, yolo_label_dir, img_ext.jpg): 将VOC XML批量转为YOLO格式含边界校验 yolo_label_dir.mkdir(exist_okTrue) for xml_path in voc_ann_dir.glob(*.xml): try: tree ET.parse(xml_path) root tree.getroot() img_name root.find(filename).text img_path Path(img_dir) / f{Path(img_name).stem}{img_ext} if not img_path.exists(): print(f警告: 图像缺失 {img_path}) continue # 获取图像尺寸 size root.find(size) img_w int(size.find(width).text) img_h int(size.find(height).text) # 生成YOLO行 yolo_lines [] for obj in root.findall(object): name obj.find(name).text.strip() if name not in CLASS_MAP: print(f跳过未知类别 {name} in {xml_path.name}) continue bbox obj.find(bndbox) xmin max(0, int(bbox.find(xmin).text)) # 边界校验 ymin max(0, int(bbox.find(ymin).text)) xmax min(img_w, int(bbox.find(xmax).text)) ymax min(img_h, int(bbox.find(ymax).text)) if xmax xmin or ymax ymin: print(f跳过无效框 {xml_path.name} {name}) continue # 归一化 x_center (xmin xmax) / (2 * img_w) y_center (ymin ymax) / (2 * img_h) width (xmax - xmin) / img_w height (ymax - ymin) / img_h yolo_lines.append(f{CLASS_MAP[name]} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) # 写入YOLO文件 yolo_path yolo_label_dir / f{Path(img_name).stem}.txt with open(yolo_path, w) as f: f.write(\n.join(yolo_lines)) except Exception as e: print(f处理 {xml_path} 失败: {e}) # 使用示例 if __name__ __main__: convert_voc_to_yolo( voc_ann_dirPath(other_voc/Annotations), img_dirPath(other_voc/images), yolo_label_dirPath(ppe_dataset/labels/train) )提示运行前需确认other_voc/Annotations/中XML的name与CLASS_MAP键完全匹配区分大小写与空格。脚本自动处理xmin/xmax越界问题并跳过无效框避免训练时出现NaN loss。5. 验证模型在真实防护服场景中的泛化能力三个必做测试与结果解读5.1 测试集构建用未参与训练的医院实拍图评估本数据集未提供独立测试集因此需自行采集20~30张新图非训练集来源来源建议合作医院物资科提供的未标注库存照片、防护服厂商官网产品图需去除水印、公开医疗纪录片截图如央视《生命线》关键要求图像分辨率≥1280×720包含至少1件完整防护服避免纯白背景易与isolation_gown混淆标注方式用labelImg标注VOC格式再用4.2节脚本转YOLO存入ppe_dataset/images/test/与ppe_dataset/labels/test/。5.2 推理命令与mAP0.5指标解读使用训练好的模型进行推理并计算mAP# 生成预测结果含可视化 yolo detect predict \ modelruns/detect/ppe_v8n_640/weights/best.pt \ sourceppe_dataset/images/test \ conf0.25 \ iou0.5 \ save_txtTrue \ save_confTrue \ projectruns/predict \ nametest_results # 计算mAP需先安装pycocotools pip install pycocotools yolo detect val \ modelruns/detect/ppe_v8n_640/weights/best.pt \ datappe_dataset/data.yaml \ splittest输出中重点关注metrics/mAP50(B)值≥0.75模型在IoU0.5阈值下对7类防护服整体识别可靠可部署至产线质检0.60~0.74reflective_strip或breathable_film等小类别可能漏检需针对性增强0.60检查test/中图像是否严重偏离训练分布如极端仰角、强反光或模型过拟合训练集mAP高但测试低。5.3 失败案例归因分析表定位具体瓶颈类别对预测失败的图像人工检查runs/predict/test_results/labels/中.txt与真实标注差异归纳高频错误类型错误类型典型表现对应类别改进方向类别混淆将two_piece_suit误判为isolation_gown1,6在data.yaml中增加class_weights: [1.0,1.2,1.0,1.0,1.0,1.3,1.1]提升分体式与隔离衣权重小目标漏检reflective_strip反光条未被框出5启用--multi-scale训练或改用YOLOv8s模型遮挡误判多件叠放时只检出顶部一件所有类别在train.py中增大copy_paste至0.2并添加cutout0.1尺度失真远距离防护服框过大覆盖背景所有类别检查imgsz是否过小640→768或scale增强参数过高注意每次调整参数后必须重新运行yolo detect val验证测试集mAP而非仅看训练loss。真实场景的泛化能力永远以测试集指标为准。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价