# YOLOv3 (2018) 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/UKDmgwY.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: `Object detection`