深度學習知識點 mAp和召回率

2021-09-25 23:40:07 字數 2650 閱讀 2131

一:引數解釋

檢測物件的評價多數是基於某測試資料集的,通常稱為sut(system under test)

在訓練時候使用的資料通常被稱為gt sytem(是帶有正確標準框的資料)。

fp – false positive是指乙個物件出現在sut中但是沒有出現在gt中

tp – true positive是指乙個物件既出現在sut也出現在gt中

fn – false negative是真乙個物件出現在gt中但是沒有出現在sut

tn – true negative是指物件在sut與gt中均沒有出現

cgt – complete ground truth 是指總的gt數目

二:計算ap與map

在計算ap過程中最重要的是生成precision-recall curve (精確度-召回率曲線),它是計算map最重要的一步動作。下圖中有六個book的標註框(gt)

真實標註資訊

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

**出來的框

有八個**框,根據得分從高到低的排序如下:

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

判斷tp與fp**如下

if ovmax >= min_overlap:

if "difficult" not in gt_match:

if not bool(gt_match["used"]):

# true positive

tp[idx] = 1

gt_match["used"] = true

count_true_positives[class_name] += 1

# update the ".json" file

with open(gt_file, 'w') as f:

f.write(json.dumps(ground_truth_data))

if show_animation:

status = "match!"

else:

# false positive (multiple detection)

fp[idx] = 1

if show_animation:

status = "repeated match!"

else:

# false positive

fp[idx] = 1

if ovmax > 0:

status = "insufficient overlap"

計算累計tp與fp的**如下:

for idx, val in enumerate(fp):

fp[idx] += cumsum

cumsum += val

cumsum = 0

for idx, val in enumerate(tp):

tp[idx] += cumsum

cumsum += val

積分求解

precision與recall資料的取值範圍都在0~1之間,以recall為x軸位、以precision為y軸可以繪製pr曲線。在繪製之前首先需要完成插值操作

首先對精度資料首尾新增0然後進行最大值插值取值,得到mpre

【1.0, 1.0, 1.0, 0.66, 0.5, 0.5, 0.5, 0.5, 0.5, 0】

對召回資料首尾新增0與1得到mrec

【0, 0.166, 0.33, 0.33, 0.33, 0.33, 0.5, 0.5, 0.66, 1.0】

進行尋找變化的梯度得到index(1、2、6、8、9),對曲線積分求解最終的ap為:

loop index(1、2、6、8、9)

ap =+ ((mrec[index]-mrec[index-1])*mpre[index])

return ap

上面的解釋是ap計算方法,voc2007對計算出來結果,根據原始取得的recall進行最大插值為11點的方式來計算ap,圖示如下:

另外一種方式被稱為全插值方法,同樣是基於最大值進行插值,得到曲線顯示如下

通過插值之後進行ap計算得到的結果會跟積分直接求解的結果不同,當前pascal voc都是基於全插值方式來計算ap,最終根據每個類別的ap求和之後除以總的檢測類別數目就得到map值。

map = sum(ap) / n 

其中n表示總的類別數目

深度學習知識點

1.epoch設定 epoch太小,可能欠擬合,但可能因為太慢不得不減小epoch epoch太大,會過擬合,導致準確率下降。如下圖,顯然epoch 2時準確率下降,已經過擬合了 2.學習率選擇 fast.ai中有乙個learn.lr find 找學習率 x 和loss y 的曲線中斜率最大的即可。...

機器學習基礎知識 精確率和召回率

判定乙個模型是好是壞,應該從多個角度去評判 一般最常使用的是準確率,即 結果正確的百分比 正確個數 總個數 api為 estimator.score 其他標準 首先介紹混淆矩陣 混淆矩陣引出其他指標 精確率 查得準 結果為正例樣本中,真實結果為正例的比例 tp tp fp 召回率 查得全 真實結果為...

深度學習知識點2

1.為什麼引入非線性啟用函式?引入非線性啟用函式,可以使深層的神經網路不再是線性的輸入組合,而是可以逼近任意函式,如果不使用啟用函式,在這種情況下每一層的輸出都是上一層輸入的線性函式,無論神經網路的有多少層,輸出的最終結果都是乙個線性組合,與沒有隱藏層的效果相差不多,也就成了最原始的感知機了。2.為...