天天看點

YOLO v2-原理BetterFaster

論文: YOLO9000:Better,Faster,Stronger 

論文連結:https://arxiv.org/abs/1612.08242

參考:https://blog.csdn.net/u014380165/article/details/77961414

YOLO9000是CVPR2017的最佳論文提名。首先講一下這篇文章一共介紹了YOLO v2和YOLO9000兩個模型,二者略有不同。前者主要是YOLO的更新版(關于YOLO v1的介紹可以參考:YOLO v1算法詳解),後者的主要檢測網絡也是YOLO v2,同時對資料集做了融合,使得模型可以檢測9000多類物體。而提出YOLO9000的原因主要是目前檢測的資料集資料量較小,是以利用數量較大的分類資料集來幫助訓練檢測模型。

接下來基本上按照文章的順序來解讀一下算法,這樣讀起來也比較清晰。主要包括三個部分:Better,Faster,Stronger,其中前面兩部分基本上講的是YOLO v2,最後一部分講的是YOLO9000。

Better

Batch Normalization

        在所有卷積層加入批歸一化,移除dropout層

High Resolution Classifier

        首先fine-tuning的作用不言而喻,現在基本跑個classification或detection的模型都不會從随機初始化所有參數開始,是以一般都是用預訓練的網絡來finetuning自己的網絡,而且預訓練的網絡基本上都是在ImageNet資料集上跑的,一方面資料量大,另一方面訓練時間久,而且這樣的網絡都可以在相應的github上找到。 

先在分類網絡,以448x448大小輸入,疊代10個epochs,然後在檢測網絡上微調。提升4% mAP。

Convolutional with Anchor Boxes

       借鑒Faster-RCNN的思想,用anchor boxes預測bounding boxes。去掉一個池化層,增大卷積層輸出的分辨率;實際輸入減小為416而不是448,輸出特征圖大小13x13.。

雖然加入anchor使得MAP值下降了一點(69.5降到69.2),但是提高了recall(81%提高到88%)

Dimension Clusters

我們知道在Faster R-CNN中anchor box的大小和比例是按經驗設定的,然後網絡會在訓練過程中調整anchor box的尺寸。但是如果一開始就能選擇到合适尺寸的anchor box,那肯定可以幫助網絡越好地預測detection。是以作者采用k-means的方式對訓練集的bounding boxes做聚類,試圖找到合适的anchor box。

另外作者發現如果采用标準的k-means(即用歐式距離來衡量差異),在box的尺寸比較大的時候其誤差也更大,而我們希望的是誤差和box的尺寸沒有太大關系。是以通過IOU定義了如下的距離函數,使得誤差和box的大小無關:

YOLO v2-原理BetterFaster

最後選擇k=5,而且發現聚類的結果和手動設定的anchor box大小差别顯著。聚類的結果中多是高瘦的box,而矮胖的box數量較少。

Direct location prediction

作者在引入anchor box的時候遇到的第二個問題:模型不穩定,尤其是在訓練剛開始的時候。作者認為這種不穩定主要來自預測box的(x,y)值。我們知道在基于region proposal的object detection算法中,是通過預測下圖中的tx和ty來得到(x,y)值,也就是預測的是offset。

YOLO v2-原理BetterFaster
YOLO v2-原理BetterFaster

Fine-Grained Features

加了一層passthrough layer,将前一層26x26的feature map與13x13的feature map連接配接,類似于Resnet。結合了不同分辨率,mAP提升1%。

Multi-scale Training

每10個batch随機選擇一個新的輸入Size,注意這一步是在檢測資料集上fine tune時候采用的,不要跟前面在Imagenet資料集上的兩步預訓練分類模型混淆,本文細節确實很多。

Faster

Darknet-19

大多數檢測網絡依賴vgg-16,但是vgg-16太複雜了。YOLO用了Googlenet,速度快了一些但是準确率下降了2%。本文提出了darknet-19,這個網絡包含19個卷積層和5個max pooling層,而在YOLO v1中采用的GooleNet,包含24個卷積層和2個全連接配接層,是以Darknet-19整體上卷積卷積操作比YOLO v1中用的GoogleNet要少,這是計算量減少的關鍵。最後用average pooling層代替全連接配接層進行預測。這個網絡在ImageNet上取得了top-5的91.2%的準确率。

YOLO v2-原理BetterFaster

Training for Classification 

這裡的2和3部分在前面有提到,就是訓練處理的小trick。這裡的training for classification都是在ImageNet上進行預訓練,主要分兩步:1、從頭開始訓練Darknet-19,資料集是ImageNet,訓練160個epoch,輸入圖像的大小是224*224,初始學習率為0.1。另外在訓練的時候采用了标準的資料增加方式比如随機裁剪,旋轉以及色度,亮度的調整等。2、再fine-tuning 網絡,這時候采用448*448的輸入,參數的除了epoch和learning rate改變外,其他都沒變,這裡learning rate改為0.001,并訓練10個epoch。結果表明fine-tuning後的top-1準确率為76.5%,top-5準确率為93.3%,而如果按照原來的訓練方式,Darknet-19的top-1準确率是72.9%,top-5準确率為91.2%。是以可以看出第1,2兩步分别從網絡結構和訓練方式兩方面入手提高了主網絡的分類準确率。

Training for Detection 

在前面第2步之後,就開始把網絡移植到detection,并開始基于檢測的資料再進行fine-tuning。首先把最後一個卷積層去掉,然後添加3個3*3的卷積層,每個卷積層有1024個filter,而且每個後面都連接配接一個1*1的卷積層,1*1卷積的filter個數根據需要檢測的類來定。比如對于VOC資料,由于每個grid cell我們需要預測5個box,每個box有5個坐标值和20個類别值,是以每個grid cell有125個filter(與YOLOv1不同,在YOLOv1中每個grid cell有30個filter,還記得那個7*7*30的矩陣嗎,而且在YOLOv1中,類别機率是由grid cell來預測的,也就是說一個grid cell對應的兩個box的類别機率是一樣的,但是在YOLOv2中,類别機率是屬于box的,每個box對應一個類别機率,而不是由grid cell決定,是以這邊每個box對應25個預測值(5個坐标加20個類别值),而在YOLOv1中一個grid cell的兩個box的20個類别值是一樣的)。另外作者還提到将最後一個3*3*512的卷積層和倒數第二個卷積層相連。最後作者在檢測資料集上fine tune這個預訓練模型160個epoch,學習率采用0.001,并且在第60和90epoch的時候将學習率除以10,weight decay采用0.0005。

繼續閱讀