YOLOv8训练异常:未加载训练集299张图,仅用验证集且训练数据无检测
YOLOv8训练加载错误数据集的排查与解决
核心问题分析
你遇到的现象(训练用验证集、训练集检测不到目标但验证集可以)本质是训练时模型实际加载的是验证集数据,导致模型只学习了验证集样本,自然对训练集无检测能力,对验证集有过拟合式的检测效果。以下是具体排查和解决步骤:
1. 彻底核对数据集YAML配置
即使你之前检查过,也请再确认以下细节:
- 打开你的数据集YAML文件,确保
train和val字段的路径完全正确,没有写反或路径错误:# 正确示例(根据你的实际路径调整) train: ./data/train/images # 必须指向包含299张图片的训练集目录 val: ./data/val/images # 指向包含85张图片的验证集目录 - 优先使用绝对路径(比如
/home/xxx/datasets/train/images),避免相对路径因工作目录变化导致的歧义; - 检查训练集目录下的图片与标签是否一一对应:每张
.jpg/.png图片必须有同名的.txt标签文件,标签内的类别索引要与YAML中names列表的索引一致,空标签或索引错误的图片会被YOLOv8自动过滤。
2. 删除数据集缓存文件
YOLOv8会生成.cache文件加速数据集加载,若之前配置错误,缓存会保留错误的数据集信息:
- 找到训练集和验证集的图片/标签目录,删除所有后缀为
.cache的文件; - 重新启动训练,YOLOv8会重新扫描数据集并生成正确的缓存。
3. 检查训练命令参数
确认训练命令没有指定错误的数据源:
- 确保
--data参数指向的是正确的YAML文件,示例命令:yolo train data=my_dataset.yaml model=yolov8s.pt epochs=50 - 不要在命令中添加
--val等可能强制跳过训练集加载的参数。
4. 验证数据集加载日志
训练启动时,查看控制台日志的开头部分,会显示加载的训练/验证集数量:
train: 299 images, val: 85 images
如果显示train: 85 images,则说明YAML的train路径确实指向了验证集目录,需再次修正路径。
内容的提问来源于stack exchange,提问作者Surya Giri
相关产品推荐
相关产品推荐

