YOLOv5多类别数据集训练异常:仅识别1类问题求助
问题排查与解决方案
1. 统一标签文件的类别ID
不同原始数据集的标签文件(.txt)可能存在类别ID冲突。比如数据集A中"马桶"是ID 0,数据集B中"洗手台"是ID 0,合并后模型会把这两类当成同一类处理。
- 操作:随机抽取各原始数据集的标签文件,查看第一列的类别ID,对比对应
data.yaml的类别映射。 - 修复:将所有数据集的类别统一映射为0、1、2、3,批量修改标签文件的类别ID后重新合并数据集。
2. 验证combined_dataset.yaml配置
确保配置文件中:
nc(类别数)设置为4names列表包含所有4个目标类别train/val/test路径正确指向合并后的对应文件夹
如果names只写了1个类别或nc=1,模型只会学习单一类别。
3. 检查图片与标签的匹配性
合并后可能存在图片无对应标签、标签类别ID不在配置范围内的情况:
- 操作:用YOLOv5自带的
python utils/autoanchor.py --data combined_dataset.yaml检查数据集完整性,或手动抽查图片与对应标签文件。 - 修复:删除无标签的图片,修正标签文件中无效的类别ID。
4. 分析训练日志与可视化结果
查看runs/train/yolov5s_results目录下的文件:
- 看
results.png中的类别损失(cls_loss),如果只有1类损失下降,说明模型未学习到其他类特征,大概率是数据集配置问题。 - 查看
train_batch*.jpg,确认训练时图片的标签是否正确显示所有类别。
5. 检查数据集类别分布
如果某类图片数量远多于其他类,模型会偏向识别该类:
- 操作:统计合并后每个类别的样本数量。
- 修复:增加少数类样本,或训练时添加
--class-weight参数给少数类更高权重。
内容的提问来源于stack exchange,提问作者Stephanie Omwanda
相关产品推荐
相关产品推荐

