YOLOv3是根據YOLOv2再次改進,其參考其他Paper改動了多個部分,優化自身模型,其效果相當顯著,提升檢測效果的同時依然保留較高的檢測速度。
以下根據Paper安排,依序介紹YOLOv3改進之處:
Bounding Box Prediction
Bounding Box定義與YOLOv2相同,使用MSE loss
- 正樣本: 與Ground Truth重疊最大的框 (Max IOU)
- 負樣本: 與Ground Truth IOU < 0.5
- 忽略樣本: IOU > 0.5但非Max IOU
忽略的樣本則是避免兩個BBox在IOU皆很大的情況下(0.9, 0.8),相對較小的BBox轉為負樣本則會太過強硬,造成正負樣本的Loss互相影響,無法有較好效果。而以上情況可以使用NMS(Non-Maximum Suppression)解決
YOLOv3使用Logistic Regression(Sigmoid)來回歸Box Confidence,並將Ground Truth改為0 or 1。
YOLOv2 Box Confidence定義為Predict與Ground Truth之IOU,此定義會造成部分Predict與Ground Truth匹配的IOU較低的Anchor乘上Class Probability後,整體機率下降,經過Threshold則會被刪除,在小物體上此現象會更明顯,Pixel對IOU影響很大,更難檢測出結果
Class Prediction
Class Probability取消使用Softmax,改用二分法,使用BCE(Binary Cross Entropy)
Softmax只能預測單一類別,而許多物品擁有多類別標籤,如男人與人類的類別,或是物品重疊的情況,在更複雜的領域中(如open image dataset、WordNet),效果會更好
YOLOv3網路架構
Predictions Across Scales
YOLOv3在網路架構中加入Feature Pyramid Network (FPN)結構,融合多尺度特徵,並輸出多尺度結果,FPN 原始paper中使用Sum融合特徵,YOLOv3使用Concatenate
高解析度檢測小物體,低解析度檢測大物體,每個尺度檢測3種anchor。
COCO Dataset 9 個Anchor size為: (10×13), (16×30), (33×23), (30×61), (62×45), (59× 119), (116 × 90), (156 × 198), (373 × 326)
Feature Extractor
YOLOv3加入Residual Block及Bottleneck layers ,取消使用Pooling,採用Conv(stride=2),使用average pooling或max pooling皆會損失資料,而使用Conv(3x3, Stride=2)可以完全保留原始資料。
Backbone中有53個Convolution,因此將名稱改為Darknet-53,可與ResNet-101同等效果但速度更快
Training
YOLOv3訓練使用與YOLOv2雷同的策略,如multi-scale training、data augmentation、batch normalization等方法
YOLOv3實驗無效方法
Anchor box x, y offset predictions
用線性方式預測BBox的長寬(p•t),會使模型較不穩定且效果較差
Linear x, y predictions instead of logistic
用Linear Regression預測Box Confidence,效果較Logistic Regression差
Focal loss
使用Focal loss,效果未提升,原因未知
Dual IOU thresholds and truth assignment
Faster R-CNN使用兩個Threshold來判斷正負樣本,IOU>0.7為正樣本,IOU<0.3為負樣本,但並不能得到更好的效果
YOLOv3 Performance
YOLOv3優缺點
優點:
- 加深網路,增加準確率
- 多層預測大小物體,提升小物體準確率
- 取消Softmax使用Sigmoid,可使物體擁有多重標籤
- 正負樣本定義改變為以框整體(IoU)為基礎判斷正負樣本,而不是框的中心位置
缺點:
- 單一物體擁有多重標籤(多重輸出結果)