首页/新闻资讯/正文详情

感冒药品分类检测数据集:959张图3类别VOC与YOLO双格式实战指南

发布时间:2026/9/23 15:25:12 来源:云帆数科 栏目:资讯中心
感冒药品分类检测数据集:959张图3类别VOC与YOLO双格式实战指南
简介本资源为面向目标检测入门与药品识别场景的感冒药品分类检测数据集适合计算机视觉学习者、算法工程师及高校学生用于模型训练与算法验证。数据集采用Pascal VOC与YOLO双格式标注包含960张jpg图片及对应的960个xml和960个txt标注文件标注类别涵盖999ganmaoling、banlangen、buluofen及drugs四类总标注框数达1365个使用labelImg工具按矩形框规则完成标注。压缩包共2000个文件以xml、txt标注文件和jpg图像为主整体约44.17MB目录结构清晰便于直接接入YOLO或VOC训练流程。目前已有395人学习下载可作为药品检测赛题或课程实验的现成数据基础帮助读者快速完成数据加载、类别统计与模型训练验证节省自行采集与标注的时间成本。1. 感冒药品分类检测数据集959 张、3 类别、VOC 与 YOLO 双格式到底能干什么电商仓库的拣货口、药店自动盘点机、药品分拣线这些场景里最烦的不是识别不出药盒而是把「感冒灵」和「复方氨酚烷胺」混成一类。我拿到这个标题的第一反应不是「又一个数据集」而是它把三件事一次性说清了959 张图、3 个类别、VOC 与 YOLO 双格式。这意味着你不需要从零标注也不用纠结格式转换直接就能把数据灌进 YOLO 训练流程里跑一版基线。它适合两类人一类是想验证「药品分类检测」这条业务线能不能用目标检测落地的小团队另一类是刚学完 YOLO 理论、想找一个类别少、体量小、当天就能跑出结果的数据集练手的人。959 张不算多3 类也不算复杂但正因为小它才适合做快速验证——先跑通再谈精度。2. 先看清数据959 张、3 类别、VOC 与 YOLO 双格式的目录结构2.1 为什么这个数据集同时给 VOC 和 YOLO 两种格式VOC 格式是目标检测里的老牌标准标注文件是 XML每个目标一个object节点里面写类别名和xmin/ymin/xmax/ymax四个坐标。YOLO 格式则是每张图对应一个.txt每行类别索引 cx cy w h坐标全部归一化到 0 到 1 之间。这个数据集同时给两套实际是照顾了两拨人用 LabelImg 打标、习惯看 XML 的人可以直接核对标注质量用 YOLOv5/v8 训练的人可以直接拿.txt和data.yaml开跑。常见做法是VOC 留作标注溯源和可视化检查YOLO 格式直接进训练脚本。我一般会先拿 VOC 的 XML 抽查十几张确认框没画歪再切到 YOLO 格式训练这样出问题时分得清是标注问题还是训练问题。2.2 目录应该长什么样以及怎么快速核对类别数拿到压缩包解压后合理的目录结构通常是这样你可以对照检查dataset/ ├── VOCdevkit/ │ └── VOC2007/ │ ├── Annotations/ # 每张图一个 XML │ ├── JPEGImages/ # 原始图片 │ └── ImageSets/Main/ # train/val 划分文件 └── yolo/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml核对类别数不要靠肉眼数直接跑一段脚本统计 XML 里出现过的类别名import os import xml.etree.ElementTree as ET from collections import Counter anno_dir dataset/VOCdevkit/VOC2007/Annotations counter Counter() for fname in os.listdir(anno_dir): if not fname.endswith(.xml): continue tree ET.parse(os.path.join(anno_dir, fname)) for obj in tree.findall(object): name obj.find(name).text.strip() counter[name] 1 print(counter) # 每个类别的框数量 print(类别数:, len(counter))这段逻辑很直白遍历所有 XML把每个object的name取出来计数。counter输出的是每个类别的实例数不是图片数——这点要分清959 张图里某个类别可能只出现几十次。如果统计出来类别数不是 3或者出现拼写不一致的类别名比如「感冒药」和「感冒药品」混用那说明标注有脏数据必须先统一再训练否则模型会把它当成两个类。2.3 从 VOC 转 YOLO坐标归一化的四个边界坑虽然数据集号称双格式但实际拿到手经常只有 VOC 是完整的YOLO 那套要么缺data.yaml要么划分不对。自己转一遍最稳import os import xml.etree.ElementTree as ET classes [class0, class1, class2] # 按你的实际类别顺序改 anno_dir dataset/VOCdevkit/VOC2007/Annotations img_dir dataset/VOCdevkit/VOC2007/JPEGImages out_dir dataset/yolo/labels/all os.makedirs(out_dir, exist_okTrue) for fname in os.listdir(anno_dir): if not fname.endswith(.xml): continue tree ET.parse(os.path.join(anno_dir, fname)) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) lines [] for obj in root.findall(object): cls_name obj.find(name).text.strip() if cls_name not in classes: continue cls_id classes.index(cls_name) 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) # 归一化并转中心点宽高 cx (xmin xmax) / 2.0 / w cy (ymin ymax) / 2.0 / h bw (xmax - xmin) / w bh (ymax - ymin) / h lines.append(f{cls_id} {cx:.6f} {cy:.6f} {bw:.6f} {bh:.6f}) with open(os.path.join(out_dir, fname.replace(.xml, .txt)), w) as f: f.write(\n.join(lines))逻辑说明先读图片宽高再把 VOC 的左上右下坐标转成 YOLO 的中心点加宽高并且全部除以宽高做归一化。参数上classes的顺序必须和后面data.yaml里的names完全一致错一个位置整个类别就全乱了。四个边界坑分别是坐标超出图片范围xmax大于w要截断宽或高为 0 的框要丢弃类别名不在classes里的要跳过并记录图片宽高读不到的要单独列出来人工看。转完随便抽一张图用可视化脚本画框确认框和药盒对得上再进训练。3. 用 YOLOv8 在本地跑通第一版药品检测基线3.1 环境配置Anaconda 建环境到 ultralytics 安装YOLOv8 现在通过ultralytics包直接调用环境干净点不容易出玄学问题。我一般用 conda 建一个独立环境conda create -n yolo_drug python3.10 -y conda activate yolo_drug pip install ultralytics opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simplepython3.10是当前兼容性比较稳的版本3.12 有些依赖轮子还没跟上。装完ultralytics会自带 torch如果你的机器有 NVIDIA 显卡装完用python -c import torch; print(torch.cuda.is_available())确认一下是不是 True。返回 False 说明装成了 CPU 版训练会慢到让你怀疑人生需要按官网对应 CUDA 版本重装 torch。这一步是新手最容易翻车的地方先确认再往下走。3.2 data.yaml 怎么写路径和类别顺序别搞反data.yaml是训练入口写错路径是最常见的报错来源path: /home/user/dataset/yolo train: images/train val: images/val nc: 3 names: 0: class0 1: class1 2: class2path是数据集根目录train和val是相对path的路径。nc是类别数必须和names的条目数一致。names的顺序必须和转换脚本里classes的顺序一模一样否则训练不报错但预测出来的类别名全是错的——这种错误最坑因为 loss 看着正常下降你以为训好了一推理发现标签张冠李戴。改完 yaml 先用yolo checks跑一下环境自检确认路径能被读到。3.3 训练命令与关键参数epochs、imgsz、batch 怎么定959 张图属于小数据集训练命令不用太复杂yolo detect train \ datadataset/yolo/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ lr00.01 \ patience20 \ projectruns/drug \ namebaseline参数逐个说modelyolov8n.pt用 nano 版小数据集上 nano 往往比大模型更不容易过拟合而且训练快epochs100配合patience20意思是 20 轮验证指标不提升就早停避免白跑imgsz640是 YOLO 默认输入尺寸药盒这种中等目标够用batch16看显存8G 显存跑 640 一般能到 16爆显存就降到 8lr00.01是初始学习率小数据集不建议调太大。训练过程中重点看mAP50和mAP50-95两个指标前者宽松后者严格如果 mAP50 上去了但 mAP50-95 很低说明框的位置不够准多半是标注框偏大或偏小。3.4 推理与置信度门限为什么默认 0.25 不一定适合药品训练完拿验证集或自己拍的图跑推理yolo detect predict \ modelruns/drug/baseline/weights/best.pt \ sourcetest_images/ \ conf0.4 \ saveTrueconf0.4是我在药品场景常用的门限比默认 0.25 高。原因是药品包装相似度高低门限会冒出一堆重叠的误检框拣货场景里误检比漏检更烦人。如果业务允许漏一点但不能错就把conf提到 0.5 甚至 0.6如果追求召回、宁可多框几个再人工筛就降到 0.3。这个值没有标准答案拿一批真实场景图跑几组对比看误检和漏检哪个代价大再定。4. 小数据集训练药品检测的避坑与排查清单4.1 现象训练 loss 正常下降但验证 mAP 一直是 0原因通常有两个一是data.yaml里val路径指向的图片和标签对不上YOLO 找不到标签就当成背景验证自然全错二是类别索引错位标签里的cls_id超出了nc范围被静默忽略。解决方法是先跑一遍标签校验脚本检查每个.txt里的类别索引是否都在0到nc-1之间再确认images/val和labels/val文件名一一对应。我习惯在训练前用yolo detect train加--verbose看它实际加载了多少张图和多少个标签数字对不上就停下来查。4.2 现象模型把三个类别全预测成同一类原因多半是类别极度不均衡959 张里某一类占了绝大多数另外两类样本太少模型干脆全押多数类。解决方法是先统计每类的实例数如果某类少于总实例的 10%要么补数据要么在训练时用cls权重或过采样。另一个可能是names顺序和标签索引不一致这种属于人为错误重新核对一遍就能排除。4.3 现象推理时框大量重叠、同一个药盒出好几个框原因是conf门限太低或者 NMS 的iou阈值不合适。YOLO 默认iou0.7药品包装密集摆放时相邻框容易被误合并或误保留。解决方法是先把conf提到 0.4 以上再试iou0.5观察重叠框是否减少。如果还是多说明模型本身没学好回到训练阶段加数据或加 epoch别指望后处理能救回来。4.4 现象换一台机器或换一个路径训练直接报 FileNotFound原因是data.yaml里用了绝对路径或者path写死到了某台机器的目录。解决方法是统一用相对路径把数据集和训练脚本放在同一级path写./dataset/yolo。另外 Windows 和 Linux 的路径分隔符不同跨平台时用os.path.join或正斜杠别手写反斜杠。4.5 现象训练到一半显存爆了进程被 kill原因是batch或imgsz设太大或者workers开太多导致内存也吃紧。解决方法是先把batch减半imgsz从 640 降到 512 试一轮workers设成 4 或 8 别拉满。如果还爆用yolov8n而不是yolov8m/l小数据集上 nano 的性价比最高。显存不够时不要硬扛降配置比换卡现实。5. 把 959 张用到极致数据增强、验证与持续迭代的几个技巧小数据集的瓶颈从来不是模型不够大而是数据不够多样。959 张如果都是同一角度、同一光照拍的模型换个货架就废。我一般会在 YOLO 训练配置里打开几项增强hsv_h0.015、hsv_s0.7、hsv_v0.4做颜色扰动模拟不同灯光degrees10做小角度旋转模拟拍摄倾斜mosaic1.0默认开着把四张图拼一张等效增加场景组合。但要注意药品包装上的文字方向敏感flipud上下翻转最好关掉否则文字倒过来模型学到的特征就乱了。fliplr左右翻转一般可以留除非包装左右不对称且业务在意。验证不能只看 mAP。我习惯把验证集预测结果导出来按类别分别看混淆矩阵确认没有两类互相混。然后拿一批训练时没见过的真实场景图——比如不同货架、不同手机拍的——单独跑一遍统计误检和漏检。这一步才是决定这个方案能不能上线的关键。如果真实场景掉点严重优先补那类场景的图而不是调模型结构。迭代节奏上第一版跑通后不要急着换更大的模型。先把yolov8n训到 mAP50 稳定在 0.85 以上再考虑换yolov8s看有没有提升。如果换了模型提升不到 2 个点说明瓶颈在数据不在模型回去补数据更划算。另外best.pt和last.pt都要留着best.pt用于推理last.pt用于断点续训别只存一个。最后说个我自己的习惯每次训练完把data.yaml、转换脚本、训练命令和当时的 mAP 记在一个experiment.md里。小数据集实验迭代快不记的话两周后你根本想不起来哪版用了什么参数。这个数据集体量小正好适合拿来练这套记录习惯——跑通一次后面换任何药品品类流程都是同一套。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

AD590电流输出型温度传感器:数字温度计设计与标定实战
AD590电流输出型温度传感器:数字温度计设计与标定实战

简介:这份资源是采用AD590集成温度传感器设计的数字温度计电路方案,面向电子测量、传感器课程设计及课设毕设人群,帮助解决高精度温度监测电路的设计与实现问题。压缩包内共1个PDF文件,约86KB,以电路原理图与设计说明为… · 2026/9/23 15:25:12

图解原理:勒索蠕虫病毒底层逻辑与Python防御实战
图解原理:勒索蠕虫病毒底层逻辑与Python防御实战

图解原理:勒索蠕虫病毒底层逻辑与Python防御实战 昨天刚把生产环境的 Python 依赖库从 3.8 升到 3.11,结果 API 全变了, asyncio 的回调机制直接崩盘。这种“版本升级后 API… · 2026/9/23 15:25:12

TDCS低截获信号仿真:变换域通信原理与MATLAB实现
TDCS低截获信号仿真:变换域通信原理与MATLAB实现

简介:这是一份面向通信工程与信号处理研究者的TDCS变换域通信系统仿真资源,聚焦低截获(LPI)与抗截获技术,适合正在学习扩频通信、军事安全通信或需要快速搭建TDCS仿真环境的读者。资源压缩包仅5KB,共包含12… · 2026/9/23 15:25:12

揭秘游戏软件开发公司底层优化:手写实现让帧率翻倍
揭秘游戏软件开发公司底层优化:手写实现让帧率翻倍

揭秘游戏软件开发公司底层优化:手写实现让帧率翻倍 看了一堆教程还是不会写项目?这大概是很多刚入行或者想进阶的开发者的痛点。视频里跑得飞起,自己上手就卡壳,尤其是面对大型商业项目时,那种无力感特别强。很多培训机构教你“怎么调用库”,但很少教你… · 2026/9/23 15:56:01

3步搞定自动化测试流程图解原理,新手也能跑通
3步搞定自动化测试流程图解原理,新手也能跑通

3步搞定自动化测试流程图解原理,新手也能跑通 刚把 GitHub 上那个热门的 pytest 示例项目拉下来,满心欢喜地敲下 pytest ,结果终端直接红屏报错: ModuleNotFoundError: No module named… · 2026/9/23 15:55:55

告别配置地狱:2026最新置换贴图实战,水利全栈必备
告别配置地狱:2026最新置换贴图实战,水利全栈必备

告别配置地狱:2026最新置换贴图实战,水利全栈必备 是不是每次想给模型加点“高级感”,一查文档就头大?光是配置环境、找对格式、调参数就能卡半天,代码跑起来全是红字,让人怀疑人生。别急,这种痛苦在 2026最新 的图形管线里完全有解。… · 2026/9/23 15:55:55

PR视频怎么导出实战项目新手避坑指南
PR视频怎么导出实战项目新手避坑指南

PR视频怎么导出实战项目新手避坑指南 看了一堆教程还是不会写项目?别慌,这是大多数开发者和内容创作者的通病。你盯着屏幕上的代码或时间轴,感觉每一步都懂了,但一动手就报错,或者导出的视频根本没法用。其实, pr视频怎么导出… · 2026/9/23 15:55:49

DeepSeek API 自动化编程助手实战:从代码生成到自检修复
DeepSeek API 自动化编程助手实战:从代码生成到自检修复

简介:面向希望借助DeepSeek API构建自动化编程工具的开发者,这份PDF文档系统拆解了从API基础到助手落地的完整流程。全文共19页,仅含1个PDF文件,压缩包约1.78MB,便于快速学习与直接查阅。内容先从自动化编程发展背景切… · 2026/9/23 15:55:36

搞定万能收款码这3个高频面试题,性能提升5倍
搞定万能收款码这3个高频面试题,性能提升5倍

搞定万能收款码这3个高频面试题,性能提升5倍 是不是经常遇到这种尴尬:代码写得溜,但一碰到【万能收款码】这种高并发支付场景,脑子就一片空白?明明知道要用异步、要用缓存,可具体怎么搭项目,怎么在毫秒级响应里把状态流转跑通,心里没底。这不仅是开… · 2026/9/23 15:55:30

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码