
简介这份资源面向计算机视觉入门与进阶开发者提供一套可直接运行的YOLOv5图像分类实战方案解决从零搭建花分类项目时数据准备、模型训练与权重复用的问题。压缩包共约2000个文件整体257.86MB其中1866张jpg图片构成5种花的分类数据集另有51个yaml配置文件、51个py脚本、12个yml环境文件及若干sh、md、ipynb等辅助文件覆盖数据配置、训练脚本与项目说明。资源内已包含训练好的权重参数仅训练10个epoch时top1准确度即达到0.91以上网络尚未完全收敛增加轮次可进一步提升性能。使用者只需按目录摆放好datasets数据即可开始训练适合想快速跑通分类流程、验证模型效果或在此基础上做改进实验的读者。目前已有366人学习下载可作为YOLOv5分类任务的完整参考案例。1. YOLOV5 分类实战5种花分类数据集到底值不值得跑一遍手里有一批花卉照片想按品种自动分五类这是很多人做 YOLOV5 分类实战的起点。标题里的关键词是 YOLOV5、分类实战、花分类数据集但先泼一盆冷水YOLOV5 的主线是目标检测分类只是它仓库里一个相对独立的子任务。很多人冲着“YOLOV5”三个字进来结果发现分类部分用的是classify/目录跟检测那套detect流程完全两码事这是第一个容易翻车的地方。那为什么还要用 YOLOV5 做分类因为它把数据加载、增强、训练循环、验证指标、导出部署这条链路都封装好了你不需要从零写 Dataset 和 train loop改改数据目录就能跑。5 种花的分类任务规模小、类别少、图像特征差异明显非常适合拿来验证整条分类流水线是否跑通。适合谁想快速上手图像分类、手里有几百到几千张图、希望后续能迁移到树莓派或 RK3568 这类边缘设备的人。不适合谁追求 SOTA 精度、需要细粒度分类比如区分月季和玫瑰的人这个方案给不了你。2. 花分类数据集怎么组织目录结构决定你能不能跑起来2.1 五种花的类别划分与数据来源常见做法是选五种外观差异较大的花比如雏菊、蒲公英、玫瑰、向日葵、郁金香。这个组合的好处是类间差异明显模型不容易混淆适合验证流程。数据来源一般是公开花卉数据集或者自己用手机拍。我一般会控制每类 200 到 500 张总量 1000 到 2500 张太少模型学不动太多小任务没必要。关键点在于类别名称就是文件夹名称YOLOV5 分类任务靠目录名自动推断类别数和类别索引。你不需要额外写 label 文件这是分类和检测最大的区别。检测要images/和labels/配对分类只要按类分文件夹。2.2 目录结构必须长这样YOLOV5 分类的目录结构有硬性要求写错了直接报找不到数据。标准结构如下flower_dataset/ ├── train/ │ ├── daisy/ │ ├── dandelion/ │ ├── rose/ │ ├── sunflower/ │ └── tulip/ └── val/ ├── daisy/ ├── dandelion/ ├── rose/ ├── sunflower/ └── tulip/train和val下面必须有同名的类别文件夹val 每类至少留 20 张否则验证指标波动很大。常见错误是把所有图放一个文件夹再用 csv 标类别YOLOV5 分类不认这种必须按目录分。2.3 数据划分的坑别让训练集和验证集串了划分比例一般 8:2 或 7:3。血泪经验是同一个拍摄对象的不同角度照片不能同时出现在 train 和 val 里否则验证准确率虚高实际部署就翻车。比如你拍了 10 朵玫瑰每朵 30 张划分时要按“朵”分不能按“张”随机分。这个细节很多人忽略导致 val acc 95% 但换一批新图就掉到 60%。提示划分前先给每张图打上来源编号按来源编号分组后再划分能有效避免数据泄漏。3. 用 YOLOV5 跑通分类训练从环境到第一条命令3.1 环境准备与依赖安装YOLOV5 对 PyTorch 版本有要求太新太旧都可能出问题。我一般用 Python 3.8 到 3.10PyTorch 1.8 到 2.0 之间。安装步骤# 克隆仓库用你实际拿到的代码包路径 git clone https://github.com/ultralytics/yolov5 cd yolov5 # 安装依赖requirements.txt 里锁了版本 pip install -r requirements.txt # 验证环境能打印出版本号就说明基础环境通了 python -c import torch; print(torch.__version__)逻辑说明requirements.txt里包含了 torch、torchvision、opencv、matplotlib 等直接装能避免版本冲突。参数说明如果你有 GPU确认torch.cuda.is_available()返回 True否则训练会用 CPU速度差几十倍。3.2 分类训练命令与关键参数YOLOV5 分类训练入口是classify/train.py不是根目录的train.py。最小命令python classify/train.py \ --data ../flower_dataset \ --epochs 100 \ --batch-size 32 \ --imgsz 224 \ --model yolov5s-cls.pt \ --project runs/flower_cls \ --name exp1逻辑说明--data指向数据集根目录里面要有 train 和 val--model指定预训练权重分类任务用-cls后缀的权重--imgsz是输入尺寸分类常用 224。参数说明--epochs100 对小数据集够用--batch-size根据显存调8G 显存跑 32 没问题显存小就降到 16 或 8。--project和--name决定结果保存路径。3.3 训练过程看什么指标训练时终端会打印 loss 和 accuracy重点看 val 的 top1 和 top5。5 分类任务 top5 没意义总共就 5 类只看 top1。正常情况 loss 持续下降val acc 逐步上升。如果 train acc 涨到 99% 但 val acc 卡在 60%就是过拟合需要加数据增强或减模型复杂度。# 训练结束后用验证集单独跑一次评估 python classify/val.py \ --data ../flower_dataset \ --weights runs/flower_cls/exp1/weights/best.pt \ --imgsz 224逻辑说明val.py加载 best.pt 在 val 集上算准确率输出混淆矩阵。参数说明--weights指向训练保存的最优权重--imgsz要和训练时一致否则精度会掉。4. 推理与导出让训练好的花分类模型真正能用4.1 单张图片推理训练完最直接的需求是拿一张图试试。命令python classify/predict.py \ --weights runs/flower_cls/exp1/weights/best.pt \ --source ../test_flower.jpg \ --imgsz 224逻辑说明predict.py会输出 top5 类别和置信度5 分类任务就是全部类别。参数说明--source可以是单张图、文件夹或摄像头编号--imgsz必须和训练一致。4.2 批量推理与结果保存实际用的时候往往是一批图python classify/predict.py \ --weights runs/flower_cls/exp1/weights/best.pt \ --source ../flower_test_folder \ --imgsz 224 \ --save-txt逻辑说明--save-txt会把每张图的预测类别和置信度存成 txt方便后续统计。参数说明不加--save-txt只打印不保存加了之后结果在runs/classify/下。4.3 导出 ONNX 给边缘设备用如果后续要部署到树莓派或 RK3568导出 ONNX 是常见做法python export.py \ --weights runs/flower_cls/exp1/weights/best.pt \ --include onnx \ --imgsz 224逻辑说明导出 ONNX 后可以用 onnxruntime 推理不依赖 PyTorch。参数说明--include支持 onnx、torchscript、coreml 等边缘设备常用 onnx。注意导出时的--imgsz要和训练一致否则输入维度对不上。注意RK3568 这类芯片对算子支持有限导出后最好用 netron 看一下模型结构确认没有奇怪的算子。5. 避坑与排查花分类训练最容易翻车的 5 个地方5.1 报错 “No images found in …”现象训练启动就报找不到图片。原因目录结构不对YOLOV5 分类要求data/train/类别名/图片很多人放成data/train/图片直接跟类别名。解决按 2.2 的结构重新组织确认每个类别文件夹下确实有图。5.2 验证准确率异常高但实际预测全错现象val acc 99%但拿新图预测全错。原因train 和 val 数据泄漏同一对象的图分到了两边。解决按拍摄来源分组划分确保 val 里的对象训练时没见过。5.3 训练 loss 不下降现象loss 一直震荡或卡住。原因学习率太大或数据没归一化。解决YOLOV5 默认会做归一化检查图片是否是损坏文件降低学习率加--lr0 0.001试试。5.4 显存爆了 “CUDA out of memory”现象训练中途报显存不足。原因batch-size 太大或 imgsz 太大。解决降 batch-size 到 16 或 8或者降 imgsz 到 128。也可以加--workers 2减少数据加载进程。5.5 导出 ONNX 后推理结果和 PyTorch 不一致现象PyTorch 预测对的图ONNX 预测错。原因预处理不一致比如归一化参数不同。解决确认导出和推理时用的 mean、std 一致YOLOV5 默认是 0.485/0.456/0.406 和 0.229/0.224/0.225。6. 进阶技巧用混淆矩阵和 TTA 把 5 种花分类精度再提一档训练跑通只是第一步真正要上线还得看哪些类别容易混。YOLOV5 分类的val.py会输出混淆矩阵我一般会重点看非对角线上的数字。比如玫瑰和郁金香如果经常互认说明这两个类特征太近要么加数据要么在预处理里做针对性增强。一个具体技巧是开启 TTA测试时增强。推理时对同一张图做多次变换再平均结果能提升 1 到 3 个点。命令python classify/predict.py \ --weights runs/flower_cls/exp1/weights/best.pt \ --source ../test_flower.jpg \ --imgsz 224 \ --augment逻辑说明--augment会做翻转、缩放等变换后综合预测。参数说明TTA 会增加推理时间边缘设备上慎用服务器端可以开。另一个习惯是每次训练完把混淆矩阵截图存下来对比不同 epoch 的矩阵变化。如果某个类别一直拖后腿单独把它拎出来看图片往往是那类图质量差或数量少。我踩过的最大坑是郁金香图片里混了几张玫瑰导致模型学歪清理数据后精度直接涨了 8 个点。数据质量永远比调参重要希望帮到你。本文还有配套的精品资源点击获取