YOLO v1, v2, v3

Kevin Chiu
CodingJourney
Published in
Jun 21, 2020

Object detection algorithm: YOLO introduction

簡單針對YOLO做介紹並複習

YOLO v1 paper: https://arxiv.org/pdf/1506.02640.pdf

YOLO v2 paper: https://arxiv.org/pdf/1612.08242.pdf

YOLO v3 paper: https://pjreddie.com/media/files/papers/YOLOv3.pdf

下圖為三種YOLO的相關結構

YOLO v1:

基本想法就是將圖片經過CNN訓練之後,分成7*7的grid cell, 每個grid cell會預測1~2種的object,並生成對該object的信心機率和該object的bounding box 大小。

結構:把整張圖(448*448*3)餵進CNN模型裡,輸出(7*7*(b*5+c))的預測結果資料和7*7*b個bounding boxes。(b為bounding box數量, c為categories數量)

假設b=2 & c=20,則會輸出7*7*2個bounding box,之後會再經過threshold 設定和NMS(Non-Maximum Suppression)來減少bounding box達到最後物件偵測。

詳細的Loss function可參考:連結 ; 詳細關於NMS介紹可參考:連結

YOLO v2:

YOLO更詳細介紹: link

基本上相對於YOLO v1針對了幾個地方做了加強和修改:

  1. Batch normalization: 捨棄dropout改用batch normalization。提升2% mAP。
  2. High resolution classifier: 在YOLOv2,作者一開始在協調分類網絡(指DarkNet-19)用的448X448全分辨率在ImageNet上跑了10個epoch。使模型提升了4% mAP。
  3. 使用Anchor box: 捨棄YOLO v1最後用FCN直接預測bounding box的方法而改用faster-RCNN的anchor box概念。這中間也做了一些修正,包含:

3.1 輸入圖片大小448*448改成416*416:使特徵圖恰好只有一個中心位置

3.2 針對網路最後輸出13*13的feature map分成13×13個grid cell,每個cell用5個anchor box預測得到5個bounding box,一共有13×13×5=845個box

詳細請參考:論文

4. Fine-Grained Features: 增加26*26*512的特徵圖,使對小圖型的尺度檢視效果更好(原本只有13*13的feature map檢測小圖形不夠精確)

26*26*512的特徵圖經passthrough層處理之後就變成了13×13×2048的新特徵圖(特徵圖大小降低4倍,而channles增加4倍),這樣就可以與原本的13×13×1024特徵圖連接在一起形成13×13×3072的特徵圖

YOLO v3:

YOLO v3本相較於v2,著重的部分並非速度,主要是針對bounding box數量及對小尺寸物件的偵測能力做增強。

  1. 關於YOLO v3的anchor box修正可以參考連結
v3對b-box進行預測的時候,採用了logistic regression。有了平移(tx,ty)和尺度縮放(tw,th)才能讓anchor box經過微調與grand truth重合。如圖3,紅色框為anchor box,綠色框為Ground Truth,平移+尺度縮放可實線紅色框先平移到虛線紅色框,然後再縮放到綠色框。邊框回歸最簡單的想法就是通過平移加尺度縮放進行微調。

2. Predictions Across Scales:

YOLO v3使用了三種尺度的網路,13*13, 26*26, 52*52,每個grid搭配3個bounding box來做預測,使整個神經網路可以針對圖片中小尺寸的物件有更好的偵測成果。

結構圖:

三代YOLO的結構圖:

YOLO各版本比較:

--

--