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輸出皆作用於飽和區,使輸出逐漸變為常數,該層輸出無效。
Batch Normalization公式如下:
其意義即為計算當前資料之Mean(μ)及Variance(σ),將資料正規化。但除了正規化,還有γβ這兩個參數,其為模型的權重,由於已將資料進行正規化,其可能造成資料的特徵消失,因此再加入可學習之Mean(β)及Variance(γ),使網路學習調整資料分布。
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效果相當。
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),用來保留較高解析度的特徵。
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。
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)