目標檢測的評價標准mAP, Precision, Recall, Accuracy


metrics 評價方法

針對誰進行評價?

  • 對於物體分類到某個類別的 預測結果 和 真實結果 的差距進行評價(二分類)

  • 在多分類問題中,評價方法是逐個類計算的,不是所有類一起算!是只針對一個類算,每個類別有自己的指標值!

    • 也就是對每個類別,預測結果Positive\Negative 和真實結果的差距

在detection任務中,要在什么階段用?

  • 一般是將網絡的輸出,在各個類別下統計topk,再對這些topk使用NMS,最后得出的結果才用來評價。實際上這也是detection的結果。

TP , FP , TN , FN

概念

TP = True Positive

  • 預測為positive 且ground-truth和預測一致 => ground-truth是positive

FP= False Positive

  • 預測為positive 且ground-truth和預測不一致 => ground-truth是negative

TN=True Negative

  • 預測為negative 且ground-truth和預測一致 => ground-truth是negative

FN=False Negative

  • 預測為negative 且ground-truth和預測不一致 => ground-truth是positive

\

計算流程

不同數據集可能用的是不同的定義方法,以VOC07為例

在所有預測為貓咪類的框中, 具有怎么樣的特征的框才是 TP 和 FP 呢?

計算流程

  1. **貓咪類別的 Prediction **下,對於某一確定 confidence threshold
  • 將 Prediction 按照 confidence 排序
  • confidence 大於 confidence threshold 的 Prediction 定義為 Positive
  1. 貓咪類別的 Positive Prediction下,對於某一確定 IOU threshold
  • 貓咪類別的 GT的 IOU 大於 threshold 的 Prediction, 並且 該GT是未被其它Prediction 匹配的,標記為 True Positive(TP),同時對應的GT標記為已匹配
  • 貓咪類別的 GT的 IOU 小於 threshold 的 Prediction, 或是該GT已經被匹配,則標記為 False Positive(FP)

Accuracy , Precision ,Recall

設樣本 \(i\) 的真實標簽 \(x_i\),網絡輸出的置信度為 $ y_i $

准確率Accuracy

\[\frac{CorrectNum}{TotalNum}=\frac{TP+TN}{TotalNum} \]

精確率Precision 判斷對了多少個【都被模型判斷為positive,其中判對了多少個】

\[p(t)=P(x_i \in C\ |\ y_i \ge t ) = \frac{TP}{TP+FP}=\frac{TP}{all\ detections} \]

召回率Recall positive找到了多少個 【在真實標簽為positive的所有樣本中,找到了多少個】

\[r(t)=P(y_i \ge t \ | \ x_i \in C) = \frac{TP}{TP+FN}=\frac{TP}{all\ groundtruth} \]

https://blog.csdn.net/asasasaababab/article/details/79994920 這里有解釋為什么不能直接用准確率accuracy:

  • 主要是因為類別不平衡問題,如果大部分是negative的 而且大部分模型都很容易判別出來,那准確率都很高, 沒有區分度,也沒有實際意義(因為negative不是我們感興趣的)

Precision vs Accuracy

Precision 查准率,針對某一類別,沒有說明具體類別的precision是沒有意義的,在二分類問題中默認是正樣本的precision (比如在目標檢測里面針對的是positive類別)

Accuracy 准確率,計算的是分類正確個數占全體樣本的比例,針對的是所有類別

Average Precision

平均精確率Average Precision

\[AP = \frac{1}{11}\sum_{r\in \{0, 0.1, 0.2, ..., 1\}} p_{interp}(r) \\ p_{interp}(r) = max_{\hat r:\hat r \ge r} p(\hat r) \]

  • 解釋第二個式子:r的取值從 0到1 以0.1為間距,共11個取值。從某個r開始 從所有比r大的值中選擇某個作為閾值t 計算精度,返回精度的最大值

  • \(AP_{2D}\): 在圖像平面上計算的AP 記為\(AP_{2D}\)

3D detection中還會涉及到以下指標:

  • \(AP_{BV}\):將3D檢測投影到BEV視角,然后計算\(AP_{BV}\) ,能夠避免不同物體投影到2D可能會重疊的情況

  • \(AP_{3D}\):直接計算3D bbox和ground-truth bbox的IoU,但是仍然無法精確衡量bbox方向的精確率

PR曲線

Precision-Recall Curve

  • Recall是橫軸, Precision是縱軸,隨着Recall的增大,Precision會下降,因為為了使模型找得更全(high recall),可能需要檢測更多物體,從而可能有很多false positive(使得precision下降)

  • 以rank為例,計算 **每新增一個樣本之后,當前序列的precision和recall ** https://blog.csdn.net/asasasaababab/article/details/79994920 這里有給出圖片例子

  • 怎么畫的?插值

  • 【局限】只比較不同模型的曲線有時候很難分辨,因為不同的曲線可能經常會交叉,考慮用AP(其實就是曲線和坐標軸圍成的面積,是一個數值,可以更直觀比較)

AP計算 Average Precision

兩種方式:11點插值,或是計算面積(AUC Area Under Precision-Recall Curve)

  • 11點插值:把recall從 0~1 每隔 0.1 取端點 共11個,每個端點對應 \(p_{interp}(r)\) 計算公式如上

    • 對於一批樣本個數為 n 的數據,可以計算出 n 個 precision 和 recall:

      • 當處理第一張圖,統計第一張圖里的 \(TP_1\)\(FP_1\)

      • 到下一張圖時,統計前兩張圖總共的 \(TP_2\)\(FP_2\)

      • 同理,到第 k 張圖時,統計前 k 張圖總共的 $TP_k $ 和 \(FP_k\)

      • 用這n個 \(TP\)\(FP\) 可以計算出 n 個precision 和 recall (其實就是 前1張圖的precision\recall,前2張圖的precision\recall, ....)

      • 最后用這n個precision和recall去做11點插值,得到 recall 在 11 個取值下對應的 precision,用這個 recall 和 precision就可以畫出PR曲線

  • 計算面積:將曲線平滑成直角折線,從而計算曲線與坐標軸的面積近似於對每小塊矩形面積求和

https://github.com/rafaelpadilla/Object-Detection-Metrics

mAP

目標檢測中衡量識別精度的指標是mAP(mean average precision)

多個類別物體檢測中每一個類別都可以根據recall和precision繪制一條曲線,AP就是該曲線下的面積,mAP是多個類別AP的平均值


參考資料

https://blog.csdn.net/asasasaababab/article/details/79994920

https://github.com/rafaelpadilla/Object-Detection-Metrics


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM