YOLOv2-darknet 內容解析


YOLOv2-darknet 內容解析

1. 改進之處

YOLO v2受到faster rcnn的啟發,引入了anchor。同時使用了K-Means方法,對anchor數量進行了討論,在精度和速度之間做出折中。並且修改了網絡結構,去掉了全連接層,改成了全卷積結構。在訓練時引入了世界樹(WordTree)結構,將檢測和分類問題做成了一個統一的框架,並且提出了一種層次性聯合訓練方法,將ImageNet分類數據集和COCO檢測數據集同時對模型訓練。

  • 使用一系列的方法對YOLO進行了改進,在保持原有速度的同時提升精度得到YOLOv2。
  • 提出了一種目標分類與檢測的聯合訓練方法,同時在COCO和ImageNet數據集中進行訓練得到YOLO9000,實現9000多種物體的實時檢測。
  • 文章主要從better,Faster,Stronger三個角度講述

2. Better

  • 使用Batch normalization

    神經網絡學習過程本質就是為了學習數據分布,一旦訓練數據與測試數據的分布不同,那么網絡的泛化能力也大大降低;另外一方面,一旦每批訓練數據的分布各不相同(batch 梯度下降),那么網絡就要在每次迭代都去學習適應不同的分布,這樣將會大大降低網絡的訓練速度。

    解決辦法之一是對數據都要做一個歸一化預處理。YOLOv2網絡通過在每一個卷積層后添加batch normalization,極大的改善了收斂速度同時減少了對其它regularization方法的依賴(舍棄了dropout(一種常用的過擬合處理方法)優化后依然沒有過擬合),使得mAP獲得了2%的提升。

  • 高分辨率

    所有state-of-the-art的檢測方法基本上都會使用ImageNet預訓練過的模型(classifier)來提取特征,例如AlexNet輸入圖片會被resize到不足256 * 256,這導致分辨率不夠高,給檢測帶來困難。所以YOLO(v1)先以分辨率224*224訓練分類網絡,然后需要增加分辨率到448*448,這樣做不僅切換為檢測算法也改變了分辨率。所以作者想能不能在預訓練的時候就把分辨率提高了,訓練的時候只是由分類算法切換為檢測算法。

    YOLOv2首先修改預訓練分類網絡的分辨率為448*448,在ImageNet數據集上訓練10輪(10 epochs)。這個過程讓網絡有足夠的時間調整filter去適應高分辨率的輸入。然后fine tune為檢測網絡。mAP獲得了4%的提升。

  • 引入anchor Box

    YOLO(v1)使用全連接層數據進行bounding box預測(要把1470*1的全鏈接層reshape為7*7*30的最終特征),這會丟失較多的空間信息定位不准。YOLOv2借鑒了Faster R-CNN中的anchor思想: 簡單理解為卷積特征圖上進行滑窗采樣,每個中心預測9種不同大小和比例的建議框。由於都是卷積不需要reshape,很好的保留的空間信息,最終特征圖的每個特征點和原圖的每個cell一一對應。而且用預測相對偏移(offset)取代直接預測坐標簡化了問題,方便網絡學習。

    具體做法:

    • 去掉最后的池化層確保輸出的卷積特征圖有更高的分辨率。

    • 縮減網絡,讓圖片輸入分辨率為416 * 416,目的是讓后面產生的卷積特征圖寬高都為奇數,這樣就可以產生一個center cell。因為作者觀察到,大物體通常占據了圖像的中間位置,可以只用一個中心的cell來預測這些物體的位置,否則就要用中間的4個cell來進行預測,這個技巧可稍稍提升效率。

    • 使用卷積層降采樣(factor 為32),使得輸入卷積網絡的416 * 416圖片最終得到13 * 13的卷積特征圖(416/32=13)。

    • 把預測類別的機制從空間位置(cell)中解耦,由anchor box同時預測類別和坐標。因為YOLO是由每個cell來負責預測類別,每個cell對應的2個bounding box 負責預測坐標(回想YOLO中 最后輸出7*7*30的特征,每個cell對應1*1*30,前10個主要是2個bounding box用來預測坐標,后20個表示該cell在假設包含物體的條件下屬於20個類別的概率,具體請參考 圖解YOLO 的圖示) 。YOLOv2中,不再讓類別的預測與每個cell(空間位置)綁定一起,而是讓全部放到anchor box中。下面是特征維度示意圖(僅作示意並非完全正確)

      img

    加入了anchor boxes后,可以預料到的結果是召回率上升,准確率下降。我們來計算一下,假設每個cell預測9個建議框,那么總共會預測13 * 13 * 9 = 1521個boxes,而之前的網絡僅僅預測7 * 7 * 2 = 98個boxes。具體數據為:沒有anchor boxes,模型recall為81%,mAP為69.5%;加入anchor boxes,模型recall為88%,mAP為69.2%。這樣看來,准確率只有小幅度的下降,而召回率則提升了7%,說明可以通過進一步的工作來加強准確率,的確有改進空間。

  • Dimension Clusters(維度聚類)

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

    如果按照標准k-means使用歐式距離函數,大boxes比小boxes產生更多error。但是,我們真正想要的是產生好的IOU得分的boxes(與box的大小無關)。因此采用了如下距離度量:

    \[d(box,centroid)=1-IOU(box,centroid) \]

  • 直接坐標預測

    使用anchor boxes的另一個問題是模型不穩定,尤其是在早期迭代的時候。大部分的不穩定現象出現在預測box的(x,y)坐標時。

    在區域建議網絡(RPN)中會預測坐標就是預測tx,ty。對應的中心點(x,y)按如下公式計算:

    \[x=(t_x\times w_a)+x_a\\ y=(t_y\times h_a)+y_a\\ \]

這個公式沒有任何限制,無論在什么位置進行預測,任何anchor boxes可以在圖像中任意一點。模型隨機初始化之后將需要很長一段時間才能穩定預測敏感的物體偏移。因此作者沒有采用這種方法,而是預測相對於grid cell的坐標位置,同時把ground truth限制在0到1之間(利用logistic激活函數約束網絡的預測值來達到此限制)。

最終,網絡在特征圖(13 *13 )的每個cell上預測5個bounding boxes,每一個bounding box預測5個坐標值:tx,ty,tw,th,to。如果這個cell距離圖像左上角的邊距為(cx,cy)以及該cell對應的box維度(bounding box prior)的長和寬分別為(pw,ph),那么對應的box為:

img

  • 細粒度特征

    修改后的網絡最終在13 * 13的特征圖上進行預測,雖然這足以勝任大尺度物體的檢測,如果用上細粒度特征的話可能對小尺度的物體檢測有幫助。Faser R-CNN和SSD都在不同層次的特征圖上產生區域建議以獲得多尺度的適應性。YOLOv2使用了一種不同的方法,簡單添加一個 passthrough layer,把淺層特征圖(分辨率為26 * 26)連接到深層特征圖。

    passthroughlaye把高低分辨率的特征圖做連結,疊加相鄰特征到不同通道(而非空間位置),類似於Resnet中的identity mappings。這個方法把26 * 26 * 512的特征圖疊加成13 * 13 * 2048的特征圖,與原生的深層特征圖相連接。

    YOLOv2的檢測器使用的就是經過擴展后的的特征圖,它可以使用細粒度特征,使得模型的性能獲得了1%的提升。

  • 多尺度訓練

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

    這種機制使得網絡可以更好地預測不同尺寸的圖片,同一個網絡可以進行不同分辨率的檢測任務,在小尺寸圖片上YOLOv2運行更快,在速度和精度上達到了平衡。

3. Faster

YOLO使用的是基於Googlenet的自定制網絡,比VGG-16更快,一次前向傳播僅需85.2億次運算,不過它的精度要略低於VGG-16。224 * 224圖片取 single-crop, top-5 accuracy,YOLO的定制網絡得到88%(VGG-16得到90%)。

Darknet-19

YOLOv2使用了一個新的分類網絡作為特征提取部分,參考了前人的工作經驗。類似於VGG,網絡使用了較多的3 * 3卷積核,在每一次池化操作后把通道數翻倍。借鑒了network in network的思想,網絡使用了全局平均池化(global average pooling)做預測,把1 * 1的卷積核置於3 * 3的卷積核之間,用來壓縮特征。使用batch normalization穩定模型訓練,加速收斂,正則化模型。

最終得出的基礎模型就是Darknet-19,包含19個卷積層、5個最大值池化層(max pooling layers )。Darknet-19處理一張照片需要55.8億次運算,imagenet的top-1准確率為72.9%,top-5准確率為91.2%。

img

Training for classification

作者使用Darknet-19在標准1000類的ImageNet上訓練了160次,用隨機梯度下降法,starting learning rate 為0.1,polynomial rate decay 為4,weight decay為0.0005 ,momentum 為0.9。訓練的時候仍然使用了很多常見的數據擴充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。(參數都是基於作者的darknet框架)

初始的224 * 224訓練后把分辨率上調到了448 * 448,使用同樣的參數又訓練了10次,學習率調整到了$$ 10^{-3} $$。高分辨率下訓練的分類網絡top-1准確率76.5%,top-5准確率93.3%。

img

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

學習策略是:先以\(10^{-3}\)的初始學習率訓練了160次,在第60次和第90次的時候學習率減為原來的十分之一。weight decay為0.0005,momentum為0.9,以及類似於Faster-RCNN和SSD的數據擴充(data augmentation)策略: random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上訓練。

4. Stronger

論文提出了一種聯合訓練的機制:使用識別數據集訓練模型識別相關部分,使用分類數據集訓練模型分類相關部分。

眾多周知,檢測數據集的標注要比分類數據集打標簽繁瑣的多,所以ImageNet分類數據集比VOC等檢測數據集高出幾個數量級。所以在YOLOv1中,邊界框的預測其實並不依賴於物體的標簽,YOLOv2實現了在分類和檢測數據集上的聯合訓練。對於檢測數據集,可以用來學習預測物體的邊界框、置信度以及為物體分類,而對於分類數據集可以僅用來學習分類,但是其可以大大擴充模型所能檢測的物體種類。

作者選擇在COCO和ImageNet數據集上進行聯合訓練,遇到的第一問題是兩者的類別並不是完全互斥的,比如"Norfolk terrier"明顯屬於"dog",所以作者提出了一種層級分類方法(Hierarchical classification),根據各個類別之間的從屬關系(根據WordNet)建立一種樹結構WordTree,結合COCO和ImageNet建立的詞樹(WordTree)

5. 總結

通過對YOLOv1網絡結構和訓練方法的改進,提出了YOLOv2/YOLO9000實時目標檢測系統。YOLOv2在YOLOv1的基礎上進行了一系列的改進,在快速的同時達到state of the art。同時,YOLOv2可以適應不同的輸入尺寸,根據需要調整檢測准確率和檢測速度(值得參考)。作者綜合了ImageNet數據集和COCO數據集,采用聯合訓練的方式訓練,使該系統可以識別超過9000種物品。除此之外,作者提出的WordTree可以綜合多種數據集的方法可以應用於其它計算機數覺任務中。但是對於重疊的分類,YOLOv2依然無法給出很好的解決方案。

reference

https://zhuanlan.zhihu.com/p/25167153

http://hellodfan.com/2017/10/11/物體檢測論文-YOLO系列/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM