上次我寫了一篇關(guān)于mAP計(jì)算的文章,發(fā)布之后得到很多網(wǎng)友的反饋,有感于此,覺得有必要重寫一篇,目的有兩個(gè),一個(gè)是告訴大家你們的意見我收到了,另外一個(gè)是細(xì)化了我對(duì)mAP的計(jì)算過程的理解,如有廖誤懇請(qǐng)指正,本人一定虛心接受!歡迎繼續(xù)拍磚!
對(duì)象檢測(cè)評(píng)價(jià)參數(shù)解釋
對(duì)象檢測(cè)評(píng)價(jià)是針對(duì)對(duì)象檢測(cè)系統(tǒng)性能指標(biāo)的整體性能評(píng)估,評(píng)價(jià)指標(biāo)包括
-
正確檢測(cè)率
-
錯(cuò)誤檢測(cè)率
-
漏檢率
等常見指標(biāo),更廣義的評(píng)價(jià)還包括檢測(cè)率除以精度與敏感性。檢測(cè)對(duì)象的評(píng)價(jià)多數(shù)是基于某測(cè)試數(shù)據(jù)集的,通常稱為SUT(System Under Test), 我們?cè)谟?xùn)練時(shí)候使用的數(shù)據(jù)通常被稱為GT Sytem(是帶有正確標(biāo)準(zhǔn)框的數(shù)據(jù))。評(píng)價(jià)對(duì)象檢測(cè)系統(tǒng)性能經(jīng)常需要用到術(shù)語與解釋如下:
FP –False Positive是指一個(gè)對(duì)象出現(xiàn)在SUT中但是沒有出現(xiàn)在GT中
TP – True Positive是指一個(gè)對(duì)象既出現(xiàn)在SUT也出現(xiàn)在GT中
FN – False negative是真一個(gè)對(duì)象出現(xiàn)在GT中但是沒有出現(xiàn)在SUT
TN – True negative是指對(duì)象在SUT與GT中均沒有出現(xiàn)
CGT – complete ground truth 是指總的GT數(shù)目
二:計(jì)算AP與mAP
在計(jì)算AP過程中最重要的是生成Precision-Recall Curve (精確度-召回率曲線),它是計(jì)算mAP最重要的一步動(dòng)作。下圖中有六個(gè)book的標(biāo)注框(GT)
藍(lán)色矩形框標(biāo)注信息如下:
book 439 157 556 241
book 437 246 518 351
book 515 306 595 375
book 407 386 531 476
book 544 419 621 476
book 609 297 636 392
紅色矩形框算法預(yù)測(cè)結(jié)果如下:
有八個(gè)預(yù)測(cè)框,根據(jù)得分從高到低的排序如下:
book 0.619459 413 390 515 459
book 0.462608 518 314 603 369
book 0.460851 429 219 528 247
book 0.382881 403 384 517 461
book 0.369369 405 429 519 470
book 0.298196 592 310 634 388
book 0.272826 433 272 499 341
book 0.269833 433 260 506 336
其中第二列是預(yù)測(cè)邊界框(BB)對(duì)book得分
判斷TP與FP代碼如下
ifovmax>=min_overlap:
if"difficult"notingt_match:
ifnotbool(gt_match["used"]):
#truepositive
tp[idx]=1
gt_match["used"]=True
count_true_positives[class_name]+=1
#updatethe".json"file
withopen(gt_file,'w')asf:
f.write(json.dumps(ground_truth_data))
ifshow_animation:
status="MATCH!"
else:
#falsepositive(multipledetection)
fp[idx]=1
ifshow_animation:
status="REPEATEDMATCH!"
else:
#falsepositive
fp[idx]=1
ifovmax>0:
status="INSUFFICIENTOVERLAP"
計(jì)算累計(jì)TP與FP的代碼如下:
foridx,valinenumerate(fp):
fp[idx]+=cumsum
cumsum+=val
cumsum=0
foridx,valinenumerate(tp):
tp[idx]+=cumsum
cumsum+=val
積分求解
Precision與Recall數(shù)據(jù)的取值范圍都在0~1之間,以Recall為X軸位、以Precision為Y軸可以繪制PR曲線。在繪制之前首先需要完成插值操作
首先對(duì)精度數(shù)據(jù)首尾添加0然后進(jìn)行最大值插值取值,得到mpre
【1.0, 1.0, 1.0, 0.66, 0.5, 0.5, 0.5, 0.5, 0.5, 0】
對(duì)召回?cái)?shù)據(jù)首尾添加0與1得到mrec
【0, 0.166, 0.33, 0.33, 0.33, 0.33, 0.5, 0.5, 0.66, 1.0】
進(jìn)行尋找變化的梯度得到index(1、2、6、8、9),對(duì)曲線積分求解最終的AP為:
loopindex(1、2、6、8、9)
AP=+((mrec[index]-mrec[index-1])*mpre[index])
returnAP
上面的解釋是AP計(jì)算方法,VOC2007對(duì)計(jì)算出來結(jié)果,根據(jù)原始取得的recall進(jìn)行最大插值為11點(diǎn)的方式來計(jì)算AP,圖示如下:
另外一種方式被稱為全插值方法,同樣是基于最大值進(jìn)行插值,得到曲線顯示如下
通過插值之后進(jìn)行AP計(jì)算得到的結(jié)果會(huì)跟積分直接求解的結(jié)果不同,當(dāng)前PASCAL VOC都是基于全插值方式來計(jì)算AP,最終根據(jù)每個(gè)類別的AP求和之后除以總的檢測(cè)類別數(shù)目就得到mAP值。
mAP=sum(AP)/N
其中N表示總的類別數(shù)目
-
檢測(cè)系統(tǒng)
+關(guān)注
關(guān)注
3文章
945瀏覽量
42996 -
MAP
+關(guān)注
關(guān)注
0文章
48瀏覽量
15121 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1200瀏覽量
24619
原文標(biāo)題:詳解對(duì)象檢測(cè)網(wǎng)絡(luò)性能評(píng)價(jià)指標(biāo)mAP計(jì)算
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論