【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因

问题描述

  • 使用 labelImg 为图片数据集打上标签后交给YOLO5训练,发现测试结果中识别结果全部相反,也就是出现了标签混乱的现象。
  • 本人使用猫狗图片各 150 张作为数据集进行模型训练,训练出来的模型将所有的猫识别成了狗,所有的狗识别成了猫,看起来并非模型的准确性问题,而是模型中对于标签识别混乱的问题。
  • 如图:
    【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因_第1张图片

解决过程

  • 注意到使用 labelImg 生成的图片标签是 txt 文件,且文件内容的第一个序号为标签序号。如:

1 0.524500 0.533000 0.951000 0.770000

  • 这个标签序号与标签文件夹中的 classes.txt 类别说明对应。如图:
    【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因_第2张图片
    其中序号 0 代表 dog 标签,序号 1 代表 cat 标签

  • 所以上面 txt 文件中第一个序号为 1,代表这个标签所对应的图片标签是 cat。

  • 但是,在源代码对数据集进行配置的 yaml 文件中,没有对 classes.txt 文件路径的配置:
    【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因_第3张图片

  • 上面的 yaml 文件中,只有一个列表对类名配置,而且这个类名的顺序和 classes.txt 文件中的顺序不一致
    【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因_第4张图片

  • 合理怀疑是因为类名顺序不一致,于是我调整 yaml 中的类名列表,重新训练了一个小模型,此时标签就不出现混乱的现象

解决方法

  • 使用 labelImg 为图片打好标签后,在为模型配置数据集的 yaml 文件中,class name 列表中的元素顺序应该与标签文件夹中 classes.txt 文件中的标签顺序一致。
  • 也就是下面这两个位置中的标签顺序应一致:
    【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因_第5张图片
    【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因_第6张图片

你可能感兴趣的:(yolo,深度学习,人工智能,YOLO)