Yolo算法v1-v3介紹

YoloV1

一. Yolo的核心思想就是把整張圖作爲網絡的輸入, 直接在輸出層迴歸bounding box的位置及其類別.

二. 實現方法:

  1. 將圖像分成S*S個網格, 每個網格預測B個bounding box, 每個bounding box輸出5個值, 包括p, x, y, w, h
  2. 每個網格還需要輸出C個類別概率. 所以給定一張圖片, 網絡輸出維度爲S * S * (5*B+C). 例如在PASCAL VOC中, 圖像輸入爲448 * 448, S=7, B=2, 20個類別, 於是輸出爲7 * 7 * 30.
  3. 網絡結構:
    在這裏插入圖片描述
    網絡基本結構爲GoogleNet, 只是去掉了Inception模塊用1 * 1 + 3 * 3 的卷積結構替代(簡化). 最後把GoogleNet的classifier output用4個卷積層和2個全連接層替換掉, 得到想要的輸出維度. 因爲使用了全連接層, 預測圖片必須和訓練圖片分辨率一致.
  4. 損失函數:
    在這裏插入圖片描述
    訓練的時候, 分三個部分計算損失, 包括"座標損失", “IOU損失"和"類別損失”.
座標損失: 只計算label中有物體的格子所對應的box. 
用label中的座標x,y, w, h與predict得到的box的x',y', w', h'做平方和損失. 
其餘沒有物體的格子中的box座標不計入損失函數中. 
x, y, w, h都歸一化到0-1之間. 
應該更重視座標預測, 所以座標損失賦予更大的權重, 5. 

注意: 座標損失中, w和h的計算取了根號, 原因是相等的誤差值, 對大物體的影響應該小於對小物體的影響. 根據平方根函數(如下圖)來看, 取平方根能一定程度緩解這個問題(仍然沒有解決).
在這裏插入圖片描述

IOU損失: 計入損失函數的目的是爲了優化所有box的p值(置信度). 
對於有物體的格子, 它的box中的p值應該儘可能的大, 此時把IOU作爲p值, 就是希望p儘可能等於1, 表示predict的座標與label的座標儘可能重合. 
對於沒有物體的格子, 它的box中的p值應該儘可能等於0, 方便後續根據p值把這些box過濾掉. 
同時, 因爲沒有物體的格子更多, 數據不平衡, 所以對這些box設置權重爲0.5, 減弱每個box的影響. 
類別損失: 關注有物體的格子做的分類預測是否準確, 把分類誤差計入損失中. 
  1. 訓練過程:
    a. 先用ImageNet預訓練: Yolo的前20個卷積層 + 1個average池化層 + 1個全連接層做分類. 圖像分辨率爲224 * 224.
    b. 前20個卷積層得到了初始化, 然後接上4個卷積層 + 2個全連接層得到檢測模型. 在Pascal Voc上用448 * 448的圖片訓練檢測模型.

  2. 預測:
    預測的時候, 對網絡得到的所有box, 先把p小於0.5(閾值, 可調節)的box先去掉, 然後對剩下的box, 用非極大值抑制法(NMS)篩選得到最終的結果.

  3. Yolo的優點:
    a. 快: 高準確率下的實時檢測.
    b. 背景誤檢率低. 因爲Yolo能看到全局圖像, 而基於region的rcnn/fast rcnn等只能看到局部圖像.

  4. Yolo的缺點:
    a. 對相互靠近的物體以及小物體的檢測效果不好, 因爲一個格子只能檢測一個物體, 並且算loss的時候即使對w和h開了根號, 小物體的位置偏差仍然對loss貢獻不大, 因此沒有做到很好的優化.
    b. 泛化能力弱, 對於非常見形狀的物體檢測效果不好.

YoloV2

YoloV2的目標是提高定位的準確度, 以及改善recall(召回率/查全率).
改進之處有:

更好
  1. Batch Normalization: 卷積層全部使用Batch Normalization, 同時取消Dropout.

  2. 高分辨率分類器: V1中用224 * 224的圖片來訓練分類器網絡, 然後用448 * 448的圖像來微調檢測網絡. V2除了224 * 224的圖像, 還用了448 * 448的圖像來微調分類器網絡, 讓filter有時間來調整.

  3. 借鑑Faster R-CNN的思想, 採用anchor box(先驗), 讓模型預測box的偏移, 而不是直接預測座標, 這樣簡化了問題讓模型更容易學習.

  4. 採用K-Means來生成anchor box, 而不是像Faster-RCNN手動標註, 並證明這樣更好. K取5時, 模型在複雜度和準確率間取得平衡.

  5. 細粒度特徵: 添加一個passthrough層, 將上一層(26 * 26)的特徵圖疊加到最後一層(13 * 13)的特徵圖上, 使檢測器能學到更細粒度的特徵.

  6. 多尺度訓練: 因爲是全卷積網絡, 輸入圖像尺寸可以變化. 每10個batch改變一次圖像尺寸進行訓練, 讓網絡更健壯.
    在這裏插入圖片描述

更快
  1. 自定義的新的分類網絡: DarkNet-19, 效果更好
更強
  1. 定義了新的聯合訓練方法, 使用WordTree, 讓模型能夠同時使用目標檢測數據集和分類數據集進行訓練, 並且分類目標達到9000個, 採用聯合訓練方法的算法叫Yolo9000.

YoloV3

在這裏插入圖片描述

改進之處:
  1. 更好的分類器(independent logistic classifier)
不再使用Softmax對每個格子進行分類, 而是使用多個獨立的 logistic 分類器. 
原因是Softmax使得每個格子只能有一個類別, 對於有物體重疊的數據不適用. 
  1. 多尺度預測
與YoloV2的多尺度不同, V3的多尺度是指同一張圖片在卷積後得到的不同尺度上做預測. 即:
使用聚類k=9得到9個anchor box, 按照大小分到3個尺度:
尺度1: 在基礎網絡之後添加一些卷積層再輸出box信息
尺度2: 從尺度1中的倒數第二層的卷積層上採樣(x2)再與最後一個 16x16 大小的特徵圖相加,再次通過多個卷積後輸出 box 信息,相比尺度1變大兩倍.
尺度3: 與尺度2類似,使用了 32x32 大小的特徵圖

在這裏插入圖片描述
3. 更好的基礎分類網絡(DarkNet-53)
DarkNet-53與ResNet-101或ResNet-152準確率接近, 但速度更快.

總結

  1. YoloV3對小物體的檢測能力得到了提高.
  2. Yolo算法最重要的優點還是保證一定準確率的同時, 速度快.
  3. 對檢測速度要求高的場景下, 可以使用Yolo系列或者MobileNet, Yolo是在算力足夠的前提下, 速度快, 移動端適合MobileNet, 算力要求小, 速度相對快.
  4. 如果不要求檢測速度, 算力足夠, 可以考慮Mask-RCNN, 準確率目前來說最高.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章