# 前言 由於實習和碩士期間大部分做的專案都是以分類(classification)為主,甚至主要讀的論文也是這個領域。但在電腦視覺中,分類只是其中一個應用。所以我認為該補足其他應用領域的知識,那這篇開始會是以物件偵測為主(Object detection)。 電腦視覺的應用主要可分成以下幾種,如下圖所示: - 分類(Classification) - 語意分割(Semantic Segmentation):按照每一種事物類別的像素分割區塊,不區分「實例」(Instance) - 定位(Classification + Localization):標注單一物體(Single Object)的所在位置和大小 - 物件偵測(Object Detection):標注多個物體(Multiple Objects)的所在位置和大小 - 實例分割(Instance Segmentation):標註「實例」,同一類的物體可區分個別的位置和大小(尤其當物體重疊時) ![圖1](https://hackmd.io/_uploads/HkWJhsb03.png) ## 常見術語 IOU、AP、mAP 在進行物件偵測的研究或看論文的時候,會到IOU、AP、mAP等數值,而這些數值可以用來決定偵測效果的好與壞。網路上有很多人分享這些數值的定義,但大多以數學公式解釋。為了能更清楚的了解,這裡透過圖解來解釋以上數值的定義。 ### IOU IOU代表的是Interection Over Union,也就是「偵測的物件區域與真實物件區域的交集」除以「兩個區域的聯集」。這樣說好像很難懂,我們用下面這張圖解釋: ![](https://hackmd.io/_uploads/HkiKy6bAn.png) 以上圖為例,在物件偵測中,模型預測的框框越貼近人工標記的框框,模型的偵測效果就越好。但這就延伸出一個問題,怎麼樣貼近才算標記到,如下圖: ![](https://hackmd.io/_uploads/r1f_eab0n.png) 左下鴨子的框框很明顯有標記到,但是右上的框框算是有標記到嗎?所以就要透過IOU計算出框框的比例,此值越高代表越精準,定義如下: ![](https://hackmd.io/_uploads/HJcyzTWR3.png) 上圖左下灰色框代表交集,右上框代表聯集,可寫成以下公式: ![](https://hackmd.io/_uploads/rkZDf6-A2.png) 所以IOU = 交集面積/聯集面積,此值介於0~1之間。0代表兩個區域完全沒有重疊;1代表預測框與標準答案完全重疊。大部分研究中判斷的基準是以IOU ≥ 0.5。 所以用一句話解釋IOU就是預測與標準答案的重疊比例。 ### AP 在介紹AP之前,要先複習一下深度學習的老朋友了(precision和recall)。precision很容易懂,就是準確率;而recall是召回率(看到有人說「抓取率」比較容易理解)。接著來解釋這兩個詞的定義,下圖是一張混淆矩陣: ![](https://hackmd.io/_uploads/rJtQBa-Ah.png) 在分類任務中,很常透過上圖這張表分析演算法或模型結果的好壞,但偵測任務並不是判斷真或假、0或1,那該如何計算TP、FP、FN、FP這些值?請看下圖: ![](https://hackmd.io/_uploads/SJ_EUpZC2.png) 紅框代表模型==預測的結果==,接著要結合IOU的概念。上節有提到大部分研究會設定IOU ≥ 0.5才算正確。因此把上圖的結果的數據如下(自定義): ![](https://hackmd.io/_uploads/BkMaLpb03.png) 有了TP、FP、FN,就能計算precision和recall,其公式如下圖: ![](https://hackmd.io/_uploads/B1HHDTWCn.png) ![](https://hackmd.io/_uploads/SyiHw6ZA2.png) 在這個任務中,precision代表的是「所有被模型預測為鴨子的結果中,真的是鴨子的比例」。所以根據上圖的例子,precision為: #### precision = box2/(box1+box2+box3) = 0.8/(0+0.8+0.3) = 33.33% recall代表的是「所有真的鴨子中,被模型正確預測的比例」。所以根據上圖的例子,recall為: #### recall = box2/(box2+右上沒抓到的鴨子) = 1/2 = 50.00% 所以recall用抓取率比較好理解(所有鴨子中,抓回來幾隻)。 ------- 接下來就可以說明AP了,AP代表Average Precision,此值是用來判斷「單一類別」的準確率。那在進行物件偵測時,除了物件類別、bounding box資訊,通常還會提供一個信心分數(confidence socre),此值介於0~1之間。Confidence socre越高代表模型對於該辨識物體的信心度越高。 假設有5張影像,且共出現7隻鴨子,我們要計算模型對於鴨子這個類別的AP,依照confidence排序,結果如下: ![](https://hackmd.io/_uploads/Sk9goabRh.png) 這張表代表,模型在這5張影像中給出了7個預測boundong box,有的正確(TP)、有的錯誤(FP)。而rank1代表confidence最高,接著從rank1開始往下計算precision和recall,結果如下: ![](https://hackmd.io/_uploads/H19ss6ZR2.png) 舉上圖其中幾個例子做計算: #### rank1: precision = 1/1 recall = 1/7(所有鴨子的總數) #### rank4: precision = 3/4 recall = 3/7(所有鴨子的總數) #### rank6: precision = 5/6 recall = 5/7(所有鴨子的總數) #### rank7: precision = 5/7 recall = 5/7(所有鴨子的總數) 從上面可以觀察到,一般來說rank越高(數字越小),precision越高、recall越低;rank越低(數字越大),precision越低、recall越高。 接著以precision為y軸、recall為x軸,畫出PR曲線(precision-recall curve),如下圖所示: ![](https://hackmd.io/_uploads/SJw-RT-R3.png) 而AP代表的定義就是該曲線下方的面積,wiki對AP的定義如下: ![](https://hackmd.io/_uploads/H10U0pbC3.png) 我們可以看最後一行的公式就好,P(k)為rank(k)時的precision;rel(k)為在rank(k)時,該預測結果若為TP則為1,反之為0。因此上面曲線的計算公式如下: ![](https://hackmd.io/_uploads/rJqzkCW0h.png) 最後可以得出,這個模型對於鴨子這個類別的AP為0.66 ------ 而通常物件偵測任務中不會只偵測一個項目,還會有其他類別,例如狗、貓、人、飛機等。所以mAP就是把所有類別的AP加總後取平均,就可以計算出該模型對於所有辨識類別的平均辨識率mAP。 ----- ## Reference [影像辨識常見的IOU、AP、mAP是什麼意思?](http://yy-programer.blogspot.com/2020/06/iouapmap.html) [Day 12:物體偵測(Object Detection) + 影像標題(Image Captioning)](https://ithelp.ithome.com.tw/articles/10192950)