尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

yolov5水果检测数据集与训练全流程:从数据准备到模型调优

yolov5水果检测数据集与训练全流程:从数据准备到模型调优 简介YOLOv5水果检测数据集收录数百张已标注的常见水果图片涵盖菠萝、李子、红番茄和西瓜四个类别面向计算机视觉初学者和基于YOLO系列检测框架的开发者省去自行采集图像、人工标注类别和整理数据目录的繁琐工作。压缩包内共1107个文件主要包括553张JPG格式的图像及对应的553个TXT格式标签另附一个data.yaml配置文件训练集、验证集、测试集已在目录中划分完毕图片与标签一一对应解压后即可按照YOLOv5、YOLOv7、YOLOv8等常见模型的规范直接开展训练。资源包整体大小约31.72MB便于下载和本地部署。目前已有839人学习下载适合用于快速上手YOLO系列工具链、理解YOLO格式的标注原理以及进行水果检测相关的课程实验或竞赛调优。借助该数据集可以完整经历从数据读取、参数配置到模型训练、结果验证的实践流程有效缩短环境准备和数据预处理的时间提升学习与开发效率。1. 这个水果检测数据集省掉的是你调格式的两小时刚拿到一批图片就急着训练yolov5通常会在两个地方卡住一是标注文件还是Pascal VOC或者LabelMe的JSON格式需要自己写脚本转成YOLO的txt二是图片和标签没有按train/valid/test分好目录训练时要么手写split脚本要么干脆全扔进train导致验证集失真。这套yolov5水果检测数据集data5几百张图已经按Roboflow的导出规范整理完毕菠萝、李子、红番茄、西瓜四类train、valid、test目录划分明确并附带可直接读取的data.yaml拿过来指向yolov5项目的data参数就能开训。不再需要处理格式转换和目录结构把精力全部留给训练参数和数据质量本身。适合正在做目标检测课程设计、毕设或者需要快速验证yolov5系列模型在果蔬识别场景下效果的人。2. 目录结构与data.yaml的配置逻辑看懂之后再也不怕换数据集拿到压缩包解压以后第一件事不是急着训练而是把目录结构和yaml文件的写法看明白。这份数据集采用的是YOLO系列最常见的组织方式图片存到images标签存到labels二者通过文件名一一对应。压缩包内核心路径如下data5/ ├── train/ │ ├── images/ # 训练图片jpg格式640x640左右 │ └── labels/ # 同名txt每行一个目标 ├── valid/ │ ├── images/ │ └── labels/ ├── test/ │ ├── images/ │ └── labels/ └── data.yaml # 类别和路径配置这是yolov5、yolov7、yolov8通用的数据组织方式。打开data.yaml内容对应的是四个类别names: [pineapple, plum, redtomato, semangka] train: ./train/images val: ./valid/images test: ./test/images注意几个细节。第一train和val指向的是images目录而非labels目录yolov5会依据图片路径自动查找同级路径下的labels文件夹。第二路径用了相对路径这意味着训练时必须把data.yaml的路径作为参数传给train.py且运行目录相对固定我一般建议改成绝对路径防止换机器后路径失效。第三names的排序必须和txt标注里的类别id严格对应比如某个plum的txt内容第一行若开头是1那它就是指plum换成第0个类就是pineapple混乱会导致损失下降但精度始终上不去。标注txt的格式依托归一化坐标每行结构是“类别id x_center y_center width height”全部除以图片宽高取值在0到1之间。例如一个李子的标注可能是1 0.4562 0.3187 0.2834 0.4215这行数字的含义是类别id为1目标中心在图像水平方向45.62%、垂直方向31.87%的位置宽占整幅图的28.34%高占42.15%。yolov5训练时通过等比缩放和padding把输入图统一到640×640归一化坐标在这个过程里天然是安全的不需要二次换算。因此从标注格式来看这份数据已经接近开箱即用状态。训练之前建议验证一下标注是否有越界或空文件问题常见做法是写一个快速检查脚本import os for split in [train, valid, test]: label_dir fdata5/{split}/labels empty_cnt 0 for f in os.listdir(label_dir): path os.path.join(label_dir, f) if os.path.getsize(path) 0: empty_cnt 1 print(f{split}: empty label - {f}) print(f{split} total empty: {empty_cnt})这段脚本循环检查每个划分下的labels目录找出内容为空的txt。空标注文件会让yolov5训练时对应图片沦为纯背景样本少量还好多了直接拉低召回率。运行后如果没有任何输出说明数据标注完整可以直接进入训练阶段。3. 从头复现yolov5水果模型的训练流程命令与参数逐项说明训练yolov5的第一步是准备好环境。yolov5基于PyTorch推荐Python 3.8以上、CUDA 11.3以上的环境。先克隆官方仓库到本地git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txtrequirements.txt里包含torch、opencv-python、matplotlib等依赖装完之后建议检查一下PyTorch的GPU版本是否与CUDA匹配用python -c import torch; print(torch.cuda.is_available())输出True再继续。训练命令相对固定从yolov5项目根目录执行python train.py \ --img 640 \ --batch 16 \ --epochs 100 \ --data /path/to/data5/data.yaml \ --cfg yolov5s.yaml \ --weights yolov5s.pt \ --name fruit_detect \ --cache这句命令做了这几件事--img 640把输入统一缩放到640×640和不失真Resize不同yolov5会先等比缩放再填充灰边属于训练时的标准预处理--batch 16按显存容量决定8GB显存配yolov5s选16可用12GB以上可以上32--cfg yolov5s.yaml指定网络结构s是small版本训练最快在几百张的小数据集上不太容易过拟合到无法收敛--weights yolov5s.pt加载COCO预训练权重做迁移学习这对小数据集极其重要如果不加载预训练权重几十个epoch内模型可能都学不到有效的底层特征--cache把图片加载进内存对这个规模的水果数据集来说可以显著减少IO等待时间几乎不占多少内存。训练过程中runs/train/fruit_detect目录会持续写入weight、results.csv和训练曲线图。这个数据集的图片数量在几百张级别100个epoch对yolov5s来说训练时间大约在20到40分钟之间取决于显卡型号。如果只想验证流程能跑通先把epochs改成10确认损失下降趋势出现再加大轮数。若使用yolov7或yolov8数据集部分不需要改动data.yaml的字段完全兼容只需要替换对应仓库的模型配置文件即可。这样设计的好处是当你想横向对比yolov5、yolov7、yolov8在水果检测上的精度差异时仅切换算法框架和训练脚本出图结果可以直接做横向对比不需要为每个框架重做数据集。4. 训练日志和验证指标怎么读参数为什么这么设训练结束后不要只看最后的mAP数字要按顺序看三个东西损失曲线、PR曲线、混淆矩阵。以results.png为例从上到下的曲线包括train/box_loss、train/obj_loss、train/cls_loss、val/box_loss、val/obj_loss、val/cls_loss、metrics/precision、metrics/recall以及metrics/mAP0.5和metrics/mAP0.5:0.95。正常情况下训练和验证损失应该同步下降且最终趋于平缓mAP0.5稳定在0.9以上就算这个数据集规模下的正常水平。要是val损失在第30个epoch后反弹而train损失还在降那就是过拟合信号常见处理是加--patience 20配合早停或者把--epochs降到60。mAP的判读要结合类别看。数据集中红番茄、西瓜、菠萝的色彩和形状相对鲜明李子是深紫色小果容易和红番茄产生混淆尤其是远距离小目标场景。更直接的办法是打开confusion_matrix.png数值会展示具体是哪两类互相误判。若李子被大量识别成红番茄可以到对应图片上检查标注框是否框住了果柄或叶片框大了会把相近颜色背景学进来。针对内存比较小的机器以下参数可以按需调整参数默认值建议调整方向--batch16显存不够降到8不要降到4以下--img640小目标多时试1280帧率敏感时试416--epochs100过拟合就减到60欠拟合加到150--cacheFalse小数据集建议开启--workers8Windows下设为4避免DataLoader报错这里重点说明--img参数的双刃剑效应。--img 640在训练时把图片统一拉伸到640×640而推理时也可以用--img 640保持一致性。数据源图片本身是640左右因此无需担心增采样带来的特征损失。若把--img改成1280虽然小目标特征更清晰mAP会略有提升但训练和推理速度会下降一半以上部署阶段需要仔细权衡。对于这几百张图片的训练集规模我倾向于保持640不变模型容量和输入分辨率都处于合适区间学习率超参数不需要格外处理。超参数文件data/hyps/hyp.scratch-low.yaml中默认的学习率0.01、动量0.937、权重衰减0.0005足以适配这类中低规模数据集除非出现梯度爆炸或收敛过慢才需要调整例如把lr0降低到0.005或把warmup_epochs从3增加到5。5. 数据增强对泛化能力的加成以及小样本扩充的可行做法数据增强是yolov5在小数据集上获得稳定精度的关键。yolov5内置的增强策略集中在hyperparameters里包括hsv_h、hsv_s、hsv_v色调、饱和度、明度扰动、degrees旋转、translate平移、scale缩放、fliplr水平翻转和mosaic。实际操作中yolov5在训练前会执行Mosaic-4增强即把四张图拼接成一张再随机裁剪这让模型在每一轮迭代看到的上下文远远多于原始图片数量一个epoch对于模型而言相当于识别了更多组合场景。因此即使只有几百张图片在mosaic的加持下也不容易出现严重欠拟合。对于自己扩充数据的情况一个直接可用的做法是用yolov5自身做半自动标注。先用手头少量样本训练一个粗糙模型用它去预测未标注图片再把置信度高于0.6的预测结果转成标注文件人工只修正错误框和漏检框。推理命令沿用detect.pypython detect.py \ --weights runs/train/fruit_detect/weights/best.pt \ --source /path/to/new_images/ \ --save-txt \ --conf-thres 0.6--save-txt会把每个目标的类别和归一化坐标写入result标签目录下的同名txt--conf-thres 0.6控制只保留高置信度预测。生成后的txt格式和data5中的标签完全一致直接拷贝到labels目录即可完成一轮数据补充。人工检查的重点是漏检的小李子它们在远处会出现几个像素级别的目标这类样本按经验至少需要单独裁剪放大后再加入训练集。另外验证模型跑出来的效果推荐用单张图测试加批量验证组合的方式。单张图测试看框的位置是否准确贴合水果轮廓批量验证则是统计mAP的变化趋势两者结合才能确认参数的调整方向正确。除了精度检查一下不同光照条件下的推理效果自然光直射时李子表面会产生高光反射模型如果在这个场景下漏检说明训练集中高光样本不足需要回补数据。若压缩包中图片偏暗或偏亮可以在扩充阶段加一层亮度抖动这是让模型适应真实环境成本最低的手段。本文还有配套的精品资源点击获取
返回列表