如何使用Darknet计算YOLOv4的mAP0.5:0.95评估指标
Darknet YOLOv4 自定义IoU阈值mAP计算方法
默认执行不带额外参数的map命令,只会输出IoU=0.5阈值下的mAP结果,通过追加参数即可实现其他阈值、以及COCO标准mAP@0.5:0.95的计算,具体操作如下:
- 单指定IoU阈值的mAP计算
在原命令末尾追加-iou_thresh 阈值参数即可,阈值替换为0~1之间你需要的数值。比如要计算IoU=0.75下的mAP,执行命令:
!./darknet detector map $_path_to_objdata_file $_path_to_configuration_file $_path_to_weights -iou_thresh 0.75
运行完成后输出的mean average precision结果,就是对应阈值下的mAP。
- mAP@IoU=0.5:0.95指标计算
目前Colab环境部署YOLOv4所用的基本都是AlexeyAB维护的Darknet分支,本身内置了多IoU阈值步长计算逻辑,不需要自己手动循环跑多个阈值,直接在原命令后追加起止阈值、步长参数即可:
!./darknet detector map $_path_to_objdata_file $_path_to_configuration_file $_path_to_weights -iou_thresh 0.5 -iou_step 0.05 -iou_end 0.95
三个参数分别指定IoU起始值、阈值步长、IoU结束值,刚好覆盖mAP@0.5:0.95要求的从0.5到0.95、间隔0.05的全部10个阈值。运行完成后,输出日志里会逐个列出每个IoU阈值对应的AP值,最终给出的跨阈值平均结果就是需要的mAP@0.5:0.95。
如果你用的是较早的、没有步长计算参数的Darknet版本,可以直接在Colab里执行下面的shell循环,自动遍历10个阈值计算结果并输出平均值:
iou_list=(0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95) total_map=0 for iou in ${iou_list[@]} do # 提取单阈值mAP结果累加 single_map=$(./darknet detector map $_path_to_objdata_file $_path_to_configuration_file $_path_to_weights -iou_thresh $iou | grep "mean average precision" | awk '{print $NF}') total_map=$(echo "$total_map + $single_map" | bc) done # 计算10个阈值的平均结果 map_final=$(echo "scale=4; $total_map / 10" | bc) echo "计算完成,mAP@IoU0.5:0.95 = $map_final"
内容的提问来源于stack exchange,提问作者Gregor
相关产品推荐
相关产品推荐

