TensorBoard中mAP分数接近0但损失值低的问题咨询
这情况我之前踩过坑!明明看模型输出的图里有不少像模像样的检测框,结果TensorBoard里的mAP几乎是0,大概率是这几个原因在搞鬼,咱们一个个排查:
评估环节的标注/配置不匹配
先把eval_config和评估数据集的标注文件拉出来核对:- 类别ID必须和训练时完全一致!比如训练时把"dog"设为ID 1,评估标注里写成了ID 2,那模型预测的所有框都会被判定为错误,mAP直接归零。
- 检查
min_score_thresh参数:你看输出图时可能只显示了置信度较高的框,但eval.py默认可能会把所有置信度的框都纳入计算——一堆低置信度的乱框会把精确率拉到谷底,mAP自然好看不了。试试把eval配置里的min_score_thresh设成你看输出图时用的阈值(比如0.5)再跑一遍。 - 边界框坐标格式要对齐:训练和评估的标注框格式是
[ymin, xmin, ymax, xmax]还是[xmin, ymin, xmax, ymax]?要是和模型输出的格式不匹配,IoU计算全错,mAP肯定为0。
IoU阈值卡得太严(或匹配逻辑错了)
mAP默认用的是IoU≥0.5的判定标准(PASCAL VOC规则),如果你的模型预测框和标注框的重叠度刚好都卡在0.5以下,哪怕框的位置看起来对,也会被算成假阳性。比如标注框是[10,10,50,50],模型预测的是[15,15,55,55],IoU可能刚好0.49,这就不算正确检测。
你可以去TensorBoard里看PR曲线,如果所有类别的曲线都贴在左下角,那基本就是IoU不达标的问题。训练集和评估集分布差异太大
比如训练集全是室内场景的目标,评估集全是室外的;或者训练集里的目标普遍比评估集的大一圈——模型虽然学到了点特征,但在评估集上的框和标注匹配度不够,IoU都达不到阈值,mAP自然上不去。这种情况可以手动拿几张评估图,把预测框和标注框叠在一起对比,一眼就能看出来问题。训练步数还不够
3.5k步对于Faster-RCNN来说可能还处于初期阶段,尤其是自定义数据集比较复杂的话。虽然能出框,但这些框的位置精度、置信度都还不稳定,很多框的IoU达不到要求,导致mAP上不来。可以再训个几千步,看看mAP有没有回升的迹象。
最后给个小技巧:手动挑几张评估集的图,把模型预测框和标注框放在一起对比,看看是类别错了、IoU不够还是别的问题,比光看TensorBoard能更快定位原因。
内容的提问来源于stack exchange,提问作者Karthik

