YOLOv1 的不足
- 相較於 Fast R-CNN ,有較多的定位錯誤 (localization errors)
- 召回率比其他 Region proposal-based 的方法低
- 檢測器無法有效利用圖像分類數據集來增加可檢測的類別
YOLOv2 中使用的優化點
Batch Normalization
- BN 可以加速模型收斂,減少其他 regularization 的使用
- 使用後 mAP 增加了 2% ,而且不再需要 Dropout 來避免 overfitting
High Resolution Classifier
- YOLOv1 中,訓練包含了個階段
- 預訓練 : 低解析度圖像(224x224 px) + 分類任務
- 微調 : 高解析度圖像(448x448 px) + 目標檢測任務
- 這導致模型必須同時適應解析度與訓練任務的轉換
- YOLOv2 中,在兩個過程中間額外加上一個高解析度圖像的分類任務進行微調 ,讓模型譨先適應高解析度影像,再開始學習目標檢測任務
Convolution With Anchor Boxes
- 參考了 Faster R-CNN 中的 Anchor 機制 (其中 RPN 預測的是 anchor 的修正量)
- 去除了 YOLOv1 的全連接層,並改成使用 anchor box 機制
- 縮減模型輸入 (448→416),使輸出尺寸縮減 (14→13) (因為作者發現,圖像中物件經常落在正中央位置,讓輸出網格數變成奇數後,就能讓正中間網格專注預測中央位置的物件)
- 採用 anchor box 機制後,分離了類別預測任務與位置預測任務之間的耦合
- 使用 anchor boxes 機制後,降低了 mAP 但提升Recall (讓模型有更多可改進空間)
Dimension Clusters
- 採用 anchor box 機制後,需要挑選 anchor boxes 的尺寸
- 利用 K-means 聚類,挑選最合適的 anchor boxes 尺寸
- K-means 聚類時,使用 anchor 之間的 IoU 作為 distance metric
- 聚類的類別數越多,召回越高,但模型複雜度也高 (最後選擇 k=5 為一個平衡點)
Direct location prediction
- 加上 anchor 後,發現訓練不穩定,原因是模型沒有對輸出值做限制,導致每個網格都能預測出任意位置,使訓練難以收斂
- 讓模型沿用 YOLOv1 的做法,預測物件相對於所在網格左上角點的位置
- 並且將位置預測值加上邏輯函數,限制其值在 [0, 1] 之間
Fine-Grained Features
- 在經過多層卷積層運算後,特徵圖的解析度會變小,小物件的信息也會逐漸流失
- 在 Faster R-CNN 與 SSD 中,都利用了多尺度特徵圖來提升小物件的召回 (因為利用了淺層的高解析度特徵圖)
- YOLOv2 中,使用 passthrough layer 來結合不同解析度的特徵圖,提升小物件召回
Multi-Scale Training
- 從 YOLOv1 的架構,去除了全連接層,得到的 FCN 模型能預測多種輸入尺寸的影像
- 訓練時,不斷改變輸入圖像的尺寸,讓模型能適應不同解析度的圖像
- 這個特性,也讓我們能輕易地在模型的運算時間與準確度之間做調整