训练的时候mAP直接归零了
但我标注文件里的对应关系是正确的:
(以下是该图片的标注信息)
{"id": 52, "image_id": 12, "category_id": 9, "bbox": [23, 358, 23, 50], "area": 1150, "iscrowd": 0},
{"id": 53, "image_id": 12, "category_id": 9, "bbox": [43, 359, 22, 38], "area": 836, "iscrowd": 0},
{"id": 54, "image_id": 12, "category_id": 9, "bbox": [147, 224, 15, 19], "area": 285, "iscrowd": 0},
{"id": 55, "image_id": 12, "category_id": 1, "bbox": [353, 61, 27, 38], "area": 1026, "iscrowd": 0},
{"id": 56, "image_id": 12, "category_id": 4, "bbox": [222, 301, 21, 12], "area": 252, "iscrowd": 0},
{"id": 57, "image_id": 12, "category_id": 7, "bbox": [211, 363, 25, 22], "area": 550, "iscrowd": 0},
{"id": 58, "image_id": 12, "category_id": 1, "bbox": [204, 316, 49, 34], "area": 1666, "iscrowd": 0},
{"id": 59, "image_id": 12, "category_id": 1, "bbox": [241, 340, 39, 31], "area": 1209, "iscrowd": 0},
{"id": 60, "image_id": 12, "category_id": 1, "bbox": [262, 312, 44, 35], "area": 1540, "iscrowd": 0},
{"id": 61, "image_id": 12, "category_id": 1, "bbox": [293, 333, 45, 32], "area": 1440, "iscrowd": 0},
{"id": 62, "image_id": 12, "category_id": 1, "bbox": [315, 303, 49, 41], "area": 2009, "iscrowd": 0},
{"id": 63, "image_id": 12, "category_id": 1, "bbox": [345, 325, 47, 35], "area": 1645, "iscrowd": 0},
{"id": 64, "image_id": 12, "category_id": 1, "bbox": [368, 292, 48, 40], "area": 1920, "iscrowd": 0},
{"id": 65, "image_id": 12, "category_id": 1, "bbox": [396, 494, 40, 28], "area": 1120, "iscrowd": 0}
"categories": [{"id": 1, "name": "airplane", "supercategory": "object"},
{"id": 2, "name": "boat", "supercategory": "object"},
{"id": 3, "name": "camping_car", "supercategory": "object"},
{"id": 4, "name": "car", "supercategory": "object"},
{"id": 5, "name": "pick-up", "supercategory": "object"},
{"id": 6, "name": "tractor", "supercategory": "object"},
{"id": 7, "name": "truck", "supercategory": "object"},
{"id": 8, "name": "van", "supercategory": "object"},
{"id": 9, "name": "vehicle", "supercategory": "object"},
{"id": 10, "name": "others", "supercategory": "object"}]}
请问有懂哥可以帮忙分析一下原因吗?万分感谢!
不知道你这个问题是否已经解决, 如果还没有解决的话:可以批量测试模型在测试集数据,使用以下命令:
python tools/test.py model_train/yolof/yolof_r50_c5_8x8_1x_coco.py model_train/yolof/epoch_70.pth --show
--eval bbox
其中的eval可选参数如下:
‘evaluation metrics, which depends on the dataset, e.g., “bbox”,’
’ “segm”, “proposal” for COCO, and “mAP”, “recall” for PASCAL VOC’
同时也可以通过以下命令:
--out=eval/result2.pkl
将测试结果保存成pkl文件。
最终得到包含mAP0.5,mAP0.5:0.95等参数:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.504
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.860
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.538
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.109
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.507
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.653
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.578
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.578
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.578
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.187
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.582
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.662
OrderedDict([('bbox_mAP', 0.504), ('bbox_mAP_50', 0.86), ('bbox_mAP_75', 0.538), ('bbox_mAP_s', 0.109), ('bbox_mAP_m', 0.507), ('bbox_mAP_l', 0.653),
('bbox_mAP_copypaste', '0.504 0.860 0.538 0.109 0.507 0.653')])
最终得到的各个模型的测试结果如下:
model | mAP0.5 | mAP0.5:0.95 |
---|---|---|
yolof | 0.860 | 0.504 |
yolov3 | 0.913 | 0.564 |
atss | 0.856 | 0.511 |
reppoints | 0.878 | 0.503 |
fastrcnn | 0.866 | 0.522 |
fcos | 0.867 | 0.515 |
问题分析: 根据描述,训练过程中mAP归零并且标签出现错误,可能导致这个问题的原因有很多,包括但不限于以下几个方面: 1. 数据集问题:标注文件中的标签与实际图像不匹配,或者标注文件本身存在错误; 2. 模型配置问题:模型网络结构、训练配置参数等导致了训练过程中出现问题; 3. 数据预处理问题:数据预处理过程中的问题导致了标签错误或训练失败; 4. 代码实现问题:代码实现错误或者库的使用不当导致训练出错。
解决方案: 根据以上问题分析,可以尝试以下的解决方案来解决问题。
检查标注文件:首先检查标注文件中的标签是否与实际图像匹配,确保文件没有错误。可以人工检查标签与图像的对应关系是否正确,以及标注的类别命名是否与训练配置文件中的类别名字一致。
检查模型配置:检查模型配置文件,确保网络结构和训练参数设置正确。可以参考模型的官方文档或示例配置文件,修改和调整相关参数。
检查数据预处理:检查数据预处理过程中的代码实现,确保数据处理流程正确无误。特别要注意数据增强的方式和参数设置,确保没有对图像或标签造成错误的处理。
检查代码实现:仔细检查训练过程的代码实现,确保代码逻辑正确。可以尝试使用调试工具进行排查,例如在关键代码处加上日志输出,检查代码运行时的变量值和数据的正确性,或者使用断点调试来定位错误的来源。
如果尝试了以上的解决方案后仍然解决不了该问题,可以尝试以下方法:
如果你需要更具体的帮助,可以提供更多的错误信息以及相关的代码和配置文件,以便更好地帮助你解决问题。