问题描述:
基于yolov5训练后,部分类别检测的P、R和mAP为0,结果如下:
问题分析:
检查pytorch、cuda、cudnn版本问题对应,检查验证集与训练集数据来源不一样的问题,我这里产生的问题是在标签文件由xml格式转txt格式时,为定义种类,与yolov5中数据集的配置文件中的种类有一点不同。
相关解释:
在划分数据集时需要指定class的值,不然在划分过程中,计算机会自动分配编号,产生此问题主要原因是在划分过程中,令classes = [],计算机识别的顺序如下:
即在未指定类别时,默认按字母顺序进行排序,crazing对应标号0,inclusion对应1,...,依次类推。如果未指定classes值会使划分产生的txt文件默认按照上述标号进行写入,举个例子,运行没有指定classes值,得到的txt转化的标签文件,如下:
这里,每一行第一个数表示种类,后面值表示归一化后坐标值,可见,未指定classes值,电脑按字母顺序排列,在这里,inclusion对应标号为1。
而在yolo程序中有对于数据来源的配置文件的定义,(自行定义,也就是自己设定的data.yaml文件),在此部分,对于name进行填写,如下:
由于我人为指定时并未按照字母顺序指定,而是按照上述顺序进行指定,所以在yolov5网络中认为inclusion标号为2(这里标号均从1开始),所以结合数据训练数据产生的报错,pathes和inclusion的准确率和召回率为0。
因此,需要根据定义的data.yaml中name的顺序,在自己转换文件的classes中进行填写,一一对应。
由此,定义后的顺序如下:
再次运行后的结果如下: