ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YOLO妇科皮肤病检测数据集实战:4418张带标签图像训练与避坑指南

YOLO妇科皮肤病检测数据集实战:4418张带标签图像训练与避坑指南 简介本资源为面向YOLO系列目标检测算法的妇科皮肤病图像数据集适用于医学图像识别方向的算法学习与模型训练覆盖黑色素、猴痘、水痘、痤疮、疣、花斑癣、粉刺、银屑病、湿疹、癣等多类皮肤病变。数据集已按训练与验证需求划分完毕并附带data.yaml配置文件可直接适配yolov5、yolov7、yolov8、yolov9、yolov10及yolo11等主流版本。压缩包共2000个文件以xml标注文件为主同时提供YOLO格式txt与VOC格式xml两套标签分别存放于独立文件夹便于不同框架直接读取YOLO标签采用类别索引与归一化中心点、宽高坐标符合标准检测训练规范。整包约169.39MB目录结构清晰已有98人学习下载。读者可据此快速搭建皮肤病检测实验环境完成模型训练、验证与类别对比分析省去数据清洗与格式转换环节。1. 妇科皮肤病检测数据集4418 张带标签图像能直接喂给 YOLO 吗手里这份资源叫「yolo算法-妇科皮肤病数据集-4418张图像带标签」覆盖黑色素、猴痘、水痘、痤疮、疣、花斑癣、粉刺、银屑病、湿疹、癣十类皮肤病变。它不是单纯的图片压缩包而是已经按目标检测任务整理好的成品图像、YOLO 格式 txt 标签、VOC 格式 xml 标签、划分好的训练验证目录外加一份 data.yaml。对正在找「yolo系列算法目标检测数据集」的人来说这类资源的稀缺点不在图片数量而在于标签格式双份、目录结构完整、拿到就能接进 yolov5 到 yolo11 的训练管线。适合两类人一类是想跑通皮肤病检测 demo 的算法工程师另一类是拿它做数据增强、类别不平衡、小目标检测实验的研究者。下面按「这份资源是什么 → 怎么接进训练 → 哪里会翻车」的顺序拆开讲。2. 数据集结构与标签格式先看清目录再动手2.1 目录布局与 data.yaml 的对应关系拿到压缩包解压后常见做法是先别急着改路径用一条命令把目录树打出来。这份资源的典型结构是 images 与 labels 平行train/val 各自成对VOC 的 xml 单独放一个文件夹。先确认三件事图像和标签是否同名、类别索引是否从 0 连续、data.yaml 里的 path 是不是相对路径。# 打印两层目录确认 images/labels 是否成对 find . -maxdepth 2 -type d | sort # 统计图像数量和简介里的 4418 对一下 find ./images -type f \( -name *.jpg -o -name *.png \) | wc -l # 抽查一个标签文件看类别索引和坐标范围 head -n 5 ./labels/train/img_0828_234.txt逻辑说明第一条命令只列目录避免被几千个文件名刷屏第二条用wc -l核对图像总数如果明显少于 4418多半是解压不完整或混入了非图像文件第三条抽查标签YOLO 格式每行是class x_center y_center width height五个值用空格分隔坐标必须是 0 到 1 之间的归一化值。如果看到大于 1 的数说明这份标签是像素坐标没归一化直接训练会全框错位。data.yaml 是整份资源的入口常见字段是path、train、val、nc、names。nc必须等于 10names的顺序必须和标签里的类别索引严格对应。这里有个血泪经验很多人只改path不改names顺序训练能跑起来但混淆矩阵会整体错位最后模型把痤疮认成水痘还找不到原因。2.2 YOLO txt 与 VOC xml 双格式怎么选资源同时给了 txt 和 xml不是让你两个都用而是让你按框架选。YOLO 系列v5/v7/v8/v9/v10/v11直接吃 txt如果你要转 COCO、做 MMDetection 或 MMrotate 那类框架的实验xml 更省事因为 VOC 转 COCO 的脚本成熟。判断标准很简单训练入口是 ultralytics 就用 txt训练入口是 mmdetection 或需要 json 标注就用 xml 起步。格式存放位置坐标类型适用框架转换成本YOLO txtlabels/归一化 0-1yolov5~yolo11零成本VOC xmlAnnotations/像素绝对值mmdetection、COCO需转 json选 txt 时要注意一个细节YOLO 的x_center y_center是框中心点不是左上角。有些从 VOC 转过来的脚本会漏掉除以宽高这一步结果标签全挤在左上角。验证方法是对着一张图把标签画出来框和病灶对不上就说明转换环节有问题。2.3 类别不平衡十类皮肤病的真实分布十类病变里黑色素、痤疮、湿疹通常样本多猴痘、水痘、疣这类偏少。训练前先统计每个类别的框数量别等训练完看混淆矩阵才发现某类几乎没学到。import os from collections import Counter label_dir ./labels/train counter Counter() for f in os.listdir(label_dir): if not f.endswith(.txt): continue with open(os.path.join(label_dir, f)) as fp: for line in fp: cls int(line.split()[0]) counter[cls] 1 for cls_id in sorted(counter): print(fclass {cls_id}: {counter[cls_id]} boxes)逻辑说明遍历 train 下所有 txt取每行第一个字段作为类别索引累加。参数上label_dir换成你的实际路径即可。跑完如果发现最少类和最多类差一个数量级常见做法是开 YOLO 的cls损失权重、用 mosaic 增强或者在 data.yaml 之外单独做重采样。别直接复制少数类图片容易过拟合到那几张。3. 接进 YOLOv8/v11 训练从 data.yaml 到第一个 epoch3.1 环境与依赖别在版本上翻车ultralytics 的版本迭代快yolov8 和 yolo11 的 API 基本一致但和 yolov5 的仓库是两套。这份资源标称适用 v5 到 v11实操上我一般分两条路v8/v9/v10/v11 走 ultralytics 统一接口v5/v7 走各自的仓库。先装环境再谈训练。# 推荐用虚拟环境避免和系统包冲突 python -m venv yolo_env source yolo_env/bin/activate # 装 ultralytics覆盖 v8/v9/v10/v11 pip install ultralytics # 验证安装和版本 yolo version逻辑说明python -m venv建独立环境source激活Windows 用yolo_env\Scripts\activate。pip install ultralytics会连带装 torch、torchvision如果机器有 CUDA建议先去 pytorch 官网拿对应 CUDA 版本的安装命令再装 ultralytics否则可能装成 CPU 版训练慢到怀疑人生。yolo version确认装上了再往下走。3.2 改 data.yaml 与启动训练data.yaml 是唯一必须改的文件。把path指向解压后的数据集根目录train、val指向 images 下的子目录。注意 YOLO 的路径解析是相对path的写绝对路径也行但换机器就得再改。# data.yaml 示例按实际目录调整 path: /data/skin_dataset train: images/train val: images/val nc: 10 names: 0: melanoma 1: monkeypox 2: chickenpox 3: acne 4: wart 5: tinea_versicolor 6: comedo 7: psoriasis 8: eczema 9: tinea逻辑说明nc必须和 names 条数一致names 顺序必须和标签索引一致。类别英文名可以按你的习惯改但改了之后评估脚本里的映射也要同步。启动训练yolo detect train \ data./data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ device0参数说明model用预训练权重能明显加快收敛yolov8n.pt是最小的显存紧张就选它imgsz640是常见输入尺寸皮肤病病灶偏小可以试 800 或 1024但显存翻倍batch16按显存调OOM 就减半device0指定第一块 GPUCPU 训练去掉这行但会很慢。训练日志里重点看box_loss、cls_loss和 mAP50前几个 epoch loss 不降通常是学习率或标签问题。3.3 验证与推理确认模型真的学到了训练完在 runs 目录下会有best.pt拿它跑验证和单图推理。验证看整体指标推理看具体框得对不对。# 在验证集上评估 yolo detect val modelruns/detect/train/weights/best.pt data./data.yaml # 对单张图推理并保存结果 yolo detect predict \ modelruns/detect/train/weights/best.pt \ source./images/val/img_0828_234.jpg \ saveTrue \ conf0.25逻辑说明val会输出 mAP50、mAP50-95 和每类指标重点看少数类是不是接近 0。predict的conf0.25是置信度阈值皮肤病病灶边界模糊阈值太高会漏检太低会误检常见做法是先在验证集上扫 0.1 到 0.5 找平衡点。saveTrue把带框的图存到 runs 目录肉眼核对比看数字更直接。4. 避坑与排查标签、路径、显存这三处最容易出事4.1 训练 loss 不降标签坐标超范围现象训练几个 epoch 后box_loss一直在高位震荡mAP 接近 0。原因标签坐标没归一化或者混入了像素坐标的 txt。解决写个脚本扫一遍所有标签任何坐标大于 1 就报错定位到具体文件重新用 VOC xml 转一次。import os bad [] for root, _, files in os.walk(./labels): for f in files: if not f.endswith(.txt): continue p os.path.join(root, f) with open(p) as fp: for i, line in enumerate(fp): vals line.split() if len(vals) ! 5: bad.append((p, i, 字段数不对)) continue coords list(map(float, vals[1:])) if any(c 0 or c 1 for c in coords): bad.append((p, i, 坐标越界)) for b in bad[:20]: print(b) print(问题文件数:, len(bad))逻辑说明遍历 labels 下所有 txt检查每行是否 5 个字段、坐标是否在 0 到 1。只打印前 20 条避免刷屏最后给总数。跑出来有问题就说明这份标签需要重新归一化别硬训。4.2 路径写错训练报「No labels found」现象启动训练立刻报找不到标签或图像数为 0。原因data.yaml 的path和train拼接后指向了不存在的目录或者 images 和 labels 没在同一层级。解决用ls逐层确认YOLO 默认在 images 同级找 labels目录名必须是images和labels不能改成imgs。4.3 显存 OOM 与 batch 设置现象训练中途报 CUDA out of memory。原因imgsz或batch超过显存。解决先把 batch 减半还不行就降 imgsz 到 512或者换更小的模型n 换 s 是反向n 最小。另外workers太多也会吃内存设成 4 或 8 就够。4.4 类别索引与 names 错位现象训练正常但混淆矩阵里类别名和实际对不上。原因data.yaml 的 names 顺序和标签索引不一致。解决抽一张图用标注工具打开对应 txt看类别索引再和 names 逐条核对。这个坑最隐蔽因为指标看着正常只有肉眼看预测框才发现。4.5 验证集泄漏进训练集现象验证 mAP 高得离谱换新图就崩。原因train 和 val 里有重复或高度相似的图像。解决对 train 和 val 的图像做哈希去重皮肤病图像如果有同一患者的多张近似图要按患者划分而不是随机划分。5. 进阶技巧用双格式标签做交叉验证与数据增强这份资源给的双格式标签最大的价值不是二选一而是互相校验。我一般会写个脚本把 VOC xml 转成 YOLO txt再和资源自带的 txt 逐行比对差异超过阈值的文件单独拎出来人工看。这一步能抓出转换脚本的 bug也能发现标注本身的不一致。具体做法用 xml 解析出像素坐标按图像宽高归一化和 txt 里的五个值对比中心点偏差超过 0.01 就标记。import xml.etree.ElementTree as ET from PIL import Image def xml_to_yolo(xml_path, img_path): tree ET.parse(xml_path) root tree.getroot() w, h Image.open(img_path).size rows [] for obj in root.findall(object): cls obj.find(name).text bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) xc (xmin xmax) / 2 / w yc (ymin ymax) / 2 / h bw (xmax - xmin) / w bh (ymax - ymin) / h rows.append((cls, xc, yc, bw, bh)) return rows逻辑说明解析 xml 的 object 节点取 bndbox 四个角点换算成 YOLO 的中心点加宽高归一化格式。w, h从原图读不能用固定值。拿到 rows 后和 txt 对比类别名要先映射成索引再比。这个交叉验证跑一遍基本能确认标签质量。数据增强方面皮肤病图像的颜色和纹理是重要特征慎用大幅度的 HSV 偏移容易把癣和湿疹的颜色特征改没。mosaic 和 mixup 可以用但 mixup 在医学图像上要小心两张病灶叠一起可能产生不存在的病变形态。我一般开 mosaic关 mixup加一点随机旋转和水平翻转。另外十类里小目标多imgsz提到 800 对小病灶召回有帮助代价是显存和训练时间。还有一个容易被忽略的点这份数据集的类别里有猴痘、水痘这类传染病相关病变做 demo 没问题但如果要往临床方向走必须确认数据来源和伦理合规别拿公开数据集直接当诊断依据。技术验证和实际部署是两回事模型在验证集上的 mAP 不代表临床可用性。从那以后我每次拿到新数据集都强制先跑一遍标签坐标范围检查和 train/val 去重再动训练脚本。这两步花不了十分钟能省掉后面几小时的无效训练。希望帮到你。本文还有配套的精品资源点击获取
返回列表