對於深度學習的網絡模型,但願其速度快,內存小,精度高。所以須要量化指標來評價這些性能,經常使用的指標有: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)spa
爲何引入Precision和Recall:3d
recall和precision是模型性能兩個不一樣維度的度量:在圖像分類任務中,雖然不少時候考察的是accuracy,好比ImageNet的評價標準。但具體到單個類別,若是recall比較高,但precision較低,好比大部分的汽車都被識別出來了,但把不少卡車也誤識別爲了汽車,這時候對應一個緣由。若是recall較低,precision較高,好比檢測出的飛機結果很準確,可是有不少的飛機沒有被識別出來,這時候又有一個緣由.code
recall度量的是「查全率」,全部的正樣本是否是都被檢測出來了。好比在腫瘤預測場景中,要求模型有更高的recall,不能放過每個腫瘤。orm
precision度量的是「查準率」,在全部檢測出的正樣本中是否是實際都爲正樣本。好比在垃圾郵件判斷等場景中,要求有更高的precision,確保放到回收站的都是垃圾郵件。blog
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