分類和目標檢測的性能評價指標


  對於深度學習的網絡模型,希望其速度快,內存小,精度高。因此需要量化指標來評價這些性能,常用的指標有:mAP(平均准確度均值,精度指標), FPS(每秒處理的圖片數量或每張圖片處理需要時間,同樣硬件條件下的速度指標) , 模型參數大小(內存大小指標)。

1.mAP (mean Avearage Precision)

    mAP指的是各類別的AP平均值,而AP指PR曲線的面積(precision和Recall關系曲線),因此得先了解下precision(精確率)和recall(召回率),以及相關的accuracy(准確度), F-measurement(F值), ROC曲線等。

  recall和precision是二分類問題中常用的評價指標,通常以關注的類為正類,其他類為負類,分類器的結果在測試數據上有4種情況:

 

 

 

   Precision和Recall計算舉例

    假設我們在數據集上訓練了一個識別貓咪的模型,測試集包含100個樣本,其中貓咪60張,另外40張為小狗。測試結果顯示為貓咪的一共有52張圖片,其中確實為貓咪的共50張,也就是有10張貓咪沒有被模型檢測出來,而且在檢測結果中有2張為誤檢。因為貓咪更可愛,我們更關注貓咪的檢測情況,所以這里將貓咪認為是正類:所以TP=50,TN=38,FN=10,FP=2,P=50/52,R=50/60,acc=(50+38)/(50+38+10+2)

  為什么引入Precision和Recall:

    recall和precision是模型性能兩個不同維度的度量:在圖像分類任務中,雖然很多時候考察的是accuracy,比如ImageNet的評價標准。但具體到單個類別,如果recall比較高,但precision較低,比如大部分的汽車都被識別出來了,但把很多卡車也誤識別為了汽車,這時候對應一個原因。如果recall較低,precision較高,比如檢測出的飛機結果很准確,但是有很多的飛機沒有被識別出來,這時候又有一個原因.

    recall度量的是「查全率」,所有的正樣本是不是都被檢測出來了。比如在腫瘤預測場景中,要求模型有更高的recall,不能放過每一個腫瘤。

    precision度量的是「查准率」,在所有檢測出的正樣本中是不是實際都為正樣本。比如在垃圾郵件判斷等場景中,要求有更高的precision,確保放到回收站的都是垃圾郵件。

  F-score/F-measurement:

    上面分析發現,精確率和召回率反映了分類器性能的兩個方面,單一依靠某個指標並不能較為全面地評價一個分類器的性能。一般情況下,精確率越高,召回率越低;反之,召回率越高,精確率越低。為了平衡精確率和召回率的影響,較為全面地評價一個分類器,引入了F-score這個綜合指標。

    F-score是精確率和召回率的調和均值,計算公式如下:

    其中, [公式][公式] )的取值反映了精確率和召回率在性能評估中的相對重要性具體,通常情況下,取值為1。描述如下:

      (1)當 [公式] 時,就是常用的 [公式] 值,表明精確率和召回率一樣重要,計算公式如下:

      (2)當 [公式] 時, [公式] 表明召回率的權重比精確率高;

      (3)當 [公式] 時, [公式] 表明精確率的權重比召回率高。

  Accuracy:也是對模型預測准確的整體評估, 通常用到的准確率計算公式如下:

  AP/PR曲線:

    即recall為橫坐標,precision為縱坐標,繪制不同recall下的precison值,可以得到一條Precisoin和recall的曲線,AP就是這個P-R曲線下的面積,定義:             [公式]

    舉例子比較好理解,

    分類問題:

        假設有100張圖片,要分成貓,狗,雞三類,100張圖片對應100個真實值,模型分類后我們會得到對應的100個預測值。這里我們可以只取前10個預測值出來,計算10個值中貓預測出幾張,預測對幾張,從而能計算出貓的precison和recall;接着我們可以取前20個預測值同樣能計算出一組貓的precison和recall;這樣一直增加到取100個預測值,就能得到貓的10組(recall, precision)值來繪制曲線。這里要注意的是:隨着選取預測值增加,recall肯定是增加或不變的(選取的預測值越多,預測出來的貓越多,即查全率肯定是在增加或不變),若增加選取預測值后,recall不變,一個recall會對應兩個precison值,一般選取較大的那個precision值。 如果我們每次只增加一個預測值,就會得到大約100對(recall, precisoin)值,然后就能繪制貓的PR曲線,計算出其下方的面積,就是貓對應的AP值(Average Precision)。 如果我們接着對狗和雞也采用相同方法繪制出PR曲線, 就能得到貓,狗, 雞三個AP值,取平均值即得到了整個模型最終的mAP(mean Average Precsion)。如下圖中A, B, C三條PR曲線:

    目標檢測:

      在目標檢測中還有一個IoU(交並比、Intersection over Union、IoU), 通過比較檢測bbox和真實bbox的IoU來判斷是否屬於TP(True Positive

),例如設置IoU閾值為0.7,則IoU大於0.7的則判定為TP,否則為FP。因此當我們設置不同的IoU閾值時,也會得到不同的mAP值,再將這些mAP值進行平均就會得到mmAP,一般不做特別說明mmAP即指通常意義上的mAP。

      因此目標檢測mAP計算方法如下:給定一組IOU閾值,在每個IOU閾值下面,求所有類別的AP,並將其平均起來,作為這個IOU閾值下的檢測性能,稱為mAP(比如mAP@0.5就表示IOU閾值為0.5時的mAP);最后,將所有IOU閾值下的mAP進行平均,就得到了最終的性能評價指標:mmAP。

 

   ROC曲線與AUC:

    除了繪制PR曲線,計算AP,有時候也會繪制ROC曲線,計算AUC。(參考文章

    ROC(receiveroperating characteristic):接受者操作特征,指的是TPR和FPR間的關系,縱坐標為TPR, 橫坐標為FPR, 計算公式如下:

    AUC(area under curve):表示ROC曲線下的面積。

 

 

 參考:https://zhuanlan.zhihu.com/p/43068926

    https://zhuanlan.zhihu.com/p/55575423

    https://zhuanlan.zhihu.com/p/70306015

    https://zhuanlan.zhihu.com/p/30953081

 

 2. FLOPs (浮點運算數)

      FLOPs:(Floating Point Operations)  s小寫,指浮點運算數,理解為計算量。可以用來衡量算法/模型的復雜度。(模型) 在論文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)

     FLOPS: (Floating Point operations per second), S大寫, 指每秒浮點運算的次數,可以理解為運算的速度,是衡量硬件性能的一個指標。

    一般計算FLOPs來衡量模型的復雜度,FLOPs越小時,表示模型所需計算量越小,運行起來時速度更快。對於卷積和全連接運算,其公式如下:

    另外,MAC(memory access cost, 內存訪問成本)也會被用來衡量模型的運行速度, 一般MAC=2*FLOPs (一次加法運算和一次乘法算法):

    有一個基於pytorch的torchstat包,可以計算模型的FLOPs數,參數大小等指標,示例代碼如下:

from torchstat import stat
import torchvision.models as models

model = model.alexnet()
stat(model, (3, 224, 224))

 

3. 模型參數大小

   常用模型的參數所占大小來衡量模型所需內存大小,一般可分為Vgg, GoogleNet, Resnet等參數量大的模型,和squeezeNet,mobilerNet,shuffleNet等參數量小的輕量級模型,常用一些模型的參數量和FLOPs如下:

 

 

 

 

    最后還有一張模型運算量(FLOPs), 參數大小(圓圈的面積),表現效果(Accuracy)的關系圖如下:

 

 

 

參考:https://www.zhihu.com/question/65305385

     https://zhuanlan.zhihu.com/p/67009992


免責聲明!

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



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