進行深度學習影像物件偵測(object detection)的研究
你一定常看到IOU、AP、mAP等數值
但這些到底什麼意思??
網路上也有很多前輩分享了這些的說明
但大部分都是給定義,數學公式
你可能當下理解,或者很難理解,過一段時間也就忘了...
這篇試著用圖解來說明以上的數值
先來說明IOU,IOU的原文是intersection over union
中文翻譯就是:
"系統預測的物件區域與真實物件區域的交集"除上"這兩個區域的聯集"
...
誰聽得懂...
物件偵測主要需要有人工進行labeling標記
(通常標記成一個矩形(bounding box))
通常會將標記的結果稱為ground-truth (bounding box),也就是標準答案
而透過深度學習辨識後產生的結果稱為predicted (bonding box),也就是預測結果
如下圖:
因此原則上,預測的框框越貼近人工標記的框框,就越完美!
但這裡衍伸一個問題,到底要多貼近才算是有標記到??
什麼意思呢,如下圖
下方紅色的預測結果,我想應該大家都覺得OK
但上方那個呢? 紅色的框框只抓到鴨子的一半不到? 這樣算嗎?
因此IOU就是用來計算框選的比例,越高表示框選的越準確,定義如下:
上圖下方灰色的部分為兩個區塊的交集,上方灰色的部分為聯集
IOU就等於 交集的面積/聯集的面積,這個值會介於0~1之間
0表示預測位置完全與標準答案脫鉤,連一點邊都沒碰到
1表示預測位置完全吻合標準答案
而通常一般判斷辨識率的基準,是以IOU大於等於 0.5
那AP又是什麼呢?
AP: average precision,看起來非常簡單,但其實非常不簡單
說明AP為何物之前,先來解釋幾個也相當常見的名詞
precision、recall
precision通常中文翻譯成準確率
recall翻譯成召回率,但我認為用抓取率比較容易理解
而到底準確率precision 是怎麼定義的呢??
先看看下表
這是一個混淆矩陣(confusion matrix)
這是用來評價演算法、分類器的結果分析表
但在物件偵測不是在判斷真或假、是或否、0或1 ...
所以在物件偵測怎麼計算上面這些TP、FP、FN、TN呢?
請看下圖
這時候就要用到IOU的概念,必須要大於0.5才算辨識正確,所以統計數據如下:
這時候會發現,為什麼沒有去計算True Negative
以上面的例子就是:不是鴨子的位置,系統預測也不是鴨子...
...
是不是突然覺得這個好像沒什麼好算的...
有了TP、FP、FN,就可以來計算precision與recall
precision,準確率的意思其實是:"所有被系統預測為鴨子的結果中,真的是鴨子的比例"
所以在上圖的例子中,box2為預設正確(TP)、box1、box3皆為預測錯誤(FP)
因此 precision = box2 / (box2 + box1 + box3) = 1/3 = 33.33%
而recall,召回率的意思其實是:"所有真的鴨子,被系統預測正確的比例"
上圖的例子中,有兩隻鴨子,而正確被抓到的只有1隻(box2)
因此 recall = box2 / box2 + 沒抓到的那隻(FN) = 1/2 = 50%
因此recall是不是用抓取率比較容易理解
接下來討論AP: average precision,該數值是用來判斷單一類別的平均準確率
意思就是並非單一一張影像的準確率
(單一一張用上面的precision、recall就夠了)
通常測試的影像,單一類型的影像會有數十張到數百張,甚至更多...
因此假設我們要計算:系統對於鴨子這個類型的AP
使用了5張影像,並且裡面共出現了7隻鴨子
然後將這5張圖片進行深度學習的系統預測
深度學習在進行物件偵測時
除了辨識出的物件類型、預測的bounding box資訊
還會提供一個信心分數:confidence,通常是介於0~1之間
越高表示系統認為該物件辨識的信心度越高
而將5張照片的預測結果,用confidence排序,結果如下圖:
上表表示,系統在這五張影像中
跑出了7個預測結果(bounding box),有的正確(TP),有的錯誤(FP)
rank1 就是confidence最高的、rank2次之...以此類推...
接著從rank1開始往下計算precision、recall,如下表:
rank1:
precision = (>= rank1的TP) / (>= rank1的TP+FP) = 1/1
recall = (>= rank1的TP) / 真正的鴨子總數 = 1/7
rank2:
precision = (>= rank2的TP) / (>= rank2的TP+FP) = 2/2
recall = (>= rank2的TP) / 真正的鴨子總數 = 2/7
...
以此類推,rank7:
precision = (>= rank7的TP) / (>= rank7的TP+FP) = 5/7
recall = (>= rank7的TP) / 真正的鴨子總數 = 5/7
這時候會觀察到
一般狀況,rank越高(數字越小),precision準確率越高,recaal抓取率越低
rank越低(數字越大),precision準確率越低、recall抓取率越高
這很容易理解:
若僅保留信心度很高的預測結果,想當然準確率就高
若降低信心度標準,疑似、可疑、可能預測結果都包含,當然抓取率就會提高
confidence也是做為是否辨識正確的一個閥值參考,如同IOU
IOU太低,表示預測的位置偏離實際物件太遠,因此視為FP
confidence太低,表示預測的信心度太低,因此也視為FP
IOU常以0.5作為閥值指標,而confidence則依據每個演算法而不同
(以YOLOv3,常見是設為0.2~0.3)
接著以precision為縱軸、recall為橫軸,畫出PR曲線:precision-recall curve
而AP:average precision的定義,就是該曲線下方的面積
看一下wiki的定義:
我知道沒人想看定義...
可以直接採用最後一個算式進行計算
P(k)就是在rankk 時的precision
rel(k)的定義是,在rankk 時,該偵測結果若是TP則為1,反之則為0
因此計算的算式如下:
此範例,系統在預測鴨子(duck)這個類別時的AP為0.66 (66%)
而mAP呢?
由於通常測試的物件種類不會只有一種
還有其他類型,像是狗、貓、飛機、人、桌子、椅子...等等,
例如COCO Dataset就有80種辨識種類
而mAP就是把所有種類的AP取平均
就可算出該系統對於所有辨識種類的平均辨識率mAP
(AP是平均辨識率...那mAP不就是...平均的平均辨識率... XD)
寫得淺顯易懂,我也弄清楚AP的意思了! 感謝~
回覆刪除(我一開始還在想說,average precision該不會只是把每張圖的precision平均起來僅此而已吧)
想不到算是還挺複雜的 唉呀
超級淺顯易懂,感謝作者的解說!
回覆刪除非常感謝,寫得真好,但不太明白為什麼rank4是FP 正常來說IoU = 0.6 且Confidence=0.7 應該要是TP?
回覆刪除我也有相同的問題+1 rank 4 感覺是TP才對
刪除確實高機率是TP 但不一定IOU和confidence都高的時候一定是TP 這邊我想作者只是給個反例
刪除沒有詳細照片跟辨識結果不確定
刪除不過有可能是跟confidence比較高的框
預測到同一隻鴨子
由於non-max surpression的關係
變成False Positive?