最近使用cocoapi計算map,之前參考darknet的valid result,發(fā)現(xiàn)結(jié)果是score>0.001的box。于是以為它的處理方式是將得到所有bbox取confidence>0.001。
后來發(fā)現(xiàn)這樣處理,得到的map偏低,我在考慮要不要先做NMS再算map,但是不知道NMS的IOU thresh 應(yīng)該怎么取,是否有一個約定的標(biāo)準(zhǔn)。
于是查看源代碼,發(fā)現(xiàn)其實yolo這個結(jié)果就是經(jīng)過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作為競賽,有各種目標(biāo)檢測方法參加,例如anchor free的方法就不需要NMS,也就沒有NMS的thresh。 所以,這兩個thresh應(yīng)該沒有一個統(tǒng)一的標(biāo)準(zhǔn),可以做網(wǎng)格搜索來取得最高的map結(jié)果。