yolo系列文章之yolov2詳解

論文地址:YOLO9000: Better, Faster, Stronger

主要介紹

YOLO9000可以檢測多達9000種不同的物體,通過使用多尺度的訓練方法,可以使得yolov2在多種尺度上運行,在檢測速度與精度上可以達到平衡。另外利用聯合訓練目標檢測與分類的方法,使用這種方法,我們在COCO檢測數據集上與ImageNet分類數據集上同時訓練YOLO9000, 這種聯合訓練可以使得YOLO9000能夠檢測未標註檢測數據的目標檢測數據集。在ImageNet檢測數據集上驗證這種方法,儘管在200類中僅僅有44類含有標註資訊,依然得到19.7的map,在COCO數據集中沒有的156類,我們得到了16.0map。

由於檢測數據集獲取標註難度較大,成本較高,通過利用已有的大量分類數據來擴大當前檢測系統的範圍。 提出的方法使用目標分類的分層視圖,因此可以將不同的數據集組合在一起。

提出一種聯合訓練的方法,同時利用目標檢測數據集與分類數據集一起進行訓練,利用檢測數據標註資訊來學習精確的定位目標,利用分類影像來增加模型魯棒性。

演算法細節介紹

YOLOv1存在大量的問題,尤其是與two-stage的方法相比,產生大量的定位錯誤,而且召回率相對較低,因此YOLO9000主要著眼於改善召回率與定位精度。

效果更好

  1. 使用batch normalization,改善模型收斂性,不再需要其他形式的正則化

  2. 採用High Resolution Classififier(高解析度分類器),一般在Imagenet影像分類任務中,模型基本上採用224×224的解析度進行訓練。使用更大的輸入影像解析度能夠有效的提升演算法的精度。

  3. Convolutional With Anchor Boxes(與錨框卷積),從YOLO中移除全連接層,並使用錨框來預測邊界框。 首先我們消除一個池化層,以使網路卷積層的輸出具有更高的解析度,輸入影像的尺寸採用416,這樣保證在需要 的特徵圖上有奇數個位置,這樣就能保證只有一個中心單元,YOLO下取樣層下降32倍得到13×13的特徵圖。

    引入錨框後,我們將類預測機制與空間位置分開處理,單獨預測每個錨框的類及其目標。 遵循原來的YOLO的做法,目標預測依然預測了真實標籤框(ground truth box)和候選框的IOU,而類別預測也是預測了當有目標存在時,該類別的條件概率。

  4. Dimension Clusters(維度聚類),如果在YOLO中使用錨框時,錨框的尺寸是手工設計挑選的,這很影響演算法的精度,與收斂效果。這裡在訓練集的邊界框上採用K-means來進行聚類,而距離度量時,如果採用歐式距離,那麼較大的框產生的誤差較大,這樣影響聚類效果,因此據類度量採用1-IOU作為距離度量。

  5. Direct location prediction(直接位置預測),當在yolo中使用錨框時,會遇到模型不穩定的問題,尤其在早期迭代的過程中,大量的不穩定主要來自於預測bbox的位置,原有的邊界框預測公式為:

yolov2_1.png

其中xa,ya,wa,ha分別為錨框的位置資訊,tx,ty是要學習的參數。由於 tx,ty 的取值沒有任何約束,因此預測邊框的中心可能出現在任何位置,訓練早期階段不容易穩定。因此在YOLOv2中作者更改了這個公式,將預測邊界框的中心約束在特定的grid cell中。

yolov2_2.png

其中, 是預測邊框的中心和寬高。 [公式] 是預測邊框的置信度,YOLO1是直接預測置信度的值,這裡對預測參數 [公式] 進行σ變換後作為置信度的值。 [公式] 是當前網格左上角到影像左上角的距離,要先將網格大小歸一化,即令一個網格的寬=1,高=1。 [公式] 是先驗框的寬和高。 σ是sigmoid函數。 [公式] 是要學習的參數,分別用於預測邊框的中心和寬高,以及置信度。

yolov2_3.png

如圖所示,tx,ty被限制在(0,1)之中,模型更容易學習,更容易穩定。

  1. Fine-Grained Features(細粒度特徵),為了解決小目標檢測比較困難,準確率較低的問題,yolov2中添加了一個passthrough層,將26x26x512的特徵,轉換為13x13x2048與最後特徵層輸出13x13x1024相疊加為13x13x3072作為最終預測的特徵層。
  2. Multi-Scale Training(多尺度訓練),yolov2的模型僅僅使用了卷積層與池化層,因此在訓練時可以實時更換輸入影像的尺度,運用多尺度及逆行模型的訓練。每10個epoch網路會隨機選擇一個輸入尺度進行訓練,每次從{320,352…, 608}(均為32的倍數,因為網路經過下取樣縮放32倍)。

速度更快

沒有採用VGG網路作為backbone,而是採用自定義的DarkNet作為backbone,精度不弱於vgg,但是浮點運算量減少到原來的1/5,速度更快。

YOLO2的訓練主要包括三個階段。

第一階段就是先在ImageNet分類數據集上預訓練Darknet-19,此時模型輸入為 224*224 ,共訓練160個epochs。

然後第二階段將網路的輸入調整為 448*448 ,繼續在ImageNet數據集上finetune分類模型,訓練10個epochs,此時分類模型的top-1準確度為76.5%,而top-5準確度為93.3%。

第三個階段就是修改Darknet-19分類模型為檢測模型,移除最後一個卷積層、global avgpooling層以及softmax層,並且新增了三個 3*3*1024卷積層,同時增加了一個passthrough層,最後使用 1*1 卷積層輸出預測結果,輸出的channels數為:num_anchors*(5+num_classes) ,和訓練採用的數據集有關係。由於anchors數為5,對於VOC數據集(20種分類對象)輸出的channels數就是125,最終的預測矩陣T的shape為 (batch_size, 13, 13, 125),可以先將其reshape為 (batch_size, 13, 13, 5, 25) ,其中 T[:, :, :, :, 0:4] 為邊界框的位置和大小 [公式] ,T[:, :, :, :, 4] 為邊界框的置信度,而 T[:, :, :, :, 5:] 為類別預測值。

更強

提出了一個聯合訓練分類和檢測數據的機制。 用檢測的影像來學習檢測演算法的特定資訊,如邊界框坐標預測和目標以及如何對常見目標進行分類。通過使用僅具有類標籤的影像來擴展其可檢測類別的數量。

在訓練的過程中,混合影像分類與檢測數據集,如果是檢測數據樣本,那麼訓練時其loss包括分類誤差與檢測定位誤差,如果是分類樣本,那麼在訓練的過程中,loss只包含分類誤差。

但是這種方法也有很多的條件,檢測數據集只有常用的目標和通用的標籤,分類數據集含有更多的標籤類別資訊。如果想要在這兩種數據集上訓練,需要整合這兩種數據集並且混合label資訊。

大多數分類方法使用涵蓋所有可能類別的softmax層來計算最終概率分布。使用softmax,意味著類是相互排斥的。這給組合數據集帶來了問題,例如,你不能用這個模型來組合ImageNet和COCO,因為類Norfolk terrier和dog不是互斥的。

相反,我們可以使用多標籤模型來組合不會互相排斥的數據集。這個方法忽略了我們所知道的關於數據的所有結構,例如所有的COCO類都是相互獨立的。

通過構建word tree來進行標籤的處理。