DL、ML筆記(15): YOLO v2

YOLO9000: Better, Faster, Stronger

JianJie
11 min readSep 16, 2021

YOLO v2為YOLO v1的改進版本,其採用了當前最新及先前的多種技術,希望在提高速度的同時維持一定的精準度,與Faster R-CNN及SSD擁有相同檢測效果的狀態下,卻擁有相當快檢測速度。

其中可以分為三個部分介紹,Better:使檢測效果更好,Faster:使網路速度更加快速,Stronger:使模型可以使用多個Dataset,並擁有更細緻的標籤類別,以下分別以三個部分介紹:

Better

Batch Normalization

Batch Normalization是將特徵縮放,將前一層的Output標準化後再轉至下一層,通過標準化特徵,可以使收斂速度更快,並且減少Internal Covariate Shift問題。

Internal Covariate Shift:神經網路為多層結構,而每一層網路在訓練時皆使權重更新產生變化,這也會造成數據的分布逐漸改變,因此每一層網路還需要根據改變的數據分布再多加調整,再訓練時需要更加謹慎設定學習率及初始權重等其餘因素。

在網路中還會有Activation Function,假如無Batch Normalization,Internal Covariate Shift可能會使每層Activation Function輸出皆作用於飽和區,使輸出逐漸變為常數,該層輸出無效。

Sigmoid Activation Function 飽和區域

Batch Normalization公式如下:

其意義即為計算當前資料之Mean(μ)及Variance(σ),將資料正規化。但除了正規化,還有γβ這兩個參數,其為模型的權重,由於已將資料進行正規化,其可能造成資料的特徵消失,因此再加入可學習之Mean(β)及Variance(γ),使網路學習調整資料分布。

Batch Normalize 權重分布差異

High Resolution Classifier

以往的Detector會先在ImageNet預訓練後,再在目標Dataset上Fine Tune,而這兩次訓練使用的影像尺寸會不相同,預訓練會使用較小的尺寸,Fine Tune會使用較大的尺寸(YOLOv1 Pretrain:224, Fine Tune:448)。但影像尺寸不同會使網路需要再適應尺寸的改變,因此YOLOv2在預訓練後,改變尺寸再訓練少許Epoch,使網路適應目標尺寸後再Fine Tune。

Convolutional With Anchor Boxes

在YOLOv1中,輸入圖像為448x448,YOLOv2更改為416x416,由於網路會經過多次縮減(Pooling),使用448會使輸出size為14x14,擁有四個Center Cell (5層Pooling),而使用416可以使輸出size為13x13,Center Cell只有一個。其更改原因為物體較常出現於圖片中央,因此需要確保Center Cell只有一個,Center Cell有四個時較難分配哪一個Cell用來預測中央物體,YOLOv1輸出7x7的Grid也是此原因。

YOLOv2相較YOLOv1減少一層Pooling層用來保留較高的解析度,並且將YOLOv1中的全連接層移除,使用Convolution代替,這樣可以使特徵保留位置訊息,使位置預測問題較為單純。

YOLOv2參考Faster R-CNN,將網路更改為Anchor Base Method,使模型可以擁有更多預測框,會造成mAP些微下降,但可以提高Recall。並更改Bounding Box參數,使每個Anchor預測自己的類別(Class)(YOLOv1兩個Bounding Box共享一個物體類別)。

Dimension Clusters

YOLOv2轉換回Anchor Base方法後,需要設定Anchor的大小,在Faster R-CNN中,Anchor尺寸是根據經驗(手動)設定的,再經過網路訓練調整大小,但一開始就根據數據取得與數據相匹配的Anchor,可以使模型更好訓練及預測效果更佳,因此YOLOv2使用K-means對數據的Bounding Box聚類,取得Prior Anchor Size。

但使用標準的K-means(Euclidean distance來評估各數據間的差異)會使得較大的框會有較大的誤差,因此較大的框在聚類時的群體會較小,而小框的群體較大。但目標與框的大小無關(大小框需產生相同誤差),因此使用IOU來定義數據間的差異:

可以不同的K值(聚類類別數量)來評估數據需要聚類,一樣使用IOU計算,聚類數量越多,IOU誤差越小,但考慮模型複雜度及Recall,作者選擇K=5時有較平衡的效果。

聚類結果可以發現多數Anchor為長型的,且與Faster R-CNN比較,使用5種Anchor就可以與Faster R-CNN的9個Anchor效果相當。

Anchor 設定比較

Direct location prediction

YOLOv2更改為Anchor Base方法後,會遇到一個問題,模型在訓練初期會不穩定,而這主要是因為Bounding Box座標(x, y)預測的因素。在Faster R-CNN的RPN中,網路直接預測Bounding Box座標,且不給予位置的限制,Bounding Box可以出現在圖片中所有位置,之後再Regression Bounding Box,公式如下:

此公式為YOLOv2中所寫的,但其中公式與Faster R-CNN有些差異,在Faster R-CNN中公式如下:

需要將YOLOv2中Xa更改為加號即相同。YOLOv2不使用直接預測的方法,而是跟YOLOv1相同的方式,Bounding Box座標(x, y)是由該Grid Cell位置加上偏移量計算取得,如下圖所示:

並且將偏移量經過Sigmoid,限制輸出範圍至[0, 1],歸一化也可以使訓練更穩定。

Fine-Grained Features

由於經過多層Convolution及Pooling,會使得檢測的解析度越來越低,使得檢測小物體更加困難,因此YOLOv2加入一層PassThrough Layer,將特徵重新排列(26x26x512 > 13x13x2048),用來保留較高解析度的特徵。

PassThrough Layer

Multi-Scale Training

由於網路皆是Convolution,因此可以改變輸入圖片的尺寸。YOLOv2在Fine Tune時使用不同尺寸的圖片進行訓練,每訓練10個Batch就會改變圖片尺寸,由於網路中有五層Downsamples,因此圖片的尺寸為32的倍數即可,YOLOv2使用{320, 352, …, 608}等尺寸。

這種訓練方式可以使網路對不同解析度的圖片進行檢測,雖然在圖片Size較大時,訓練較慢,但可以提高準確率,在速度及準確率取得平衡。

Faster

Darknet-19

YOLOv2提出了一個新的Classification模型,與VGG16有些雷同。網路中參考Network in Network的方法,在3x3Convolution中間使用1x1 Convolution來壓縮特徵,並提高非線性組合。在Classification模型的最後使用Global Average Pooling進行預測,可以減少原始使用全連接層的參數量,並且避免因為權重過多產生的Overfitting。

Global Average Pooling
Darknet-19網路架構圖

Training for classification

Polynomial Rate Decay可以避免在訓練後期因為學習率過小網路卡在局部最小值的狀況,提高學習率跳出局部最小值。

Training for detection

YOLOv2將Classification Model調整為Detection Model,去除最後一層Convolution,改為3x3Convolution,並且加入PassThrough Layer。

YOLOv2改進部分

YOLOv2採用了多個改進方法,逐步提升檢測效果

YOLOv2效果

Stronger (YOLO 9000)

YOLOv2提出了一個融合Detection及Classification Dataset的訓練方法,使檢測模型擁有更細緻的標籤。

Hierarchical classification

在Detection Dataset中,物體的標籤通常是較為廣義,而Classification Dataset的標籤則會較為細緻,就如”狗”,但狗還有許多品種(“柯基”、”柴犬”、、、等),而我們需要這兩種標籤同時存在,因此Classification Dataset的標籤需要經過一些轉換。

Detection常用的Pretrain Dataset ImageNet,其標籤是由WordNet中取得,WordNet為語言庫,其建構名詞間的關係,因為名詞為相互關係,非樹狀結構,如下圖:

因此作者將其修改,改建立樹狀結構,每個名詞僅一個Root,如有多條路徑,則選擇最短路徑,變為多階層結構,並且可以使用條件機率來進行標籤的分類,如下圖:

轉變為WordTree後,會針對每個節點進行SoftMax,選擇最單一節點,階層式分類語意類別。

Dataset combination with WordTree

將Classification Dataset的標籤轉換為WordTree結構後,就可以將Detection 及 Classification Dataset進行融合,變成完整的WordTree,如下圖:

Joint classification and detection

當使用Detection Dataset進行訓練時,會使用完整的Loss來Backpropagate;當使用Classification Dataset時,就只使用與Classification相關的Loss來更新網路。

而對於物體類別,則是取與標籤相對應的Loss進行Backpropagation,假如標籤為”狗”,則只考慮到標籤”狗”的Loss,而不考慮”柯基”或是”柴犬”的Loss。

YOLOv2優缺點

優點:

  • 輸出Grid為奇數,可由正中心預測物體
  • 使用多種方案(Batch Normalize、High Resolution Classifier),使檢測效果更佳
  • 改為Anchor Base方法,檢測框更穩定
  • 使用PassThrough Layer,融合較高解析度之特徵
  • 多尺度訓練,使Detector適應圖片解析度變化
  • 可以融合檢測及分類數據集(YOLO9000),多層級預測label

缺點:

  • 小物體效果依然較差
  • YOLO 9000 之訓練方法效果依然差 (mAP:19.7)

--

--

JianJie
JianJie

Written by JianJie

Image Processing / Computer Vision / Deep Learning

No responses yet