yolo進化史之yolov2


yolov1和當時最好的目標檢測系統相比,有很多缺點.比如和Fast R-CNN相比,定位錯誤更多.和基於區域選擇的目標檢測方法相比,recall也比較低.yolov2的目標即在保證分類准確度的情況下,盡可能地去提高recall和定位精度.

上圖是yolo嘗試了的方法.

可以看到使得檢測精度得到大幅提升的主要就是hi-res classifier和dimension priors && location prediction 

Batch Normalization

bn使得mAP提高了2%.並且可以去掉dropout而不帶來過擬合.

High Resolution Classifier

yolo可以看成2部分組成,一個是特征提取部分,這部分就是分類網絡的全連接層之前的部分. 一個是yolo做預測的部分.
YOLO訓練分為兩個階段。首先,我們訓練一個像VGG16這樣的分類器網絡。然后用卷積層替換全連接層,並對其進行端到端的再訓練,用於目標檢測。yolov1用224 * 224的圖片訓練分類器,然后用448 * 448的圖片做目標檢測。 yolov2在用224*224的圖片讀分類網絡做訓練以后,再用10個迭代,用448*448的圖片去對網絡做微調.這樣的話,卷積核的參數就可以更好地適應高分辨率的輸入,然后用448*448的圖片去做檢測網絡的訓練. 此舉提高了mAP 4%.

Convolutional With Anchor Boxes

yolov1用全連接層做box的坐標預測. 這個會造成在訓練的初始,梯度不夠穩定,因為一開始預測的尺寸對某一物體有效,可能對另一物體無效.但是現實世界里,目標的尺寸並不是隨機的,所以我們事先聚類好一些anchor box(錨或者叫先驗框),依次為基礎,去做box坐標預測.
anchor的采用讓mAP從69.5掉到了69.2,但是recall從81%上升到了88%.

Using anchor boxes we get a small decrease in accuracy.
YOLO only predicts 98 boxes per image but with anchor
boxes our model predicts more than a thousand. Without
anchor boxes our intermediate model gets 69:5 mAP with a
recall of 81%. With anchor boxes our model gets 69:2 mAP
with a recall of 88%. Even though the mAP decreases, the
increase in recall means that our model has more room to
improve.

論文里,這里讓人有點迷惑,其實這里說的anchor box是作者手工選擇的box,而不是k-means聚類出來的,采用了k-means聚類的box作為anchor box,把mAP提高了接近5%. 對應於文章開頭的圖里的dimension priors. 聚類先驗框可以參考https://www.cnblogs.com/sdu20112013/p/10937717.html

  • 去除全連接層

  • 把對class的預測從cell級別調整到針對box.
    yolov1每個cell預測出2個box,class個prob. yolov2有5個anchor box.依據每個anchor box預測出(1+4+20)個參數,所以每個cell預測出
    5*(1+4+20)=125個參數.

  • 圖像輸入尺寸由448調整到416,同時去掉一個池化層
    這樣最終得到的feature map的13*13的.

作者認為通常目標位於圖片中央,尤其是大目標,所以希望特征圖是奇數的,這樣就有某一個確定的cell去預測目標而不是用臨近的4個cell.

We do this because we want an odd number of
locations in our feature map so there is a single center cell.
Objects, especially large objects, tend to occupy the center
of the image so it’s good to have a single location right at
the center to predict these objects instead of four locations
that are all nearby

  • 去掉一個池化層使得最終輸出是 13×13 (instead of 7×7).

Direct location prediction

我們怎么計算預測的box坐標值呢?


σ(tx)函數將預測值限定到了0-1之間.這樣就保證了我們預測出來的box仍然是圍繞着當前cell的.這一點也使得網絡更穩定.

Since we constrain the location prediction the
parametrization is easier to learn, making the network
more stable. Using dimension clusters along with directly
predicting the bounding box center location improves
YOLO by almost 5% over the version with anchor boxes

Fine-Grained Features

隨着卷積不斷進行,我們最終得到一個13*13的特征圖.對大目標來說,基於這個特征圖做預測是ok的,但是對小目標來說就沒那么好了.Faster R-CNN或者SSD在不同的layer生成的特征圖上去做位置的預測,相當於不同分辨率的特征圖負責不同尺寸的目標. yolo采取了一個不同的思路,把兩個layer的feature map連成一個.稱之為passthrough,在此基礎去做預測.如下圖:

Multi-Scale Training

由於去掉了全連接層,模型的輸入可以使任意size.為了讓yolov2有更好的魯棒性,在訓練的時候,我們每10個batch就隨機改變input的size.由於模型是進行32倍下采樣的,所以我們把input size改變成320,352...608這些尺寸.


以上是yolov2提升准確率所做的改造.現在我們來看下為了更快的推理速度,yolov2都做了什么.

Googlenet

大部分檢測網絡是以VGG-16做為特征提取器的.以一個224*224的圖片為例,一次前向傳播,VGG-16有30.69 billion次浮點數運算.yolo用了一個基於googlenet的定制化的網絡,一次前向傳播只有8.52 billion次運算.相應的,代價是准確率的稍微下降.

Darknet-19

作者繼續去簡化特征提取層的網絡結構.如上圖. 注意上圖份兩部分. 最后三層(conv,avgpool,softmax)是做分類的.前面的n層是做特征提取的. 
對這個分類網絡,先在ImageNet做分類的訓練,把特征提取的網絡的參數訓練出來,先用224*224的做訓練,再用448*448的做微調.之后保持特征提取部分的網絡不變,把最后幾層替換掉,去做檢測網絡的訓練.如下圖

參考:https://arxiv.org/abs/1612.08242


免責聲明!

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



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