YOLOv1/v2/v3簡述

YOLO系列是目標檢測領域裡十分經典的結構,雖然目前已經出了很多更高質量更復雜的網絡,但YOLO的結構依然可以給算法工程師們帶來很多的啟發。這3篇論文看下來,感覺像是一本調參說明書,教你如何使用各種trick提高手上的目標檢測網絡的準確率  


YOLOv1


YOLOv1/v2/v3簡述 | 目標檢測

論文: You Only Look Once: Unified, Real-Time Object Detection

  • 論文地址:https://arxiv.org/abs/1506.02640

Introduction

YOLOv1/v2/v3簡述 | 目標檢測

  YOLO十分簡單,一個網絡同時對多個物體進行分類和定位,沒有proposal的概念,是one-stage實時檢測網絡的里程碑,標準版在TitanX達到45 fps,快速版達到150fps,但精度不及當時的SOTA網絡

Unified Detection

YOLOv1/v2/v3簡述 | 目標檢測

  將輸入分為的格子,如果GT的中心點在格子中,則格子負責該GT的預測:

  • 每個格子預測個bbox,每個bbox預測5個值: 和置信度,分別為中心點座標和bbox的寬高,中心點座標是格子邊的相對值,寬高則是整圖的相對值。置信度可以反應格子是否包含物體以及包含物體的概率,定義為,無物體則為0,有則為IOU
  • 每個格子預測個類的條件概率,注意這裡按格子進行預測,沒有按bbox進行預測
YOLOv1/v2/v3簡述 | 目標檢測

  在測試時,將單獨的bbox概率乘以類的條件概率得到最終類別的概率,綜合了類別和位置的準確率   對於PASCAL VOC,設置,,共類,最終預測數據

Network Design

YOLOv1/v2/v3簡述 | 目標檢測

  主幹網絡共24層卷積加2個全連接層,沒有類似於inception module的旁路模塊,而是在卷積後接卷積進行降維。另外,fast YOLO的網絡降為9層

Training

  骨幹網絡前20層接average-pooling層和全連接層進行ImageNet預訓練,檢測網絡訓練將輸入從增加到,最後一層使用ReLU,其它層使用leaky ReLU

YOLOv1/v2/v3簡述 | 目標檢測

  損失函數如公式3,一個GT只對應一個bbox。由於訓練時非目標很多,定位的訓練樣本較少,所以使用權重和來加大定位的訓練粒度,包含3個部分:

  • 第一部分為座標迴歸,使用平方差損失,為了使得模型更關注小目標的小誤差,而不是大目標的小誤差,對寬高使用了平方根損失進行變相加權。這裡指代當前bbox是否負責GT的預測,需要滿足2個條件,首先GT的中心點在該bbox對應的格子中,其次該bbox要是對應的格子的個box中與GT的IoU最大
  • 第二部分為bbox置信度的迴歸,跟上述一樣,為非的bbox,由於負樣本數量較多,所以給了個低權重。若有目標,實際為IOU,雖然很多實現直接取1
  • 第三部分為分類置信度,相對於格子而言,指代GT中心是否在格子中

Inference

  對於PASCAL VOC,共預測98個bbox,用Non-maximal supression對結果進行處理

Experiments

YOLOv1/v2/v3簡述 | 目標檢測

總結

  開創性的one-stage detector,在卷積網絡後面接兩個全連接層進行定位和置信度的預測,並設計了一個新的輕量級主幹網絡,雖然準確率與SOTA有一定距離,但是模型的速度真的很快   作者提到了YOLO的幾點侷限性:

  • 每個格子僅預測一個類別,兩個框,對密集場景預測不好
  • 對數據依賴強,不能泛化到不常見的寬高比物體中,下采樣過多,導致特徵過於粗糙
  • 損失函數沒有完成對大小物體進行區別對待,應該更關注小物體的誤差,因為對IOU影響較大,定位錯誤是模型錯誤的主要來源

YOLOv2


YOLOv1/v2/v3簡述 | 目標檢測

論文: YOLO9000: Better, Faster, Stronger

  • 論文地址:https://arxiv.org/abs/1612.08242

Introduction

  基於YOLOv1,YOLOv2加入了一系列當前比較流行的提升方法,一個更快更準的one-stage目標檢測算法。此外,作者還結合hierarchical softmax提出YOLO9000,能進行9000類物體檢測的通用網絡。對於模型的介紹,分為Better/Faster/Stronger,分別介紹提升準確率的trick,網絡加速的方法以及超多分類的實現

Better

YOLOv1/v2/v3簡述 | 目標檢測

  YOLOv1還是個相當navie的想法,因此作者在YOLOv2加入了大量提升準確率的方法,算是個認真思考後的完整網絡吧,具體添加的方法如table 2

  • Batch Normalization

  BN層能夠很好地加速網絡的收斂,加入BN層YOLO能提升2%mAP,同時可以丟棄dropout進行訓練

  • High Resolution Classifier

  原YOLO的主幹網絡使用的輸入進行預訓練,然後直接使用進行檢測訓練,這要求網絡同時適應新像素和目標檢測的學習。為了更平滑,論文在檢測訓練前先對主幹網絡進行輸入的10個epoch fine tune,這帶來4%mAP提升

  • Convolutional With Anchor Boxes

  YOLOv1直接預測bbox,參考Faster R-CNN使用預設的anchor達到了很好的效果,YOLOv2去掉全連接層並開始使用achor   首先去掉最後的池化層,使得結果保持高像素,修改輸入分辨率為416來確保特徵圖是奇數,這樣就能保證只有一箇中心網格,便於預測大物體,最終的特徵圖為輸入的1/32倍,即。在加入anchor後,將預測的機制從綁定在格子轉化為綁定在anchor上,每個anchor預測個結果,objectness置信度預測IOU,class置信度預測分類的條件概率。使用anchor後準確率下降了,具體原因是輸出的box多了,召回率提高了,相對的地準確率降低了

  • Dimension Clusters
YOLOv1/v2/v3簡述 | 目標檢測

  目前anchor是手工設定的,這可能不是最優的設定,使用k-means來對訓練集的box進行聚類,獲得更準確率的預設anchor。聚類使用IOU作為距離計算,具體為,從圖2可以看出,5個簇時性價比最高,也是YOLOv2使用的設定

  • Direct location prediction
YOLOv1/v2/v3簡述 | 目標檢測

  使用achor後,YOLOv2的初期訓練十分不穩定,主要來源於中心點產生的誤差,region proposal方法使用相對anchor寬高的比例來進行中心點的位移,由於沒有約束,中心點可以在圖的任何地方,導致初期訓練不穩定

YOLOv1/v2/v3簡述 | 目標檢測

YOLOv1/v2/v3簡述 | 目標檢測

  因此,YOLOv2繼續沿用YOLO的策略,預測相對於格子的寬高的中心位置,使用邏輯迴歸來約束值在區間,而寬高則改為相對於anchor寬高的比例。因此,每個格子預測5個bbox,每個bbox包含5個內容,中心點要加上格子左上角座標。在約束了中心位置後,提升了5%mAP

  • Fine-Grained Features

  最後的特徵圖足夠用來預測大目標,但需要更細粒度的特徵來定位小目標,Faster R-CNN和SSD使用不同層的特徵圖進行預測,而YOLOv2則提出passthrough layer,將earlier layer的特徵進行隔點採樣,將原來的特徵圖採樣為(即將特徵圖分成多個的小網格,然後所有網格的1、2、3、4位置的值分別組合成新的特徵圖),然後跟最後的特徵圖concatenate到一起進行預測,這帶來1%mAP提升

  • Multi-Scale Training
YOLOv1/v2/v3簡述 | 目標檢測

  由於YOLOv2為全卷積網絡,可以任意修改輸入的大小,在訓練時,每10個batch任意切換一次輸入分辨率,候選分辨率為32的倍數,如。在實際使用時,可以用不同的分辨率來滿足不同的準確率和速度的要求,結果如表3

  • Main Result
YOLOv1/v2/v3簡述 | 目標檢測

YOLOv1/v2/v3簡述 | 目標檢測

Faster

YOLOv1/v2/v3簡述 | 目標檢測

  為了加速,YOLOv2使用了新的主幹網絡Darknet-19,包含19層卷積和5個池化層,使用卷積來對卷積結果進行壓縮,使用BN層來穩定訓練,加速收斂以及正則化模型,使用全局池化來進行預測

Stronger

  YOLOv2提出聯合分類數據和檢測數據進行訓練,得出超多分類的模型

  • Hierarchical classification

  ImangeNet和COCO的標籤粒度是不一樣的,為此,要對數據進行多標籤標註,類似於種屬科目綱門界的分法,構建WordTree

YOLOv1/v2/v3簡述 | 目標檢測

YOLOv1/v2/v3簡述 | 目標檢測

  比如諾福克梗等獵犬都屬於獵犬節點的下級分類,而諾福克梗的分類概率則為根節點到當前節點的路徑上的所有節點概率的乘積

YOLOv1/v2/v3簡述 | 目標檢測

  ImageNet1k經過重新標註後,WordTree共1369個節點,每個同級分類使用一個softmax,基於WordTree重新訓練Darknet-19,達到71.9% top-1準確率,僅僅降低了一點。從結果來看,大多數錯誤都是細粒度層級的錯誤,比如錯誤的結果也認為當前物體是狗,但是分錯了狗的品種,所以這種層級分類應該是有利於引導特徵的提取

  • Dataset combination with WordTree
YOLOv1/v2/v3簡述 | 目標檢測

  將COCO和ImageNet進行合併,得到圖6的WordTree,共9418類

  • Joint classification and detection

  由於ImageNet數據過多,對COCO數據集進行4倍過採樣。當輸入圖片是檢測數據時,進行全損失函數的反向傳播,其中分類的反向傳播僅限於GT的標籤層級及以上。而當輸入圖片是分類數據時,則取置信度最高()的bbox進行損失函數的分類部分的反向傳播

Training

YOLOv1/v2/v3簡述 | 目標檢測

來源: https://towardsdatascience.com/training-object-detection-yolov2-from-scratch-using-cyclic-learning-rates-b3364f7e4755

  YOLOv2跟YOLOv1類似,先將GT根據中心點賦予對應的格子IOU最大的bbox(這裡網上有的實現用為IOU最大的anchor,作者的實現為bbox,待考證),損失計算包含3部分:

  • 對應格子中最大的bbox的IOU小於thresh的bbox,只回歸objectness,導向0
  • 對於有GT的bbox,迴歸所有loss
  • 對於所有的box,在前12800次迭代迴歸其與預設框的座標,這是由於本身的座標迴歸就很少,在前期讓預測先擬合anchor來穩定訓練

總結

  YOLOv2在YOLO的基礎上融合了一些比較work的方法,進行了大量的改進:

  • 加入Batch Normalization
  • 為主幹網絡訓練進行高分辨率的fine tune
  • 加入anchor box機制
  • 使用k-mean來輔助anchor的設定
  • 沿用YOLO的方法對anchor中心點進行修正
  • 使用passthrough layer,融合低維度特徵
  • 使用multi-scale trainning提高準確率
  • 提出darknet-19來加速
  • 使用hierarchical classification進行超多目標的分類

YOLOv3


YOLOv1/v2/v3簡述 | 目標檢測

論文: YOLOv3: An Incremental Improvement

  • 論文地址:https://arxiv.org/abs/1804.02767

Introduction

YOLOv1/v2/v3簡述 | 目標檢測

  YOLOv3的發表不是一篇完整的論文,是作者把手上的一些小工作進行整理,主要是將一些有效的trick加進去

Bounding Box Prediction

YOLOv1/v2/v3簡述 | 目標檢測

  YOLOv3的整體座標迴歸跟YOLOv2類似,依然用邏輯迴歸函數預測anchor的objectness,每個GT只賦予一個IOU最大的anchor產生全部損失(論文寫的是bounding box prior不是bounding box,即預設的框,這樣可以找到計算的level,大致作用跟原來差不多,但作者實現用的bounding box,待考證),其它的與GT的IOU大於0.5的anchor不產生任何損失,而與GT的IOU小於0.5的anchor則只產生objectness loss

Class Prediction

  為了支持多標籤,使用獨立的邏輯分類進行class prediction,使用二值交叉熵損失函數進行訓練

Predictions Across Scales

  YOLOv3在3個不同的特徵圖進行bbox預測,這些特徵圖用類似FPN的方法,對高層特徵進行上採用然後和低層concatenate,每層特徵圖有特定使用的3個anchor,先用幾個卷積層對合並特徵圖進行處理,然後預測一個3-d tensor,分別包含位置信息,objectness信息和類別信息。例如COCO中,tensor的大小的數據,即channel為255

Feature Extractor

YOLOv1/v2/v3簡述 | 目標檢測

  YOLOv3提出了新主幹網絡Darknet-53,將DarkNet-19和殘差網絡進行融合,在之前的卷積和卷積組合基礎上加上一個shortcut連接

YOLOv1/v2/v3簡述 | 目標檢測

  DarkNet-53準確率跟目前的SOTA分類網絡差不多,但是速度快很多

Main Result

YOLOv1/v2/v3簡述 | 目標檢測

YOLOv1/v2/v3簡述 | 目標檢測

總結

  YOLOv3是個非正式的版本,作者的改進比較少,主要是融合一些用於提高準確率的方法:

  • 將類別置信度預測改為邏輯獨立分類
  • 結合FPN的結構進行多level的預測
  • 提出Darknet-53,將shortcut連接加入到網絡中

Conclusion


  YOLO系列是目標檢測領域裡十分經典的結構,雖然目前已經出了很多更高質量更復雜的網絡,但YOLO的結構依然可以給算法工程師們帶來很多的啟發。這3篇論文看下來,感覺像是一本調參說明書,教你如何提高手上的目標檢測網絡的準確率,各種trick,十分值得研讀

如果本文對你有幫助,麻煩點個贊或在看唄~ 更多內容請關注 微信公眾號【曉飛的算法工程筆記】


分享到:


相關文章: