问题描述
- 使用 labelImg 为图片数据集打上标签后交给YOLO5训练,发现测试结果中识别结果全部相反,也就是出现了标签混乱的现象。
- 本人使用猫狗图片各 150 张作为数据集进行模型训练,训练出来的模型将所有的猫识别成了狗,所有的狗识别成了猫,看起来并非模型的准确性问题,而是模型中对于标签识别混乱的问题。
- 如图:
解决过程
- 注意到使用 labelImg 生成的图片标签是 txt 文件,且文件内容的第一个序号为标签序号。如:
1 0.524500 0.533000 0.951000 0.770000
-
这个标签序号与标签文件夹中的 classes.txt 类别说明对应。如图:
其中序号 0 代表 dog 标签,序号 1 代表 cat 标签 -
所以上面 txt 文件中第一个序号为 1,代表这个标签所对应的图片标签是 cat。
-
但是,在源代码对数据集进行配置的 yaml 文件中,没有对 classes.txt 文件路径的配置:
-
上面的 yaml 文件中,只有一个列表对类名配置,而且这个类名的顺序和 classes.txt 文件中的顺序不一致
-
合理怀疑是因为类名顺序不一致,于是我调整 yaml 中的类名列表,重新训练了一个小模型,此时标签就不出现混乱的现象
解决方法
- 使用 labelImg 为图片打好标签后,在为模型配置数据集的 yaml 文件中,class name 列表中的元素顺序应该与标签文件夹中 classes.txt 文件中的标签顺序一致。
- 也就是下面这两个位置中的标签顺序应一致: