# 2016 YOLOv1 1. 將影像縮放至 448×448,並輸入模型 2. 透過 end to end 的 CNN 網路,輸出 7×7×30 的 feature map 3. 對 feature map 進行 Non-Maximum Suppression (NMS),得到偵測結果。 ![](https://i.imgur.com/csPO0tu.png) --- ## 1. 將影像縮放至 448×448,並輸入模型 ![](https://i.imgur.com/xtXrRxf.png) ## 2. 透過 end to end 的 CNN 網路,輸出 7×7×30 的 feature map YOLO 的偵測網路包含 24 個卷積層 (Conv. Layer) 和 2 個 全連接層 (Conn. Layer) ![](https://i.imgur.com/lHtp1Vy.png) ### Grid cell YOLOv1 將輸入影像劃分成 S×S=7×7 個 grid cells,若一個目標的中心落在某個 cell 內,則此 cell 負責偵測該目標。 ![](https://i.imgur.com/pwJckm2.png) ### 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 之間 ![](https://i.imgur.com/vy5j8Oo.png) ### 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)) ![](https://i.imgur.com/21JyeRG.png) ## 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,直到檢查完所有預測 ![](https://i.imgur.com/z7u87ij.png) --- ## How to train YOLOv1 ? 1. 在 ImageNet 1000-class 分類資料集上使用 224×224 的圖片訓練分類器用以提取特徵,這邊是使用前 20 層的卷積層加上一個 average-pooling layer 和一個全連接層,Top-5 的精度達到 88% ![](https://i.imgur.com/OUuMZ0Y.png) 2. 將之前訓練好的前 20 層的卷積層再加入剩下的 4 層卷積層與 2 層全連接層用來訓練物件偵測任務,資料集使用了 PASCAL VOC ,為了有更精細的結果,將圖片的解析度從 224×224 提高到 448×448 ![](https://i.imgur.com/pFD9o8Q.png) ## 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) ![](https://i.imgur.com/lscs82M.png) ### the confidence loss 如果在box中檢測到一個物體,則 confidence 損失 (box 的 objectness) 為: ![](https://i.imgur.com/3zqUk3z.png) 如果在box中沒有檢測到物體,則 confidence 損失 (box 的 objectness) 為: ![](https://i.imgur.com/qTr9EMD.png) 由於大多數 boxes 不包含任何物體。這導致了不平衡的問題,為了彌補這一點,我們用 $\lambda_{noobj}$ (預設值為 0.5) 降低這一損失的權重。 ![](https://i.imgur.com/4MdyhV6.png) ### the classification loss 如果在 cell 中偵測到物體,則分類損失是所有類別的平方差的和 ![](https://i.imgur.com/OyTJHZE.png) ## Performance ![](https://i.imgur.com/bYFLiPT.png) --- ###### tags: `課程共筆`