# 2016 YOLOv1
1. 將影像縮放至 448×448,並輸入模型
2. 透過 end to end 的 CNN 網路,輸出 7×7×30 的 feature map
3. 對 feature map 進行 Non-Maximum Suppression (NMS),得到偵測結果。

---
## 1. 將影像縮放至 448×448,並輸入模型

## 2. 透過 end to end 的 CNN 網路,輸出 7×7×30 的 feature map
YOLO 的偵測網路包含 24 個卷積層 (Conv. Layer) 和 2 個 全連接層 (Conn. Layer)

### Grid cell
YOLOv1 將輸入影像劃分成 S×S=7×7 個 grid cells,若一個目標的中心落在某個 cell 內,則此 cell 負責偵測該目標。

### Bounding box (Bbox)
每個 cell 預測出 B=2 個 Bounding box (Bbox),每個 Bbox 包含 5 個值 – (x, y, w, h, confidence)
- (x, y) 代表中心座標
- (w, h) 代表寬度與高度
x, y, w, h 都是正規化後的值,因此介於 0~1 之間

### Confidence
confidence 反應了兩件事情
1. 該 cell 是否包含物體
2. (x, y, w, h) 預測的有多準
公式定義如下:
confidence $= Pr(𝑜𝑏𝑗𝑒𝑐𝑡)∗IoU_{𝑝𝑟𝑒𝑑}^{𝑡𝑟𝑢𝑡ℎ}$
- $Pr(𝑜𝑏𝑗𝑒𝑐𝑡)$ 代表 Bbox 是否包含物體,若有包含物體則為 1,沒有包含物體則為 0
- $IoU_{𝑝𝑟𝑒𝑑}^{𝑡𝑟𝑢𝑡ℎ}$ 代表 Bbox 與 ground truth 的 IoU
### Classification
除了位置資訊外,還需得知框住的目標是哪個類別,因此每個 cell 還會預測 C 個條件類別機率:$Pr(Class_𝑖 | 𝑂𝑏𝑗𝑒𝑐𝑡)$
- $Pr(Class_𝑖 | 𝑂𝑏𝑗𝑒𝑐𝑡)$ 代表在這個 cell 包含物體的情況下,它屬於某個類別的機率,這個機率與 B 個 Bbox 共享。
在預測階段時會將 $Pr(Class_𝑖 | 𝑂𝑏𝑗𝑒𝑐𝑡)$ 與 confidence 相乘得到 confidence score,這 score 代表了所屬類別資訊與座標準確度:
$Pr(𝐶𝑙𝑎𝑠𝑠_𝑖│𝑂𝑏𝑗𝑒𝑐𝑡) \times Pr(𝑜𝑏𝑗𝑒𝑐𝑡) \times IoU_{𝑝𝑟𝑒𝑑}^{𝑡𝑟𝑢𝑡ℎ}=Pr(𝐶𝑙𝑎𝑠𝑠_𝑖) \times IoU_{𝑝𝑟𝑒𝑑}^{𝑡𝑟𝑢𝑡ℎ}$
論文中使用 PASCAL VOC dataset 去訓練,而類別總共有 20 種,因此每個 cell 還需預測是什麼類別,2 個 Bbox 共享這個資訊。
因此最後的 feature map 為 7×7×30 (S×S×(B×5+C))

## 3. 對 feature map 進行 NMS,得到偵測結果。
一張影像最後得到這 98 (7×7×2) 個 Bbox 後,需要經過以下步驟來去除重複的 Bbox
1. 設定一個 score 的閾值,若小於它則代表這個 Bbox 沒有包含這個類別的物體,這個步驟可以減少後面 NMS 的計算量。
2. 由於可能會重複框到同一個物體,因此使用 NMS 將最大的 IoU 保留下來,即可將一些重疊的 Bbox 消除,重複執行,直到每個類別都完成,剩下來的 Bbox 即為我們最後的結果
### Non-Maximum Suppression (NMS)
1. 根據 confidence scores 對預測進行排序
2. 從最高分開始,如果我們發現任何以前的預測與當前預測具有相同的類別,而且IoU > 0.5,則忽略任何當前的預測
3. 重複步驟 2,直到檢查完所有預測

---
## How to train YOLOv1 ?
1. 在 ImageNet 1000-class 分類資料集上使用 224×224 的圖片訓練分類器用以提取特徵,這邊是使用前 20 層的卷積層加上一個 average-pooling layer 和一個全連接層,Top-5 的精度達到 88%

2. 將之前訓練好的前 20 層的卷積層再加入剩下的 4 層卷積層與 2 層全連接層用來訓練物件偵測任務,資料集使用了 PASCAL VOC ,為了有更精細的結果,將圖片的解析度從 224×224 提高到 448×448

## Loss function
loss function 分為三個部分
* the localization loss
* the confidence loss
* the classification loss
### the localization loss
如果在 cell 中偵測到物體,則定位損失計算了預測的 Bbox 與 ground truth 之間的誤差
1. 我們不希望大 box 和小 box 與真實的 box 誤差一樣
例如大 box 的寬為 120、小 box 的寬為 80、真實的 box 寬為 100,我們使用寬度去計算 loss 會發現兩個誤差會相等:$(120-100)^2=(80-100)^2$,為了解決這個問題,我們使用寬度的平方根去計算:$(\sqrt{120}-\sqrt{100})^2 \neq (\sqrt{80}-\sqrt{100})^2$,因此我們選用寬度和高度的平方根去計算。
2. 為了更強調 Bbox 的準確性,我們將 loss 乘以 $\lambda_{coord}$ (預設值為 5)

### the confidence loss
如果在box中檢測到一個物體,則 confidence 損失 (box 的 objectness) 為:

如果在box中沒有檢測到物體,則 confidence 損失 (box 的 objectness) 為:

由於大多數 boxes 不包含任何物體。這導致了不平衡的問題,為了彌補這一點,我們用 $\lambda_{noobj}$ (預設值為 0.5) 降低這一損失的權重。

### the classification loss
如果在 cell 中偵測到物體,則分類損失是所有類別的平方差的和

## Performance

---
###### tags: `課程共筆`