轉自:https://blog.csdn.net/u014380165/article/details/77961414
YOLOV2要是YOLO的升級版(Better faster)
Better
這部分細節很多,想要詳細了解的話建議還是看源碼。
很明顯,本篇論文是YOLO作者為了改進原有的YOLO算法所寫的。YOLO有兩個缺點:一個缺點在於定位不准確,另一個缺點在於和基於region proposal的方法相比召回率較低。因此YOLOv2主要是要在這兩方面做提升。另外YOLOv2並不是通過加深或加寬網絡達到效果提升,反而是簡化了網絡。大概看一下YOLOv2的表現:YOLOv2算法在VOC 2007數據集上的表現為67 FPS時,MAP為76.8,在40FPS時,MAP為78.6.
1、Batch Normalization
BN(Batch Normalization)層簡單講就是對網絡的每一層的輸入都做了歸一化,這樣網絡就不需要每層都去學數據的分布,收斂會快點。原來的YOLO算法(采用的是GoogleNet網絡提取特征)是沒有BN層的,因此在YOLOv2中作者為每個卷積層都添加了BN層。另外由於BN可以規范模型,所以本文加入BN后就把dropout去掉了。實驗證明添加了BN層可以提高2%的mAP。
2、High Resolution Classifier
首先fine-tuning的作用不言而喻,現在基本跑個classification或detection的模型都不會從隨機初始化所有參數開始,所以一般都是用預訓練的網絡來finetuning自己的網絡,而且預訓練的網絡基本上都是在ImageNet數據集上跑的,一方面數據量大,另一方面訓練時間久,而且這樣的網絡都可以在相應的github上找到。
原來的YOLO網絡在預訓練的時候采用的是224*224的輸入(這是因為一般預訓練的分類模型都是在ImageNet數據集上進行的),然后在detection的時候采用448*448的輸入,這會導致從分類模型切換到檢測模型的時候,模型還要適應圖像分辨率的改變。而YOLOv2則將預訓練分成兩步:先用224*224的輸入從頭開始訓練網絡,大概160個epoch(表示將所有訓練數據循環跑160次),然后再將輸入調整到448*448,再訓練10個epoch。注意這兩步都是在ImageNet數據集上操作。最后再在檢測的數據集上fine-tuning,也就是detection的時候用448*448的圖像作為輸入就可以順利過渡了。作者的實驗表明這樣可以提高幾乎4%的MAP。
3、Convolutional With Anchor Boxes
原來的YOLO是利用全連接層直接預測bounding box的坐標,而YOLOv2借鑒了Faster R-CNN的思想,引入anchor。首先將原網絡的全連接層和最后一個pooling層去掉,使得最后的卷積層可以有更高分辨率的特征;然后縮減網絡,用416*416大小的輸入代替原來448*448。這樣做的原因在於希望得到的特征圖都有奇數大小的寬和高,奇數大小的寬和高會使得每個特征圖在划分cell的時候就只有一個center cell(比如可以划分成7*7或9*9個cell,center cell只有一個,如果划分成8*8或10*10的,center cell就有4個)。為什么希望只有一個center cell呢?因為大的object一般會占據圖像的中心,所以希望用一個center cell去預測,而不是4個center cell去預測。網絡最終將416*416的輸入變成13*13大小的feature map輸出,也就是縮小比例為32。
我們知道原來的YOLO算法將輸入圖像分成7*7的網格,每個網格預測兩個bounding box,因此一共只有98個box,但是在YOLOv2通過引入anchor boxes,預測的box數量超過了1千(以輸出feature map大小為13*13為例,每個grid cell有9個anchor box的話,一共就是13*13*9=1521個,當然由后面第4點可知,最終每個grid cell選擇5個anchor box)。順便提一下在Faster RCNN在輸入大小為1000*600時的boxes數量大概是6000,在SSD300中boxes數量是8732。顯然增加box數量是為了提高object的定位准確率。
作者的實驗證明:雖然加入anchor使得MAP值下降了一點(69.5降到69.2),但是提高了recall(81%提高到88%)。
4、Dimension Clusters
我們知道在Faster R-CNN中anchor box的大小和比例是按經驗設定的,然后網絡會在訓練過程中調整anchor box的尺寸。但是如果一開始就能選擇到合適尺寸的anchor box,那肯定可以幫助網絡越好地預測detection。所以作者采用k-means的方式對訓練集的bounding boxes做聚類,試圖找到合適的anchor box。
另外作者發現如果采用標准的k-means(即用歐式距離來衡量差異),在box的尺寸比較大的時候其誤差也更大,而我們希望的是誤差和box的尺寸沒有太大關系。所以通過IOU定義了如下的距離函數,使得誤差和box的大小無關:
如下圖Figure2,左邊是聚類的簇個數核IOU的關系,兩條曲線分別代表兩個不同的數據集。在分析了聚類的結果並平衡了模型復雜度與recall值,作者選擇了K=5,這也就是Figure2中右邊的示意圖是選出來的5個box的大小,這里紫色和黑色也是分別表示兩個不同的數據集,可以看出其基本形狀是類似的。而且發現聚類的結果和手動設置的anchor box大小差別顯著。聚類的結果中多是高瘦的box,而矮胖的box數量較少。
Table1中作者采用的5種anchor(Cluster IOU)的Avg IOU是61,而采用9種Anchor Boxes的Faster RCNN的Avg IOU是60.9,也就是說本文僅選取5種box就能達到Faster RCNN的9中box的效果。
5、Direct Location prediction
作者在引入anchor box的時候遇到的第二個問題:模型不穩定,尤其是在訓練剛開始的時候。作者認為這種不穩定主要來自預測box的(x,y)值。我們知道在基於region proposal的object detection算法中,是通過預測下圖中的tx和ty來得到(x,y)值,也就是預測的是offset。另外關於文中的這個公式,個人認為應該把后面的減號改成加號,這樣才能符合公式下面的example。這里xa和ya是anchor的坐標,wa和ha是anchor的size,x和y是坐標的預測值,tx和ty是偏移量。文中還特地舉了一個例子:A prediction of tx = 1 would shift the box to the right by the width of the anchor box, a prediction of tx = -1 would shift it to the left by the same amount.
這里貼一下Faster R-CNN里面的公式,和上面這個公式將減號變成加號是一致的。
在這里作者並沒有采用直接預測offset的方法,還是沿用了YOLO算法中直接預測相對於grid cell的坐標位置的方式。
前面提到網絡在最后一個卷積層輸出13*13大小的feature map,然后每個cell預測5個bounding box,然后每個bounding box預測5個值:tx,ty,tw,th和to(這里的to類似YOLOv1中的confidence)。看下圖,tx和ty經過sigmoid函數處理后范圍在0到1之間,這樣的歸一化處理也使得模型訓練更加穩定;cx和cy表示一個cell和圖像左上角的橫縱距離;pw和ph表示bounding box的寬高,這樣bx和by就是cx和cy這個cell附近的anchor來預測tx和ty得到的結果。
如果對上面的公式不理解,可以看Figure3,首先是cx和cy,表示grid cell與圖像左上角的橫縱坐標距離,黑色虛線框是bounding box,藍色矩形框就是預測的結果。
6、Fine-Grained Features
這里主要是添加了一個層:passthrough layer。這個層的作用就是將前面一層的26*26的feature map和本層的13*13的feature map進行連接,有點像ResNet。這樣做的原因在於雖然13*13的feature map對於預測大的object以及足夠了,但是對於預測小的object就不一定有效。也容易理解,越小的object,經過層層卷積和pooling,可能到最后都不見了,所以通過合並前一層的size大一點的feature map,可以有效檢測小的object。
7、Multi-Scale Training
為了讓YOLOv2模型更加robust,作者引入了Muinti-Scale Training,簡單講就是在訓練時輸入圖像的size是動態變化的,注意這一步是在檢測數據集上fine tune時候采用的,不要跟前面在Imagenet數據集上的兩步預訓練分類模型混淆,本文細節確實很多。具體來講,在訓練網絡時,每訓練10個batch(文中是10個batch,個人認為會不會是筆誤,不應該是10個epoch?),網絡就會隨機選擇另一種size的輸入。那么輸入圖像的size的變化范圍要怎么定呢?前面我們知道本文網絡本來的輸入是416*416,最后會輸出13*13的feature map,也就是說downsample的factor是32,因此作者采用32的倍數作為輸入的size,具體來講文中作者采用從{320,352,…,608}的輸入尺寸。
這種網絡訓練方式使得相同網絡可以對不同分辨率的圖像做detection。雖然在輸入size較大時,訓練速度較慢,但同時在輸入size較小時,訓練速度較快,而multi-scale training又可以提高准確率,因此算是准確率和速度都取得一個不錯的平衡。
Table3就是在檢測時,不同輸入size情況下的YOLOv2和其他object detection算法的對比。可以看出通過multi-scale training的檢測模型,在測試的時候,輸入圖像在尺寸變化范圍較大的情況下也能取得mAP和FPS的平衡。不過同時也可以看出SSD算法的表現也十分搶眼。
總的看下這些技巧對mAP的貢獻:
High Resolution Classifier的提升非常明顯(近4%),另外通過結合dimension prior+localtion prediction這兩種方式引入anchor也能帶來近5%mAP的提升。
Faster
在YOLO v1中,作者采用的訓練網絡是基於GooleNet,這里作者將GooleNet和VGG16做了簡單的對比,GooleNet在計算復雜度上要優於VGG16(8.25 billion operation VS 30.69 billion operation),但是前者在ImageNet上的top-5准確率要稍低於后者(88% VS 90%)。而在YOLO v2中,作者采用了新的分類模型作為基礎網絡,那就是Darknet-19。
1、Darknet-19
Table6是最后的網絡結構:Darknet-19只需要5.58 billion operation。這個網絡包含19個卷積層和5個max pooling層,而在YOLO v1中采用的GooleNet,包含24個卷積層和2個全連接層,因此Darknet-19整體上卷積卷積操作比YOLO v1中用的GoogleNet要少,這是計算量減少的關鍵。最后用average pooling層代替全連接層進行預測。這個網絡在ImageNet上取得了top-5的91.2%的准確率。
2、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兩步分別從網絡結構和訓練方式兩方面入手提高了主網絡的分類准確率。
3、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。
轉自
---------------------
作者:AI之路
來源:CSDN
原文:https://blog.csdn.net/u014380165/article/details/77961414