SSD計算mAP值
https://github.com/weiliu89/caffe
3種計算方法:
參考文獻: https://sanchom.wordpress.com/tag/average-precision/
mAP = 相鄰召回率的間隔*準確率; #其實就是離散函數積分求面積
11point:只用到準確率,11-point interpolated average precision,默認召回率的間隔是{0,0.1, 0.2, …, 0.9, 1.0},VOC2007 style for computing AP.
MaxIntegral:使用準確率、召回率;VOC2012or ILSVRC style for computing AP. 召回率的間隔是從後往前計算。
Integral:與MaxIntegral差不多,只是從前往後計算;爲默認參數
源碼位置: caffe/src/caffe/util/ ComputeAP()
需要修改solver.prototxt中的參數:
eval_type:"detection" #統計整體的mAP值
ap_version:"11point" #計算mAP值的方式不同,
show_per_class_result:true #統計每個類的mAP值
Faster-RCNN計算mAP值
https://github.com/rbgirshick/py-faster-rcnn
調用位置:lib/datasets/pascal_voc.py
如果使用參數'matlab_eval',則使用matlab版計算mAP值。
Python版本:
源碼位置: lib/datasets/voc_eval.py
voc_eval(detpath,
annopath,
imagesetfile,
classname,
cachedir,
ovthresh=0.5,
use_07_metric=False) #是否使用voc07 11點計算mAP (true爲使用11點計算mAP,false爲對應的SSD中的MaxIntegral方式計算mAP值)
最終調用函數: ap =voc_ap(rec, prec, use_07_metric)
matlab版本:
lib\datasets\VOCdevkit-matlab-wrapper\voc_eval.m
函數: [recall, prec,ap] = VOCevaldet(VOCopts, comp_id,cls, true);
源碼位置:VOCdevkit/VOCcode/VOCevaldet.m 只使用11點計算mAP