---
# System prepended metadata

title: 2018 YOLOv3
tags: [課程共筆]

---

# 2018 YOLOv3
YOLOv3 與 YOLOv2 有下列幾種不同之處

### 1. New Network: Darknet-53

YOLOv3 提出一個新的 backbone - Darknet-53，其中包含了 53 個卷積層，每個卷積層後面都會接 BatchNorm 層與 LeakyReLu 層。而網路的加深會容易導致梯度消失或爆炸，因此需要使用 ResNet 網路的技巧來克服這個問題，其中包含了 Residual blocks, Skip connections

Darknet-53 的網絡架構如下圖所示
![](https://i.imgur.com/mRdppFX.png)

YOLOv3 網路中將 pooling 層移除，並透過改變 filter 與 stride 來改變特徵圖大小。下面是 YOLOv2 與 YOLOv3 的比較。
![](https://i.imgur.com/AQfHTko.png)


由下圖的比較圖中可以看到 Darknet-19 在速度上仍然佔據很大的優勢，但其實 YOLOv3 並沒有那麼追求速度，而是在保持 real-time (fps>36) 的基礎下追求精準度。若要追求速度，作者有提供 darknet-tiny 的 backbone 用來取代 darknet-53。

![](https://i.imgur.com/b6jjgK0.png)

### 2. Predictions Across Scales

YOLOv3 最顯著的特點就是借鑒了 FPN (Feature Pyramid Networks)的方法，在 3 個不同 Scale 的 feature maps 上做預測。將 upsampling 層與前一層 Feature map 相連接，有助於保留細粒度特徵，使得能夠檢測小對象。這 3 種不同 Scale 的 feature maps 負責預測不同尺寸的物體。

例如我們輸入圖像為 416x416 意味著我們在 52×52 (416/8) 、26×26 (416/16)、13×13 (416/32) 這三種 Scale 上進行預測。
- Scale 1: 13x13 層負責偵測大物體
- Scale 2: 26x26 層負責偵測中物體
- Scale 3: 52x52 層負責偵測小物體

![](https://i.imgur.com/x24gc1i.png)

而每個 Scale 需要分別預測出 3 個 Bbox，因此總共需要 9 個 anchor box 去幫助我們預測，在這邊 YOLOv3 引用了 YOLOv2 中的技巧，使用 K-means 對訓練集進行 clustering ，進而得到類別中心點的 9 個 anchor box。在 COCO 資料集中 (原始圖片全部 resize 為 416x416)，9 個 anchor box 分別是 (10x13)、(16x30)、(33x23)、(30x61)、(62x45)、(59x119)、(116x90)、(156x198)、(373x326)。

另外，COCO 資料集中的類別個數是 80 個， 因此每種 Scale 的 每個 cell 都需要預測出 255 的深度。
![](https://i.imgur.com/7SK8Jp2.jpg)

下圖為網路架構：

![](https://i.imgur.com/IRP61gp.png)

這邊有一個實例的網路架構如下圖：

![](https://i.imgur.com/pAqLVSz.png)
- 第一次預測：在 82 層，feature map 大小為 13x13x255。
- 第二次預測：對 79 層的 feature map 進行幾層卷積，再進行 2x up sampling 得到 26x26 維，然後和 61 層連接起來，再對它進行幾個 1x1 卷積處理用以融合 61 層的特徵，最後生成 26x26x255 的 feature map
- 第三次預測：對 91 層的 feature map 進行幾層卷積，再進行 2x up sampling 得到 52x52 維，然後和 36 層連接起來，再對它進行幾個 1x1 卷積處理用以融合 36 層的特徵，最後生成 52x52x255 的 feature map

### 3. Bounding Box Prediction

YOLOv3 在 Detect 之前用 logistic regression 為每一個 bounding box 預測一個 confidence score。即這塊位置是目標的可能性有多大，可以去掉不必要的 anchor，可以減少計算量，對每個 ground truth 只分配一個最好的bounding box 與其對應。而 logistic 回歸就是用來從 9 個 anchor priors 中找到 confidence score (目標存在可能性得分) 最高的那一個

- 當某個 bounding box 與 ground truth 的 IOU 大於其他所有的 bounding box 時，則設 target 值為 1
- 如果某個 bounding box 不是 IOU 最大的那個，但是 IOU 也大於了某個閾值 (default 0.5)，那麼忽略這個框，既不懲罰也不獎勵。
- 如果某個 bounding box 沒有與任何一個 ground truth 對應，那麼這個框對邊框位置大小的回歸和類別預測沒有幫助，只會懲罰他的 objects，試圖減小他的 confidence

### 4. Class Prediction
YOLOv3 不使用 softmax 對每個框進行分類，因為 softmax 強加一個假設，使得每個框只包含一個類別。而很多東西是重疊的標籤，比如預測的是女生，也屬於人這一個類別，這是一個多標籤問題，而 softmax 不適合多標籤分類。因此YOLOv3 將 softmax 替換成可預測多標籤多分類的 binary cross-entropy 
$$loss=-\mathop{\sum_{i=1}^{n}} \hat{y_{i}}log \hat{y_{i}}+(1-y_{i})log(1-y_{i})$$

### 5. Loss Function
YOLOv2 直接預測座標位置，不僅速度慢，而且 sigmoid 轉換中還會消除部分的 difference，
![](https://i.imgur.com/gceFojW.png)
- 根據他這個 Bbox 裡面是否存在這個物件，並做二元分類預測，二元的意思是指 1.有這個類別 2.沒有這個類別，而他的 BCE 總和便是針對所有可能出現的類別，各做一次預測
- YOLOv3 將 object confidence 和 class predictions 部分的 loss 改用 binary cross-entropy loss 而不是使用 mean square error 去計算分類誤差。於是採用一種方式直接對偏移量進行預測
![](https://i.imgur.com/NXLd7Tt.png)

YOLOv3 的性能
![](https://i.imgur.com/WSEiv4L.png)

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