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 呢?
計算流程
- **貓咪類別的 Prediction **下,對於某一確定 confidence threshold
- 將 Prediction 按照 confidence 排序
- confidence 大於 confidence threshold 的 Prediction 定義為 Positive
- 貓咪類別的 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
精確率Precision 判斷對了多少個【都被模型判斷為positive,其中判對了多少個】
召回率Recall positive找到了多少個 【在真實標簽為positive的所有樣本中,找到了多少個】
https://blog.csdn.net/asasasaababab/article/details/79994920 這里有解釋為什么不能直接用准確率accuracy:
- 主要是因為類別不平衡問題,如果大部分是negative的 而且大部分模型都很容易判別出來,那准確率都很高, 沒有區分度,也沒有實際意義(因為negative不是我們感興趣的)
Precision vs Accuracy
Precision 查准率,針對某一類別,沒有說明具體類別的precision是沒有意義的,在二分類問題中默認是正樣本的precision (比如在目標檢測里面針對的是positive類別)
Accuracy 准確率,計算的是分類正確個數占全體樣本的比例,針對的是所有類別
Average Precision
平均精確率Average Precision
-
解釋第二個式子: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