《二、YOLOV2細節原理全解析》


 

《一、YOLOV1細節原理全解析》 

《二、YOLOV2細節原理全解析》 

《三、YOLOV3細節原理全解析》

 如下圖,yolov2相對yolov1的改進點:

 

 

 

 2.1 Batch-Normalization 歸一化

  在神經網絡中,在全連接層中使用dropout能以降低過擬合風險,YOLOV2中舍棄了dropout。V2中沒有全連接層,所有層都是一個卷積,每次卷積之后都加一個BN,即:每一層后面做一個歸一化處理(使得mean=0,sigma比較小),這樣做的好處是:容易收斂。舍棄dropout,改用BN,YOLOV2最終mAp提升了2.4%,如上圖所示。站在今天的角度,BN已經成為網絡必備處理。(V4中dropout改為了bropblock)

2.2 high-resolution classifier更高分辨率的分類器

V1訓練時使用的是224*224(可能由於當時計算機性能有限,YOLO的出發點就是快),測試時使用的448*448。

V1中訓練與推理時使用不同分辨率,可能導致“水土不服”。訓練過程中,V2在V1的基礎上額外加了10個epoch,進行448*448的微調,這種操作使得mAp提升了3.7%,如上圖。

2.3 convolutional提出darknet

DarkNet≈VGG+ResNet

1)   DarkNet實際輸入為416*416

2)   DarkNet沒有FC層,5次降采樣,(13*13)(FC層易過擬合;並且參數多導致訓練慢)

3)   1*1卷積能夠節省很多參數,可以調研下原理

為什么V2選擇刪除FC層?

如下圖V1的網絡,紅色框標注的是V1的FC層,它將7×7×1024的tensor變為7×7×30的tensor;注意到FC層中間數量優點恐怖;於是:V2采用卷積來代替V1中的FC層,一次性解決問題,參數大大減少

 

五次降采樣:type列如下圖(下面圖有點錯誤,不影響說明問題哈)5個MaxPool降采樣操作,每次降采樣,featureMap的size為原來一半,所以五次就是縮小2^5=32倍,這樣原圖的輸入尺寸必須被32整除。(輸入416×416 = 32 * (輸出13×13))

  上圖中,所有的卷積操作的卷積核size=3×3 or 1×1,其中3×3是借鑒VGG網絡思想,認為小的卷積核(3×3)有參數少、感受野大的優點。

  作者稱上圖為DarkNet-19,有19個卷積層;其中1×1卷積核僅僅改變網絡特征圖數量。觀察上圖Filters列,5次Maxpool之后,特征圖數量翻倍(為什么翻倍?可參考Inception中1×1卷積的對FeatureMap的channel維度的升維、降維[1]),並且每次Maxpool之后都是多次卷積操作(特征濃縮),這些卷積中間夾雜着1×1的卷積核(而不全是3×3卷積),好處是:相對於3×3卷積,1×1卷積參數數量少,並對整體網絡性能沒有太大影響。

2.4 anchor boxes 先驗框

  V1中指定每個cell中指定B=2個框,Faster-RCNN系列選者了9中先驗框(三種分辨率的圖中對應三種比例的框,比例為:1:2,2:1,1:1,分辨率越高,框越大),其長寬比例都是常規的,不一定適應於真實數據。

 

  V2借鑒於此,進行改進;例如將coco數據集中所有目標對應框進行KMeans聚類(K=5),讓算法自動生成目標框比例,而不是給出固定的比例,這樣能夠更加貼近客觀情況。V2中聚類的時候,不是用的歐氏距離來定義差異(即:

((w1-w2)^2+(h1–h2)^2)^0.5)

  而是用下式表示“距離”:

 

 

   如果用上述歐氏距離公式,那么對於同一類目標,大物體和小物體將會和“幾何中心”距離差異大,分在聚類不同類別。

  

  如下圖,作者進行了相關實驗,隨着聚類類別數量的增加,平均IOU值也會增加,類別間差異變化越來越慢;通俗講:類別越多,IOU平均值越大(這是我們希望看到的,初始IOU越大,越有利於優化,網絡更快收斂),收益越大;但是,隨着聚類類別越多,IOU增長變慢,並且先驗框也不可能無限增長下去,於是作者取了個折中,令K=5(取5也應該經過了嚴格測試)。

 

 

  所以在V2中,一個cell中對應B=5個先驗框。如下圖是聚類結果:

 

  V2相對於V1先驗框多了3個,但是mAP降了一點點。因為先驗框多了,能夠得到的候選目標也多了,錯誤發生的可能性也變大,但rcall卻極大地提升。通俗講:先驗框多了,能夠召回更多目標,准確率幾乎不變 。

 

 

 

 

2.5 Directed Location Prediction直接預測cell局部框

  V1 中,先給出框的先驗證值(xp yp wp hp),則有:

x = xp + pw*tx;   y = yp + ph*ty;

  上述式子中,x y tx ty都是待優化的變量,其中tx、ty表示框的偏移;在V1中先驗框的初值給得不一定就很恰當,同時優化過程中,tx、ty也有跑偏的情況,導致最終框偏移目標太大,就是:跑偏了。

  V2版本中,改進了上述缺陷,將上述tx ty相對中心點的偏移量修改為相對cell的偏移量,這樣最終的檢測框一定對包含cell。如下圖,黑色虛線為先驗框,藍色實線為預測框。對於預測框的中心點(bx,by),我們定義目標函數為:

bx = sigma(tx)+cx

by = sigma(ty)+cy

  其中sigma表示sigmod函數,可以將tx變化范圍限制為(0,1),這樣中心的預測永遠不會超出如圖cell,cx、cy為當前cell左上角在原圖的偏移坐標。對於預測框的寬、高(bw,bh),V2通過聚類給出先驗值(pw、ph),計算公式也很簡單,如下圖。

 

 2.6 感受野

  什么是感受野?對於輸入一張圖,我們做卷積、MaxPool等操作,特征圖的size會越來越小,如下圖最終特征圖的一個單位u是由原圖較大的一塊區域(記為:r)經過“濃縮抽象”得到,那么區域r就是單位u的感受野。

 

 

在CV中,大的感受野關注大的目標,例如:DL中常有如下處理:

輸入圖像->conv1->conv2->conv3

conv1:關注紋理、色彩、線條等淺層特征;

conv2:關注高級特征

conv3:關注全局特征

為什么卷積過程中都是3×3,而不是5×5,甚至更大?

如下圖:原圖是5×5×1,經過2次conv得到最終特征圖。同理,現在假定input原圖為7×7×1,得到如下圖最右邊的最終特征圖,我們有兩種方式:

方法一:經過3次3×3卷積處理;

方法二:經過1次7×7卷積處理。 

 

 

假定上述input原圖size為:h×w×c,現在采用c個卷積核(得到c個特征圖),上述方法一需要參數個數為:

3×c×(3×3×c)=27×c×c

(第一個3:卷積次數,注:現在卷積是立體空間操作,不是平面,且c個通道都是立體卷積)

上述方法二需要參數個數為:

1×c×(7×7×c)=49×c×c

顯然,方法一參數要少。

3×3卷積好處:

1、節省參數

2、卷積次數多,特征提取也會越細致,加入的非線性變換也越多;這是VGG網絡的思想:用小的卷積核完成體特征提取操作。

2.7 Fine-Grained Features特征圖優化

  上一節講述了感受野,神經網絡最后一層感受野太大,也即:對應着原圖的大目標,小目標信息丟失,這時候需要融合之前的特征。我們說最后一層感受野很大,越往前,之前特征圖對應感受野越小, 所以想要檢測小目標,就要融合中間特征圖的信息。

  如下圖,pooling+conv之后,得到13*13*1024的最終特征圖;同時將其前一層特征圖進行拆分,拆分為4個13*13*512的特征圖和上述13*13*1024的特征都堆疊在一起,得到13*13*3072的特征圖,其中3072 = 4*512 + 1024。

 

 2.8 Muti-Scale training

  在V2的darknet中沒有FC層,只有卷積層,所以對輸入圖像分辨率無限制(分辨率寬高必須是32倍數,原因是5次降采樣),V2中,訓練迭代過程中,會改變圖像size,如下圖三種分辨率,能夠提升網絡模型對尺度的適應性(尺度:距離近,目標大;距離遠,目標小)。mAp值能夠提升1.6%。

 

 refence:

https://www.zhihu.com/question/56024942

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

 


免責聲明!

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



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