1. 程式人生 > >深度學習物體檢測(八)——YOLO2

深度學習物體檢測(八)——YOLO2

神經網路學習過程本質就是為了學習資料分佈,一旦訓練資料與測試資料的分佈不同,那麼網路的泛化能力也大大降低;另外一方面,一旦每批訓練資料的分佈各不相同(batch 梯度下降),那麼網路就要在每次迭代都去學習適應不同的分佈,這樣將會大大降低網路的訓練速度。解決辦法之一是對資料都要做一個歸一化預處理。

YOLOv2網路通過在每一個卷積層後新增batch normalization,極大的改善了收斂速度同時減少了對其它regularization方法的依賴(捨棄了dropout優化後依然沒有過擬合),使得mAP獲得了2%的提升。類似於Resnet中的identity mappings。這個方法把26 * 26 * 512的特徵圖疊加成13 * 13 * 2048的特徵圖,與原生的深層特徵圖相連線。

高解析度預訓練分類

YOLOv2首先修改預訓練分類網路的解析度為448*448,在ImageNet資料集上訓練10 epochs。這個過程讓網路有足夠的時間調整filter去適應高解析度的輸入。然後微調為檢測網路。mAP獲得了4%的提升。

卷積層上Anchor Boxes

YOLO使用全連線層資料進行bounding box預測(要把1470*1的全連結層reshape為7*7*30的最終特徵),這會丟失較多的空間資訊定位不準。

YOLOv2借鑑了Faster R-CNN中的anchor思想: 相當於在卷積特徵圖上進行滑窗取樣,每個中心預測9種不同大小和比例的建議框。由於都是卷積不需要reshape,很好的保留的空間資訊,最終特徵圖的每個特徵點和原圖的每個cell一一對應。而且用預測相對偏移(offset)取代直接預測座標簡化了問題,方便網路學習。

總的來說就是移除全連線層(以獲得更多空間資訊)使用 anchor boxes 取預測 bounding boxes。

維度聚類

使用統計學習中的K-means聚類方法,通過對資料集中的ground true box做聚類,找到ground true box的統計規律。以聚類個數k為anchor boxs個數,以k個聚類中心box的寬高維度為anchor box的維度。

直接定位預測

使用anchor boxes的另一個問題是模型不穩定,尤其是在早期迭代的時候。

YOLO2約束了位置預測的範圍,引數就更容易學習引數,模型就更穩定。使用Dimension Clusters和Direct location prediction這兩項anchor boxes改進方法,mAP獲得了5%的提升。

細粒度特徵

修改後的網路最終在13 * 13的特徵圖上進行預測,雖然這足以勝任大尺度物體的檢測,如果用上細粒度特徵的話可能對小尺度的物體檢測有幫助。

Faser R-CNN和SSD都在不同層次的特徵圖上產生區域建議以獲得多尺度的適應性。

YOLO2使用了一種不同的方法,簡單新增一個 passthrough layer,把淺層特徵圖(解析度為26 * 26)連線到深層特徵圖。

passthroughlaye把高低解析度的特徵圖做連結,疊加相鄰特徵到不同通道(而非空間位置)

YOLOv2的檢測器使用的就是經過擴充套件後的的特徵圖,它可以使用細粒度特徵,使得模型的效能獲得了1%的提升。

多尺度訓練

原始YOLO網路使用固定的448 * 448的圖片作為輸入,加入anchor boxes後輸入變成416 * 416,由於網路只用到了卷積層和池化層,就可以進行動態調整(檢測任意大小圖片)。

在YOLO2上,不同於固定網路輸入圖片尺寸的方法,每經過10 batches訓練,就會隨機選擇新的圖片尺寸。網路使用的降取樣引數為32,於是使用32的倍數{320,352,…,608},最小的尺寸為320 * 320,最大的尺寸為608 * 608。 調整網路到相應維度然後繼續進行訓練。

這種機制使得網路可以更好地預測不同尺寸的圖片,同一個網路可以進行不同解析度的檢測任務,在小尺寸圖片上YOLO2執行更快,在速度和精度上達到了平衡。

在低解析度圖片檢測中,YOLO2是檢測速度快(計算消耗低),精度較高的檢測器。輸入為228 * 228的時候,幀率達到90FPS,mAP幾乎和Faster R-CNN的水準相同。

在高解析度圖片檢測中,VOC2007 上mAP為78.6%,而且超過實時速度要求。

YOLO2使用了一個新的分類網路作為特徵提取部分,類似於VGG,網路使用了較多的3 * 3卷積核,在每一次池化操作後把通道數翻倍。借鑑了network in network的思想,網路使用了global average pooling做預測,把1 * 1的卷積核置於3 * 3的卷積核之間,用來壓縮特徵。使用batch normalization穩定模型訓練,加速收斂,正則化模型。

最終得出的基礎模型就是Darknet-19,包含19個卷積層、5個最大值池化層。

Darknet-19處理一張照片需要55.8億次運算,imagenet的top-1準確率為72.9%,top-5準確率為91.2%。

分類訓練

使用Darknet-19在ImageNet上訓練了160次,用隨機梯度下降法。訓練的時候仍使用了很多常見的data augmentation。

初始的224 * 224訓練後把解析度上調到了448 * 448,使用同樣的引數又訓練了10次,學習率調整到了0.001。高解析度下訓練的分類網路top-1準確率76.5%,top-5準確率93.3%。

檢測訓練

為了把分類網路改成檢測網路,去掉原網路最後一個卷積層,增加了三個 3 * 3 (1024 filters)的卷積層,並且在每一個卷積層後面跟一個1 * 1的卷積層,輸出維度是檢測所需數量。

對於VOC資料集,預測5種boxes,每個box包含5個座標值和20個類別,所以總共是5 * (5+20)= 125個輸出維度。

另外也添加了passthrough layer,從最後3 * 3 * 512的卷積層連到倒數第二層,使模型有了細粒度特徵。