?? Welcome to Aedream同學 's blog! ??
模型性能指標
在目標檢測任務中,我們常用的評價指標一般有兩種,一種是使用Pascal VOC的評價指標,一種是更加嚴格的COCO評價指標,一般后者會更常用點。
如何判斷一個檢測結果是否正確。目前最常用的方式就是去計算檢測框與真實框的IOU,然后根據IOU去判別兩個框是否匹配。
常見指標
TP(True Positive): IoU>0.5的檢測框數量(同一Ground Truth只計算一次)
FP(False Positive): IoU<=0.5的檢測框(或者是檢測到同一個GT的多余檢測框的數量)
FN(False Negative):沒有檢測到的GT的數量
Precision(查準率): TP / (TP + FP) 模型預測的所有目標中,預測正確的比例
Recall(查全率): TP /(TP + FN) 所有真實目標中,模型預測正確的目標比例
AP: P-R曲線下面積
P-R曲線: Precision-Recall曲線
mAP: mean Average Precision, 即各類別AP的平均值
coco數據集的評價指標
https://cocodataset.org/#detection-eval
ROC/AUC
在正式介紹ROC/AUC之前,我們還要再介紹兩個指標,這兩個指標的選擇也正是ROC和AUC可以無視樣本不平衡的原因。這兩個指標分別是:靈敏度和(1-特異度),也叫做真正率(TPR)和假正率(FPR)。
靈敏度(Sensitivity) = TP/(TP+FN)
特異度(Specificity) = TN/(FP+TN)
- 其實我們可以發(fā)現靈敏度和召回率是一模一樣的,只是名字換了而已。
- 由于我們比較關心正樣本,所以需要查看有多少負樣本被錯誤地預測為正樣本,所以使用(1-特異度),而不是特異度。
真正率(TPR) = 靈敏度 = TP/(TP+FN)
假正率(FPR) = 1- 特異度 = FP/(FP+TN)
下面是真正率和假正率的示意,我們發(fā)現 TPR和FPR分別是基于實際表現1和0出發(fā)的,也就是說它們分別在實際的正樣本和負樣本中來觀察相關概率問題。 正因為如此,所以無論樣本是否平衡,都不會被影響。如果,總樣本中,90%是正樣本,10%是負樣本。我們知道用準確率是有水分的,但是用TPR和FPR不一樣。這里,TPR只關注90%正樣本中有多少是被真正覆蓋的,而與那10%毫無關系,同理,FPR只關注10%。
2. ROC
ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特征曲線。該曲線最早應用于雷達信號檢測領域,用于區(qū)分信號與噪聲。后來人們將其用于評價模型的預測能力,ROC曲線是基于混淆矩陣得出的。
ROC曲線中的主要兩個指標就是真正率和**假正率,**上面也解釋了這么選擇的好處所在。其中橫坐標為假正率(FPR),縱坐標為真正率(TPR)
ROC曲線通過遍歷所有閾值來繪制整條曲線的。如果我們不斷的遍歷所有閾值,預測的正樣本和負樣本是在不斷變化的,相應的在ROC曲線圖中也會沿著曲線滑動。
如何判斷ROC曲線的好壞?
改變閾值只是不斷地改變預測的正負樣本數,即TPR和FPR,但是曲線本身是不會變的。那么如何判斷一個模型的ROC曲線是好的呢?這個還是要回歸到我們的目的:FPR表示模型虛報的響應程度,而TPR表示模型預測響應的覆蓋程度。我們所希望的當然是:虛報的越少越好,覆蓋的越多越好。所以總結一下就是**TPR越高,同時FPR越低(即ROC曲線越陡),那么模型的性能就越好。**參考如下動態(tài)圖進行理解。
ROC曲線無視樣本不平衡
前面已經對ROC曲線為什么可以無視樣本不平衡做了解釋,下面我們用動態(tài)圖的形式再次展示一下它是如何工作的。我們發(fā)現:無論紅藍色樣本比例如何改變,ROC曲線都沒有影響。
3. AUC(曲線下的面積)
為了計算 ROC 曲線上的點,我們可以使用不同的分類閾值多次評估邏輯回歸模型,但這樣做效率非常低。幸運的是,有一種基于排序的高效算法可以為我們提供此類信息,這種算法稱為曲線下面積(Area Under Curve)。
比較有意思的是,如果我們連接對角線,它的面積正好是0.5。對角線的實際含義是:**隨機判斷響應與不響應,正負樣本覆蓋率應該都是50%,表示隨機效果。**ROC曲線越陡越好,所以理想值就是1,一個正方形,而最差的隨機判斷都有0.5,所以一般AUC的值是介于0.5到1之間的。
AUC的一般判斷標準
0.5 - 0.7——效果較低,但用于預測股票已經很不錯了
0.7 - 0.85——效果一般
0.85 - 0.95——效果很好
0.95 - 1——效果非常好,但一般不太可能
AUC的物理意義
曲線下面積對所有可能的分類閾值的效果進行綜合衡量。曲線下面積的一種解讀方式是看作模型將某個隨機正類別樣本排列在某個隨機負類別樣本之上的概率。以下面的樣本為例,邏輯回歸預測從左到右以升序排列:
ROC & PRC
如何判斷一個數據集正負樣本是均衡的?
PR和ROC在面對不平衡數據時的表現是不同的。在數據不平衡時,PR曲線是敏感的,隨著正負樣本比例的變化,PR會發(fā)生強烈的變化。而ROC曲線是不敏感的,其曲線能夠基本保持不變。
ROC的面對不平衡數據的一致性表明其能夠衡量一個模型本身的預測能力,而這個預測能力是與樣本正負比例無關的。但是這個不敏感的特性使得其較難以看出一個模型在面臨樣本比例變化時模型的預測情況。而PRC因為對樣本比例敏感,因此能夠看出分類器隨著樣本比例變化的效果,而實際中的數據又是不平衡的,這樣有助于了解分類器實際的效果和作用,也能夠以此進行模型的改進。
綜上,在實際學習中,我們可以使用ROC來判斷兩個分類器的優(yōu)良,然后進行分類器的選擇,然后可以根據PRC表現出來的結果衡量一個分類器面對不平衡數據進行分類時的能力,從而進行模型的改進和優(yōu)化。
在正負樣本分布得極不均勻(highly skewed datasets)的情況下,PRC比ROC能更有效地反應分類器的好壞。
多分類問題——混淆矩陣
混淆矩陣
混淆矩陣是對分類問題的預測結果的總結。使用計數值匯總正確和不正確預測的數量,并按每個類進行細分,這是混淆矩陣的關鍵所在。混淆矩陣顯示了分類模型的在進行預測時會對哪一部分產生混淆。它不僅可以讓我們了解分類模型所犯的錯誤,更重要的是可以了解哪些錯誤類型正在發(fā)生。正是這種對結果的分解克服了僅使用分類準確率所帶來的局限性。
二分類
別看這個表格只包含四個數字,但其中能表述的含義卻非常豐富,通過這四個數字的組合計算,就能夠計算出TP,FP,FN 以及 TN,然后衍生出其它更多的模型評估指標。如下圖:
多分類
正?;煜仃囀巧蠄D這樣的,每個格子里填寫的是數量。
部分模型預測出來的混淆矩陣如下圖所示,可以發(fā)現,每個格子里填是是小數,經分析可發(fā)現,下圖應該是在行的方向上做了歸一化了(和不為1為四舍五入造成),所以根據精確率和召回率的公式可得,混淆矩陣對角線上格子里的數,已經就是召回率了,如果想計算精確率,縱向計算一下即可,以第一行第一列元素為例
召回率為:0.9/(0.9+0.01+0.08+0.02)=0.891
精確率為:0.9/(0.9+0.24+0.11+0.25+0.15)=0.55
計算結果分析——以YOLO v5為例
1. confusion_matrix.png(混淆矩陣)
混淆矩陣能對分類問題的預測結果進行總結,顯示了分類模型的在進行預測時會對哪一部分產生混淆。
2. F1_curve:
F1分數與置信度之間的關系。F1分數(F1-score)是分類問題的一個衡量指標,是精確率precision和召回率recall的調和平均數,最大為1,最小為0, 1是最好,0是最差
3. labels.jpg
第一個圖 classes:每個類別的數據量
第二個圖 labels:真實標注的 bounding_box
第三個圖 center xy
第四個圖 labels 標簽的長和寬
4. labels_corrrelogram.jpg
相關圖是一組二維直方圖,顯示數據的每個軸與其他軸之間的對比。圖像中的標簽位于 xywh 空間。
5. P_curve.png
準確率precision和置信度confidence的關系圖
【置信度confidence:用來判斷邊界框內的物體是正樣本還是負樣本,大于置信度閾值的判定為正樣本,小于置信度閾值的判定為負樣本即背景?!?/p>
6. PR_curve.png
PR曲線中的P代表的是precision(精準率),R代表的是recall(召回率),其代表的是精準率與召回率的關系,一般情況下,將recall設置為橫坐標,precision設置為縱坐標。PR曲線下圍成的面積即AP,所有類別AP平均值即,mAP.
如果PR圖的其中的一個曲線A完全包住另一個學習器的曲線B,則可斷言A的性能優(yōu)于B,當A和B發(fā)生交叉時,可以根據曲線下方的面積大小來進行比較。 一般訓練結果主要觀察精度和召回率波動情況(波動不是很大則訓練效果較好)
Precision和Recall往往是一對矛盾的性能度量指標;
提高Precision 提高二分類器預測正例門檻 使得二分類器預測的正例盡可能是真實正例;
提高Recall 降低二分類器預測正例門檻 使得二分類器盡可能將真實的正例挑選
7. R_curve.png
召回率和置信度之間的關系
8. results.png
Box_loss:YOLO V5使用 GIOU Loss作為bounding box的損失,Box推測為CIoU損失函數均值,越小方框越準;
Objectness_loss:推測為目標檢測loss均值,越小目標檢測越準;
Classification_loss:推測為分類loss均值,越小分類越準;
Precision:精度(找對的正類/所有找到的正類);
Recall:真實為positive的準確率,即正樣本有多少被找出來了(召回了多少).
Recall從真實結果角度出發(fā),描述了測試集中的真實正例有多少被二分類器挑選了出來,即真實的正例有多少被該二分類器召回。
val Box_loss: 驗證集bounding box損失;
val Objectness_loss:驗證集目標檢測loss均值;
val classification_loss:驗證集分類loss均值;
mAP@.5:.95(mAP@[.5:.95]): 表示在不同IoU閾值(從0.5到0.95,步長0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。
mAP@.5:表示閾值大于0.5的平均mAP。
然后觀察mAP@0.5 & mAP@0.5:0.95 評價訓練結果。mAP是用Precision和Recall作為兩軸作圖后圍成的面積,m表示平均,@后面的數表示判定iou為正負樣本的閾值,@0.5:0.95表示閾值取0.5:0.05:0.95后取均值
8:results.txt
打印的訓練結果信息 每一個epoch
這部分代碼應該是把每次迭代結果寫入result.txt
# Write
with open(results_file, 'a') as f:
f.write(s + '%10.4g' * 7 % results + '\n') # P, R, mAP@.5, mAP@.5-.95, val_loss(box, obj, cls)
if len(opt.name) and opt.bucket:
os.system('gsutil cp %s gs://%s/results/results%s.txt' % (results_file, opt.bucket, opt.name))
輕量化主要關注
指標 | 含義 |
---|---|
AP(%) | 這個代表了目標檢測算法的檢測精度。 |
Parameters | 參數量,指模型含有多少參數。 |
GFLOPs | FLOPs 是浮點運算次數,可以用來衡量算法/模型復雜度。GFLOPs為十億(1e9)次的浮點運算。 |
Latency | 網絡前向傳播的時間,1 ms=1e-3 s,10.5ms=0.0105s |
FPS | 每秒傳輸幀數,FPS=1/Latency,1/0.0105=95.2 |
1、Parameters參數量
Parameters 參數量。參數量指的是模型所包含的參數的數量,比如我們模型中使用到的卷積、全連接里面的權值矩陣對應的每一個數字,都是參數量的組成。以YoloV3算法為例,其參數量為62,001,757。一般被縮寫為62.00M。
需要注意的是,模型的參數量并不等于存儲空間大小,存儲空間的單位是MB(或者KB)而不是M。
2、FLOPs 浮點運算次數
再來看一下FLOPs參數,需要注意的是FLOPS和FLOPs是不一樣的。
FLOPS是處理器性能的衡量指標,是“每秒所執(zhí)行的浮點運算次數”的縮寫。
FLOPs是算法復雜度的衡量指標,是“浮點運算次數”的縮寫,s代表的是復數。
在很多論文里面呢,FLOPs是用來衡量算法復雜度的指標,但算法復雜度往往不等同于算法的運算速度。Efficientdet就是非常典型的例子,FLOPs很小,但速度慢,占用顯存大。
3、Latency 延遲
Latency指一般是網絡預測一張圖片所用的時間,按照YoloX所示,應該是不包括后處理(without post processing)的。也就是單單包含了網絡前傳部分的時間。
4、FPS 每秒傳輸幀數
FPS指的是每秒傳輸幀數。FPS=1/Latency。在求得上述的Latency 延遲后可以很容易的求出FPS,求個倒數即可。文章來源:http://www.zghlxwxcb.cn/news/detail-440663.html
指標間的關系
- Parameters低 ≈ FLOPs低。( FLOPs基本和Parameters成正關系,不過FLOPs還和輸入進來的圖片大小有關,輸入圖片越大,FLOPs 越大)
- FLOPs低 ≠ Latency低。( FLOPs低 ≠ FPS高,最典型的例子就是EfficientNet,EfficientNet使用了大量的低FLOPs、高數據讀寫量的操作,即深度可分離卷積操作。這些具有高數據讀寫量的操作,受到了GPU帶寬的限制,算法浪費了大量時間在讀寫數據上,GPU算力也自然沒有得到良好的應用)
- Parameters低 ≠ Latency低。( Parameters低 ≠ FPS高,同FLOPs,最典型的例子就是EfficientNet。)
網絡的運算速度與什么有關?
網絡的運算速度和各種各樣的因素有關。主要有關于以下幾點:文章來源地址http://www.zghlxwxcb.cn/news/detail-440663.html
- 顯卡:大多數SOTA算法用的都是V100或者A100。
- 網絡結構:不是參數量越低速度越快,不是加兩個深度可分離卷積,網絡的速度就越快。有一個MAC的概念( Memory Access Cost ),在ShuffleNet V2的論文里提到了。深度可分離卷積便是一個高MAC,低參數量的操作。深度可分離卷積在CPU中表現更好。在一些特別高端的GPU上,深度可分離卷積甚至不如普通卷積。
- 網絡的并行度:Inception是一個不斷增加網絡寬度的模型,它使用不同卷積核大小的卷積進行特征提取。但它的工作速度不是特別快。分多次就要算多次。
- 網絡的層數:額外的操作如Relu,ADD都是沒有參數量,但需要運算時間的操作。
- CUDA、CUDNN、深度學習算法框架版本影響:在1660ti顯卡的機子上,YOLOX-S的FPS在torch1.7里為50多,在torch1.2里為20多。
參考文獻
https://github.com/ultralytics/yolov5
https://blog.csdn.net/weixin_44791964/article/details/124320564
https://blog.csdn.net/weixin_43745234/article/details/121561217
https://blog.csdn.net/weixin_44570845/article/details/121337026
https://zhuanlan.zhihu.com/p/46714763
到了這里,關于【機器學習】全網最全模型評價指標(性能指標、YOLOv5訓練結果分析、輕量化指標、混淆矩陣詳解)【基礎收藏】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!