評價指標
二分類評價指標
混淆矩陣
TP: 正確預測為了正樣本,原來也是正樣本
FN: 錯誤的預測為負樣本,原來是正樣本 (漏報,沒有找到正確匹配的數目)
FP: 錯誤的預測為正樣本,原來是負樣本 (誤報,沒有的匹配不正確)
TN: 正確的預測為負樣本,原來是負樣本
正確率
精確率和召回率
精確率/查準率
TP: 真實P類 預測P類, FP: 真實N類 預測P類, TP + FP: 模型預測為P類的數量
召回率/查全率
FN 真實為P類,預測為N類; TP + FN: 真實P類的數量 (不考慮預測的結果)
例如
F1-Score
即F值為正確率和召回率的調和平均值
ROC
精確率、召回率 和 F1-score 都是單一的數值指標,如果想觀察分類算法在不同的參數下的表現,此時可以使用一條曲線,即 ROC。ROC 曲線可以用評價一個分類器在不同閾值下的表現。
橫坐標是 FPR(假正例率),FPR= FP / (FP + TN),表示分類器預測的正類中實際負實例占所有負例的比例,FPR越大,預測正類中的實際負類越多, 越小越好。(假警報率)
縱坐標是TPR(真正例率),公式同召回率的,TPR= TP / (TP + FN),表示分類器預測的正類中實際正實例占所有正例的比例, 值越大越好。(命中率)
ROC曲線的橫軸為假正例率,縱軸為真正例率,范圍都是[0,1],現在我們開始畫圖——根據從大到小遍歷預測值,把當前的預測值當做閾值,計算FPR和TPR
結論: ROC下面的面積越大,分類器越好
P-R曲線
為了找到最合適的閾值,需要遍歷 0 到 1 之間所有的閾值,每個閾值都對應著一對查準率和查全率,從而得到 PR 曲線
結論:越靠近正方形的對角越好
AP(average precision)
平均精確度(AP)通常是通過積分(或者近似的方法)的方式計算PR曲線下的面積來得到的
使用積分(或者近似的方法)來計算從召回率0到1的整個曲線下的面積。
通常來說一個越好的分類器,AP值越高
多分類評價指標
混淆矩陣
混淆矩陣可以提供以下信息:
正確分類的數量:主對角線上的元素顯示了每個類別被正確預測的次數
錯誤分類的數量:非對角線上的元素顯示了每個類別被錯誤預測為其他類別的次數
Accuracy 之 top1和top5
Top-1 Accuracy:是指模型預測的最高概率分數對應的類別與真實類別相同的情況下,認為是正確預測
Top-5 Accuracy:它允許模型在預測的概率最高的五個類別中只要有一個是正確的,就認為預測是成功的
mAP-全類平均精確率
其中 n 是類別的總數,AP(i) 是第 i 個類別的 Average Precision 值
AP 與 mAP
AP 衡量的是訓練好的模型在每個類別上的好壞
mAP 衡量的是模型在所有類別上的好壞,mAP 就是取所有 AP 的平均值
mAP 常作為目標檢測算法的評價指標,對于每張圖片檢測模型會輸出多個預測框(遠超真實框的個數),用 IoU (Intersection Over Union,交并比)來標記預測框是否預測準確。
標記完成后,隨著預測框的增多,查全率 R 總會上升,在不同查全率 R 水平下對準確率 P 做平均,即得到AP,最后再對所有類別按其所占比例做平均,即得到 mAP 指標
目標檢測
目標檢測中的性能指標主要包括:精確率(precision)、召回率(recall)、平均精度(average precision,AP)、平均精度均值(mean average precision,mAP)。
目標檢測算法中主要使用的性能指標是 mAP、 檢測速度(幀/s)–> FPS (每秒傳輸幀數(Frames Per Second))
性能指標
機器性能
FLOPS
FLOPS(Floating Point Operations per Second)指每秒浮點運算次數,可以理解為評估計算速度的單位
算法性能
FLOPs
FLOPs:(Floating Point Operations) s小寫,指浮點運算數,理解為計算量。可以用來衡量算法/模型的復雜度。(模型) 在論文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)
一般計算FLOPs來衡量模型的復雜度:
- 較大的FLOPs值通常表示任務或算法具有更高的計算需求,需要更多的計算資源來完成
- FLOPs越小時,表示模型所需計算量越小,運行起來時速度更快
安裝庫
pip install thop
查看FLOPs性能
import torch
from thop import profile
from torchvision.models import resnet50
model = resnet50()
input1 = torch.randn(1, 3, 224, 224)
flops, params = profile(model, inputs=(input1, ))
print('FLOPs = ' + str(flops / 1000 ** 3) + 'G')
第三方工具計算評價指標
參考:Cartucho / mAP