☰
YOLOV5分类实战:5种花分类数据集训练与部署全流程
2026/10/5 4:53:19 网站建设 项目流程

简介:这份资源面向计算机视觉入门与进阶开发者,提供一套可直接运行的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.10,PyTorch 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 个点。数据质量永远比调参重要,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询