计算mAP之前的NMS处理。

最近使用cocoapi计算map,之前参考darknet的valid result,发现结果是score>0.001的box。于是以为它的处理方式是将得到所有bbox取confidence>0.001。
后来发现这样处理,得到的map偏低,我在考虑要不要先做NMS再算map,但是不知道NMS的IOU thresh 应该怎么取,是否有一个约定的标准。
于是查看源代码,发现其实yolo这个结果就是经过NMS之后得到的:

# detector.c
float thresh = .001;
float nms = .45;
...
if (nms) {
                if (l.nms_kind == DEFAULT_NMS) do_nms_sort(dets, nboxes, l.classes, nms);
                else diounms_sort(dets, nboxes, l.classes, nms, l.nms_kind, l.beta_nms);
            }

分析一下,coco和voc作为竞赛,有各种目标检测方法参加,例如anchor free的方法就不需要NMS,也就没有NMS的thresh。 所以,这两个thresh应该没有一个统一的标准,可以做网格搜索来取得最高的map结果。

你可能感兴趣的:(计算mAP之前的NMS处理。)