2020年6月1日 星期一

影像辨識常見的IOU、AP、mAP是什麼意思?


進行深度學習影像物件偵測(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呢?

請看下圖


紅色框框是系統預測的結果(predicted bounding box)

這時候就要用到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)就是在rank時的precision

rel(k)的定義是,在rank時,該偵測結果若是TP則為1,反之則為0

因此計算的算式如下:

此範例,系統在預測鴨子(duck)這個類別時的AP為0.66 (66%)


而mAP呢?

由於通常測試的物件種類不會只有一種

還有其他類型,像是狗、貓、飛機、人、桌子、椅子...等等,

例如COCO Dataset就有80種辨識種類

而mAP就是把所有種類的AP取平均

就可算出該系統對於所有辨識種類的平均辨識率mAP

(AP是平均辨識率...那mAP不就是...平均的平均辨識率... XD)


6 則留言:

  1. 寫得淺顯易懂,我也弄清楚AP的意思了! 感謝~
    (我一開始還在想說,average precision該不會只是把每張圖的precision平均起來僅此而已吧)
    想不到算是還挺複雜的 唉呀

    回覆刪除
  2. 超級淺顯易懂,感謝作者的解說!

    回覆刪除
  3. 非常感謝,寫得真好,但不太明白為什麼rank4是FP 正常來說IoU = 0.6 且Confidence=0.7 應該要是TP?

    回覆刪除
    回覆
    1. 我也有相同的問題+1 rank 4 感覺是TP才對

      刪除
    2. 確實高機率是TP 但不一定IOU和confidence都高的時候一定是TP 這邊我想作者只是給個反例

      刪除
    3. 沒有詳細照片跟辨識結果不確定
      不過有可能是跟confidence比較高的框
      預測到同一隻鴨子
      由於non-max surpression的關係
      變成False Positive?

      刪除