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有時間來調整.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章