---
# System prepended metadata

title: '物件偵測 #1 - 基礎概念'

---

# 前言
由於實習和碩士期間大部分做的專案都是以分類（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)