MMDetection训练时遇到的问题

训练的时候mAP直接归零了

img


然后可视化测试图像,发现图像里的标签出现了错误:

img

但我标注文件里的对应关系是正确的:
(以下是该图片的标注信息)

{"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"}]}

请问有懂哥可以帮忙分析一下原因吗?万分感谢!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 请看👉 :mmdetection训练自己的数据并评估mAP
  • 除此之外, 这篇博客: mmdetection使用教程及报错中的 mAP测试 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    可以批量测试模型在测试集数据,使用以下命令:

     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')])
    

    最终得到的各个模型的测试结果如下:

    modelmAP0.5mAP0.5:0.95
    yolof0.8600.504
    yolov30.9130.564
    atss0.8560.511
    reppoints0.8780.503
    fastrcnn0.8660.522
    fcos0.8670.515
  • 以下回答来自chatgpt:

    问题分析: 根据描述,训练过程中mAP归零并且标签出现错误,可能导致这个问题的原因有很多,包括但不限于以下几个方面: 1. 数据集问题:标注文件中的标签与实际图像不匹配,或者标注文件本身存在错误; 2. 模型配置问题:模型网络结构、训练配置参数等导致了训练过程中出现问题; 3. 数据预处理问题:数据预处理过程中的问题导致了标签错误或训练失败; 4. 代码实现问题:代码实现错误或者库的使用不当导致训练出错。

    解决方案: 根据以上问题分析,可以尝试以下的解决方案来解决问题。

    1. 检查标注文件:首先检查标注文件中的标签是否与实际图像匹配,确保文件没有错误。可以人工检查标签与图像的对应关系是否正确,以及标注的类别命名是否与训练配置文件中的类别名字一致。

    2. 检查模型配置:检查模型配置文件,确保网络结构和训练参数设置正确。可以参考模型的官方文档或示例配置文件,修改和调整相关参数。

    3. 检查数据预处理:检查数据预处理过程中的代码实现,确保数据处理流程正确无误。特别要注意数据增强的方式和参数设置,确保没有对图像或标签造成错误的处理。

    4. 检查代码实现:仔细检查训练过程的代码实现,确保代码逻辑正确。可以尝试使用调试工具进行排查,例如在关键代码处加上日志输出,检查代码运行时的变量值和数据的正确性,或者使用断点调试来定位错误的来源。

    如果尝试了以上的解决方案后仍然解决不了该问题,可以尝试以下方法:

    1. 查看错误提示:在训练过程中是否输出了错误提示,根据错误提示的内容进行排查和解决。
    2. 查看训练日志:根据训练日志中的输出信息,定位问题出现的位置和原因。

    如果你需要更具体的帮助,可以提供更多的错误信息以及相关的代码和配置文件,以便更好地帮助你解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^