如何使用YOLOv8训练发票与收据图像分类模型?
YOLOv8发票/收据分类训练解决方案
错误原因分析
报错FileNotFoundError: Found no valid file for the classes labels主要由以下几点导致:
- 数据集结构不符合YOLOv8分类的默认加载逻辑,默认会自动寻找
val验证集目录 - 当前工作目录与数据集路径不匹配,导致程序找不到图像文件
- 图像格式不在支持列表内,或目录中存在非图像干扰文件
分步解决方案
1. 调整数据集结构(可选但推荐)
YOLOv8分类优先识别包含train和val子目录的数据集根目录,规范结构如下:
prj -train -invoice -receipt -val # 建议从train中抽取10%-20%数据作为验证集,无则可暂时跳过 -invoice -receipt
2. 修复路径与加载参数
方法1:指定工作目录并跳过验证集(无val目录时)
在代码开头添加工作目录指定,同时通过split='train'参数告诉YOLOv8仅使用训练集:
import os from ultralytics import YOLO # 替换为你的prj文件夹绝对路径 os.chdir("C:/your/path/to/prj") model = YOLO('yolov8n-cls.pt') # 训练模型 model.train( data="train/", epochs=100, imgsz=64, split='train', batch=8 # CPU环境建议设置较小批量 )
方法2:使用YAML文件管理数据集(灵活配置)
创建data.yaml文件放在prj目录下,内容如下:
train: ./train # 训练集相对路径 val: ./val # 验证集相对路径(无则注释该行) nc: 2 # 类别总数:发票、收据共2类 names: ['invoice', 'receipt'] # 类别名称,需与文件夹名一一对应
然后修改代码加载该配置:
import os from ultralytics import YOLO os.chdir("C:/your/path/to/prj") model = YOLO('yolov8n-cls.pt') model.train(data="data.yaml", epochs=100, imgsz=64, batch=8)
3. 验证图像有效性
- 检查
invoice和receipt目录下的图像格式是否为支持类型:.jpg, .jpeg, .png, .ppm, .bmp, .pgm, .tif, .tiff, .webp,非图像格式需转换为上述类型 - 删除目录内的非图像文件(如文本、快捷方式等),避免干扰数据集加载
内容的提问来源于stack exchange,提问作者Gayathri K
相关产品推荐
相关产品推荐

