新闻详情

新闻详情

首页 / 资讯中心 / 详情

215类蘑菇图像分类数据集:从类别字典到yolov5训练全流程

发布时间:2026/9/28 1:13:42来源:尧图网络
215类蘑菇图像分类数据集:从类别字典到yolov5训练全流程
简介本资源为面向图像分类任务的蘑菇类别识别数据集适合深度学习入门者、CNN分类网络实践者以及YOLOv5分类模型使用者。数据集共涵盖215种蘑菇类别包括bay_bolete、brown_birch_bolete、deathcap等类别信息以json字典文件形式提供便于标签映射与训练配置。资源包共2000个文件以1998张jpg图像为主另含1个Python可视化脚本和1个json类别字典压缩包约152.96MB采用7z格式打包。数据按训练集与测试集分目录存放训练集图片2500张、测试集600张可直接用于YOLOv5分类或常规CNN分类网络训练。运行包内show脚本可快速预览样本分布与图像内容帮助检查数据质量。目前已有139人学习下载适合需要现成多类别图像数据开展分类实验、模型验证与课程实践的读者。1. 215 类蘑菇图像分类数据集从类别字典到训练集划分的落地全貌拿到一个图像分类数据集最怕的不是类别多而是类别多还没有字典、没有划分、没有可视化脚本最后光整理数据就耗掉两天。这份 215 种蘑菇类别图像识别数据集恰好把这三件事都提前做完了data 目录下直接分好训练集和测试集每类图片按文件夹存放训练集共 2500 张、测试集共 600 张另附一份类别字典文件json 格式把 bay_bolete、brown_birch_bolete、deathcap 这类拉丁学名和文件夹名一一对应起来。它适合两类人一类是想跑通 CNN 分类网络、验证自己模型结构在细粒度分类上表现的算法工程师另一类是想用 yolov5 分类分支做迁移学习、但不想从零爬数据的从业者。资源里还带了一个 show 脚本用来快速可视化数据集分布避免你盲训。下面按「先看清结构、再动手训练、最后避坑」的顺序拆开讲。2. 数据集目录结构与类别字典先读懂再动手2.1 data 目录的两级划分与文件命名这份资源的目录设计是典型的「按类分文件夹」结构训练集和测试集各自独立成树。常见做法是data/ ├── train/ │ ├── bay_bolete/ │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ └── ... │ ├── brown_birch_bolete/ │ └── ... └── test/ ├── bay_bolete/ └── ...从项目正文里那串14.jpg 13.jpg 6.jpg 2.jpg 1.jpg可以看出图片文件名是纯数字不带类别前缀。这意味着类别信息完全靠父文件夹名承载读取时用os.listdir或torchvision.datasets.ImageFolder就能自动映射成标签。ImageFolder的默认行为是按文件夹名排序后生成class_to_idx所以训练集和测试集的文件夹顺序必须一致否则标签会错位。我一般会先跑一段脚本确认两边的类别集合完全相同import os train_dir data/train test_dir data/test train_classes sorted(os.listdir(train_dir)) test_classes sorted(os.listdir(test_dir)) print(训练集类别数:, len(train_classes)) print(测试集类别数:, len(test_classes)) print(两边类别一致:, train_classes test_classes) # 统计每类图片数量检查是否有空文件夹 for cls in train_classes: n_train len(os.listdir(os.path.join(train_dir, cls))) n_test len(os.listdir(os.path.join(test_dir, cls))) if n_train 0 or n_test 0: print(f警告: {cls} 训练 {n_train} 张, 测试 {n_test} 张)这段脚本做了三件事确认类别数是否为 215、确认训练集和测试集类别顺序一致、排查空文件夹。参数上没什么可调的但sorted不能省因为os.listdir返回顺序依赖文件系统不排序会导致两次读取顺序不同。如果发现某类测试集为 0 张说明划分时漏了需要手动补或从训练集里抽。2.2 类别字典 json 的读取与映射资源里的类别字典文件是 json 格式通常有两种组织方式一种是{0: bay_bolete, 1: brown_birch_bolete, ...}另一种是{bay_bolete: 0, brown_birch_bolete: 1, ...}。读取时要注意键的类型json 里数字键会被转成字符串。我一般这样加载并和文件夹名做交叉验证import json with open(class_dict.json, r, encodingutf-8) as f: class_dict json.load(f) # 兼容两种格式 if isinstance(list(class_dict.keys())[0], str) and list(class_dict.keys())[0].isdigit(): idx_to_name {int(k): v for k, v in class_dict.items()} else: idx_to_name {v: k for k, v in class_dict.items()} print(字典类别数:, len(idx_to_name)) print(前 5 类:, list(idx_to_name.items())[:5]) # 与文件夹名比对 folder_names set(os.listdir(data/train)) dict_names set(idx_to_name.values()) print(文件夹有但字典没有:, folder_names - dict_names) print(字典有但文件夹没有:, dict_names - folder_names)逻辑说明先判断 json 是「索引到名称」还是「名称到索引」统一转成idx_to_name。然后用集合差集找出两边不一致的类别。参数上encodingutf-8必须加因为蘑菇学名里可能有特殊字符。如果差集不为空说明字典和实际数据对不上训练时标签会错必须先修字典或改文件夹名。2.3 用 show 脚本做可视化前的准备资源自带的 show 脚本一般用来画类别分布柱状图或抽样展示图片。运行前要确认它依赖的路径是相对路径还是绝对路径。常见做法是python show.py --data_dir data/train --num_samples 16如果脚本报FileNotFoundError多半是它默认写死了data/train而你的当前工作目录不对。我一般会先cd到资源根目录再跑或者用--data_dir显式指定。可视化能帮你快速发现两类问题某类图片数量畸少比如只有 1 张以及某类图片明显不是蘑菇脏数据。这两类问题在训练前处理掉比训练后看 loss 不降要省事得多。3. 用 yolov5 分类分支训练 215 类蘑菇配置与参数3.1 为什么选 yolov5 分类而不是目标检测yolov5 除了目标检测还提供分类分支classify/目录适合「一张图一个主体」的场景。蘑菇数据集每张图基本是一朵蘑菇占主体没有多目标标注需求用分类分支比检测分支更轻。选型理由有三点第一分类分支的输入是整图不需要标注框这份资源也没有提供框标注第二215 类属于细粒度分类yolov5 分类分支支持--pretrained加载 ImageNet 权重迁移学习能明显加快收敛第三分类分支的目录结构和ImageFolder一致直接指向data/train和data/test即可不用额外写 Dataset 类。3.2 训练命令与关键参数假设你已经把 yolov5 仓库克隆到本地数据放在data/下训练命令常见写法是python classify/train.py \ --model yolov5s-cls.pt \ --data data \ --epochs 100 \ --batch-size 32 \ --imgsz 224 \ --pretrained \ --project runs/train-cls \ --name mushroom215逻辑说明--model指定分类模型结构yolov5s-cls.pt是带 ImageNet 预训练权重的轻量版--data指向包含train/和test/的父目录--imgsz 224是分类常用输入尺寸和预训练权重匹配--pretrained表示加载预训练权重。参数上--batch-size受显存限制2500 张训练集用 32 一般够--epochs100 是起点如果验证集准确率还在涨可以加到 200。注意--data不要写成data/train否则测试集找不到。3.3 训练过程中的监控与中断恢复yolov5 分类训练会在runs/train-cls/mushroom215/下生成results.csv和权重文件。监控时重点看train/loss和metrics/accuracy_top1。如果 top1 在 10 个 epoch 内不降常见原因是学习率太大或数据标签错位。中断后恢复用python classify/train.py \ --model runs/train-cls/mushroom215/weights/last.pt \ --data data \ --epochs 200 \ --batch-size 32 \ --imgsz 224 \ --resume--resume会从last.pt里恢复优化器状态和 epoch 计数。参数上--epochs要设成比上次更大的值否则不会继续。如果只想微调最后几层可以把--freeze 10加上冻结前 10 层适合小数据集防过拟合。3.4 验证集评估与混淆矩阵训练结束后用classify/val.py评估python classify/val.py \ --model runs/train-cls/mushroom215/weights/best.pt \ --data data \ --batch-size 32 \ --imgsz 224输出会给出 top1 和 top5 准确率。215 类里有些蘑菇外观极像比如不同种的 boletetop5 比 top1 更有参考价值。如果 top1 只有 40% 但 top5 有 80%说明模型学到了特征但区分度不够可以考虑换更大的模型yolov5m-cls.pt或加数据增强。混淆矩阵能看出哪些类互相混淆常见做法是把混淆最严重的几类挑出来单独看图片确认是不是标注错了。4. 避坑与常见问题标签错位、空文件夹、显存炸了4.1 训练集和测试集类别顺序不一致导致标签错位现象训练时 loss 正常下降但验证集准确率始终在 1/215 附近等于随机猜。原因ImageFolder按文件夹名排序生成标签如果训练集和测试集的文件夹名排序结果不同比如一个有下划线一个没有同一个索引在两边的类别不同。解决跑 2.1 里的比对脚本确认train_classes test_classes为 True。如果不一致统一文件夹命名规范或者手动指定class_to_idx并保存成 json训练和验证都加载同一份。4.2 空文件夹或单张图片类别拖垮训练现象训练到某个 epoch 突然报ZeroDivisionError或 loss 变成 nan。原因某个类别文件夹为空或者只有 1 张图batch 里凑不齐导致除零。解决跑 2.1 里的统计脚本把空文件夹删掉或补图。单张图片的类别建议合并到相近类或者从训练集里剔除否则模型学不到该类的分布。4.3 显存不足导致 batch-size 报错现象RuntimeError: CUDA out of memory。原因--batch-size 32在 224 尺寸下对某些显卡偏大。解决先降到 16 或 8同时把--imgsz降到 160。如果还不行用--device cpu先跑通流程再换机器。注意降 batch-size 后学习率最好按比例降否则收敛会抖。4.4 类别字典 json 键类型不匹配现象加载字典后KeyError或映射出来的类别名全是数字。原因json 里键是字符串0代码里用整数0去取。解决按 2.2 的脚本统一转成整数键。另外有些字典是「名称到索引」直接当「索引到名称」用会反。判断方法看值是不是数字是数字就反转。4.5 show 脚本路径写死导致可视化失败现象运行show.py报找不到图片。原因脚本里用了相对路径data/train但你在别的目录下执行。解决cd到资源根目录再跑或者改脚本里的路径为绝对路径。如果脚本依赖 matplotlib确认已安装否则会报ModuleNotFoundError。5. 进阶技巧用类别字典做分层采样与难例挖掘5.1 按类别字典做分层划分这份资源已经分好训练集和测试集但如果你想自己重新划分比如做交叉验证可以按类别字典做分层采样保证每类在训练和验证里的比例一致。常见做法是用sklearn.model_selection.train_test_split的stratify参数import os import shutil from sklearn.model_selection import train_test_split all_images [] all_labels [] for cls in sorted(os.listdir(data/train)): cls_dir os.path.join(data/train, cls) for img in os.listdir(cls_dir): all_images.append(os.path.join(cls_dir, img)) all_labels.append(cls) X_train, X_val, y_train, y_val train_test_split( all_images, all_labels, test_size0.2, stratifyall_labels, random_state42 ) for img_path, label in zip(X_train, y_train): dst os.path.join(data/split/train, label) os.makedirs(dst, exist_okTrue) shutil.copy(img_path, dst) for img_path, label in zip(X_val, y_val): dst os.path.join(data/split/val, label) os.makedirs(dst, exist_okTrue) shutil.copy(img_path, dst)逻辑说明stratifyall_labels保证每类在训练和验证里的比例一致避免某类全进训练集。random_state42固定随机种子方便复现。参数上test_size0.2是常见比例数据量小可以调到 0.3。复制而不是移动保留原始数据。5.2 用混淆矩阵做难例挖掘训练完拿到混淆矩阵后找出混淆最严重的 5 对类别把它们的测试图片单独抽出来看。常见做法是import numpy as np from sklearn.metrics import confusion_matrix # 假设 y_true, y_pred 是验证集的真实标签和预测标签 cm confusion_matrix(y_true, y_pred) # 找出非对角线最大的 5 个 off_diag cm.copy() np.fill_diagonal(off_diag, 0) top5 np.dstack(np.unravel_index(np.argsort(off_diag.ravel())[-5:], cm.shape))[0] for i, j in top5: print(f真实 {i} 被预测为 {j} 的次数: {cm[i, j]})找到后把这些类的图片单独拿出来对比看是不是外观确实接近还是标注错了。如果是标注错修标注如果是外观接近考虑加更强的数据增强比如 RandAugment或换更大的输入尺寸。5.3 一个我踩过的坑有次我拿到类似数据集直接开训结果验证准确率一直上不去。后来发现测试集里混进了训练集的图片等于作弊。从那以后我每次拿到分好目录的数据集都强制走一遍「训练集和测试集图片哈希比对」确认没有重复。具体做法是对每张图算 md5看两个集合有没有交集。这个习惯帮我省了很多次返工。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

华润集团智能制造数字化转型【附全文阅读】 2026/9/28 4:36:22

华润集团智能制造数字化转型【附全文阅读】

本 87 页 PPT 为央企集团智能制造数字化转型实战参考材料,适配制造类数字化投标、转型规划编制及企业内训授课。对标国家智能制造相关政策,结合华润多元产业实践,输出一套转型方法论、参照标准以及十大发展方向,包含成熟度评价工具…

阅读更多 →
2026最新网站建设mp4背景避坑指南:3个核心指标定生死 2026/9/28 4:36:22

2026最新网站建设mp4背景避坑指南:3个核心指标定生死

2026最新网站建设mp4背景避坑指南:3个核心指标定生死 找建站公司怕被坑高价?别急,先看看你的首页视频背景是不是在拖后腿。很多老板以为多放个MP4显得大气,结果打开网站加载慢得像蜗牛,跳出率飙升,钱白花不说,客户还嫌你不专业。…

阅读更多 →
RTThread学习记录12——RTThread的启动过程解析,与裸机的区别 2026/9/28 4:36:22

RTThread学习记录12——RTThread的启动过程解析,与裸机的区别

一、前言我们知道RTThread默认保底有3条线程,main线程,空闲线程,还有最近学的定时器线程,我们也知道,RTThread默认有很多链表:定时器链表、挂起链表、就绪链表的链表数组这些,以及优先级位图&am…

阅读更多 →
蓝牙AOA生态抱团出海:避开内卷,同道者共拓海外定位新蓝海 2026/9/28 4:36:22

蓝牙AOA生态抱团出海:避开内卷,同道者共拓海外定位新蓝海

蓝牙AOA生态抱团出海:避开内卷,同道者共拓海外定位新蓝海 核芯物联 核芯物联科技 2026年9月27日 08:00 上海 ,时长01:36 软件开发解决方案开发智能终端开发的伙伴们加入核芯蓝牙AOA蓝牙AOA生态抱团出海:避开内卷,同道…

阅读更多 →
工业遥控器定制周期全解析:从需求沟通到量产的流程与周期 2026/9/28 4:36:22

工业遥控器定制周期全解析:从需求沟通到量产的流程与周期

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
【2027精品大数据毕设】基于大数据的携程平台城市餐饮数据可视化分析(附源码资料)数据分析_毕设指导_数据挖掘_Hadoop_SPark 2026/9/28 4:36:16

【2027精品大数据毕设】基于大数据的携程平台城市餐饮数据可视化分析(附源码资料)数据分析_毕设指导_数据挖掘_Hadoop_SPark

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉