YOLOv2網(wǎng)絡

YOLOv2相對v1版本,在繼續(xù)保持處理速度的基礎上,從預測更準確(Better),速度更快(Faster),識別對象更多(Stronger)這三個方面進行了改進。其中識別更多對象也就是擴展到能夠檢測9000種不同對象,稱之為YOLO9000。

1、預測更準確(Better)

YOLOv1到Y(jié)OLOv2

1)batch normalization(批歸一化)

批歸一化使mAP有2.4的提升(63.4~65.8)。

批歸一化有助于解決反向傳播過程中的梯度消失和梯度爆炸問題,降低對一些超參數(shù)(比如學習率、網(wǎng)絡參數(shù)的大小范圍、激活函數(shù)的選擇)的敏感性,并且每個batch分別進行歸一化的時候,起到了一定的正則化效果(YOLO2不再使用dropout),從而能夠獲得更好的收斂速度和收斂效果。

通常,一次訓練會輸入一批樣本(batch)進入神經(jīng)網(wǎng)絡。批規(guī)一化在神經(jīng)網(wǎng)絡的每一層,在網(wǎng)絡(線性變換)輸出后和激活函數(shù)(非線性變換)之前增加一個批歸一化層(BN),BN層進行如下變換:
①對該批樣本的各特征量(對于中間層來說,就是每一個神經(jīng)元)分別進行歸一化處理,分別使每個特征的數(shù)據(jù)分布變換為均值0,方差1。從而使得每一批訓練樣本在每一層都有類似的分布。這一變換不需要引入額外的參數(shù)。
②對上一步的輸出再做一次線性變換,假設上一步的輸出為Z,則Z1=γZ + β。這里γ、β是可以訓練的參數(shù)。增加這一變換是因為上一步驟中強制改變了特征數(shù)據(jù)的分布,可能影響了原有數(shù)據(jù)的信息表達能力。增加的線性變換使其有機會恢復其原本的信息。

關于批規(guī)一化的更多信息可以參考 Batch Normalization原理與實戰(zhàn)。

2)使用高分辨率圖像微調(diào)分類模型

mAP提升了3.7(65.8~69.5)。

圖像分類的訓練樣本很多,而標注了邊框的用于訓練對象檢測的樣本相比而言就比較少了,因為標注邊框的人工成本比較高。所以對象檢測模型通常都先用圖像分類樣本訓練卷積層,提取圖像特征。但這引出的另一個問題是,圖像分類樣本的分辨率不是很高。所以YOLO v1使用ImageNet的圖像分類樣本采用 224224 作為輸入,來訓練CNN卷積層。然后在訓練對象檢測時,檢測用的圖像樣本采用更高分辨率的 448448 的圖像作為輸入。但這樣切換對模型性能有一定影響。

所以YOLO2在采用 224224 圖像進行分類模型預訓練后,再采用 448448 的高分辨率樣本對分類模型進行微調(diào)(10個epoch),使網(wǎng)絡特征逐漸適應 448448 的分辨率。然后再使用 448448 的檢測樣本進行訓練,緩解了分辨率突然切換造成的影響。

3)采用先驗框(Anchor Boxes)

召回率大幅提升到88%,同時mAP輕微下降了0.2。

借鑒Faster RCNN的做法,YOLO2也嘗試采用先驗框(anchor)。在每個grid預先設定一組不同大小和寬高比的邊框,來覆蓋整個圖像的不同位置和多種尺度,這些先驗框作為預定義的候選區(qū)在神經(jīng)網(wǎng)絡中將檢測其中是否存在對象,以及微調(diào)邊框的位置。

同時YOLO2移除了全連接層。另外去掉了一個池化層,使網(wǎng)絡卷積層輸出具有更高的分辨率。

之前YOLO1并沒有采用先驗框,并且每個grid只預測兩個bounding box,整個圖像98個。YOLO2如果每個grid采用9個先驗框,總共有13139=1521個先驗框。所以,相對YOLO1的81%的召回率,YOLO2的召回率大幅提升到88%。同時mAP有0.2%的輕微下降。

不過YOLO2接著進一步對先驗框進行了改良。

4)聚類提取先驗框尺度

聚類提取先驗框尺度,結(jié)合下面的約束預測邊框的位置,使得mAP有4.8的提升(69.6~74.4)。

之前先驗框都是手工設定的,YOLO2嘗試統(tǒng)計出更符合樣本中對象尺寸的先驗框,這樣就可以減少網(wǎng)絡微調(diào)先驗框到實際位置的難度。YOLO2的做法是對訓練集中標注的邊框進行聚類分析,以尋找盡可能匹配樣本的邊框尺寸。

聚類算法最重要的是選擇如何計算兩個邊框之間的“距離”,對于常用的歐式距離,大邊框會產(chǎn)生更大的誤差,但我們關心的是邊框的IOU。所以,YOLO2在聚類時采用以下公式來計算兩個邊框之間的“距離”:d(box, centroid) = 1-IOU(box, centroid)。

centroid是聚類時被選作中心的邊框,box就是其它邊框,d就是兩者間的“距離”。IOU越大,“距離”越近。YOLO2給出的聚類分析結(jié)果如下圖所示:

邊框聚類分析

上圖左邊是選擇不同的聚類k值情況下,得到的k個centroid邊框,計算樣本中標注的邊框與各centroid的Avg IOU。顯然,邊框數(shù)k越多,Avg IOU越大。YOLO2選擇k=5作為邊框數(shù)量與IOU的折中。對比手工選擇的先驗框,使用5個聚類框即可達到61 Avg IOU,相當于9個手工設置的先驗框60.9 Avg IOU。

上圖右邊顯示了5種聚類得到的先驗框,VOC和COCO數(shù)據(jù)集略有差異,不過都有較多的瘦高形邊框。

5)約束預測邊框的位置

借鑒于Faster RCNN的先驗框方法,在訓練的早期階段,其位置預測容易不穩(wěn)定。其位置預測公式為:

x = (t_x * w_a) + x_a, y = (t_y * h_a) + y_a,
其中,x, y是預測框的中心,x_a, y_a是先驗框(anchor)的中心點坐標,w_a, h_a是先驗框(anchor)的寬和高,t_x, t_y是要學習的參數(shù)。注意,YOLO論文中寫的是x = (t_x * w_a) - x_a,根據(jù)Faster RCNN,應該是"+"。

由于t_x, t_y的取值沒有任何約束,因此預測邊框的中心可能出現(xiàn)在任何位置,訓練早期階段不容易穩(wěn)定。YOLO調(diào)整了預測公式,將預測邊框的中心約束在特定的grid網(wǎng)格內(nèi)。

b_x = \sigma(t_x) + c_x
b_y = \sigma(t_y) + c_y
b_w = p_w e^{t_w}
b_h = p_h e^{t_h}
Pr(Object) * IOU(b, object) = \sigma(t_o)

其中,b_x, b_y, b_w, b_h是預測框的中心和寬高。Pr(object) * IOU(b, object)是預測邊框的置信度,YOLOv1是直接預測置信度的值,這里對預測參數(shù)t_o進行\sigma變換后作為置信度的值。c_x, c_y是當前網(wǎng)格左上角到圖像左上角的距離,要先將網(wǎng)格大小歸一化,即令一個網(wǎng)格的寬=1, 高=1。p_w, p_h是先驗框的框和高。\sigma是sigmoid函數(shù)。t_x, t_y, t_w, t_h, t_o是要學習的參數(shù),分別用于預測邊框的中心和寬高,以及置信度。

邊框預測

參考上圖,由于\sigma函數(shù)將t_x, t_y約束在(0,1)范圍內(nèi),所以根據(jù)上面的計算公式,預測邊框的藍色中心點被約束在藍色背景的網(wǎng)格內(nèi)。約束邊框位置使得模型更容易學習,且預測更為穩(wěn)定。

6)passthrough層檢測細粒度特征

passthrough層檢測細粒度特征使mAP提升1(74.4~75.4)。

對象檢測面臨的一個問題是圖像中對象會有大有小,輸入圖像經(jīng)過多層網(wǎng)絡提取特征,最后輸出的特征圖中(比如YOLO2中輸入416416經(jīng)過卷積網(wǎng)絡下采樣最后輸出是1313),較小的對象可能特征已經(jīng)不明顯甚至被忽略掉了。為了更好的檢測出一些比較小的對象,最后輸出的特征圖需要保留一些更細節(jié)的信息。

YOLO2引入一種稱為passthrough層的方法在特征圖中保留一些細節(jié)信息。具體來說,就是在最后一個pooling之前,特征圖的大小是2626512,將其1拆4,直接傳遞(passthrough)到pooling后(并且又經(jīng)過一組卷積)的特征圖,兩者疊加到一起作為輸出的特征圖。

passthrough

具體怎樣1拆4,如下圖所示。圖中示例的是1個44拆成4個22。因為深度不變,所以沒有畫出來。

另外,根據(jù)YOLO2的代碼,特征圖先用11卷積從 2626512 降維到 2626*64,再做1拆4并passthrough。

7)多尺度圖像訓練

多尺度圖像訓練對mAP有1.4的提升(75.4~76.8)。

因為去掉了全連接層,YOLO2可以輸入任何尺寸的圖像。因為整個網(wǎng)絡下采樣倍數(shù)是32,作者采用了{320,352,...,608}等10種輸入圖像的尺寸,這些尺寸的輸入圖像對應輸出的特征圖寬和高是{10,11,...19}。訓練時每10個batch就隨機更換一種尺寸,使網(wǎng)絡能夠適應各種大小的對象檢測。

8)高分辨率圖像的對象檢測

首圖中hi-res detector使mAP提高了1.8。因為YOLO2調(diào)整網(wǎng)絡結(jié)構后能夠支持多種尺寸的輸入圖像。通常是使用416416的輸入圖像,如果用較高分辨率的輸入圖像,比如544544,則mAP可以達到78.6,有1.8的提升。

2、速度更快

為了進一步提升速度,YOLO2提出了Darknet-19(有19個卷積層和5個MaxPooling層)網(wǎng)絡結(jié)構。DarkNet-19比VGG-16小一些,精度不弱于VGG-16,但浮點運算量減少到約1/5,以保證更快的運算速度。

Darknet-19模型

YOLO2的訓練主要包括三個階段:

  • 第一階段就是先在ImageNet分類數(shù)據(jù)集上預訓練Darknet-19,此時模型輸入為 224 * 224 ,共訓練160個epochs。
  • 第二階段將網(wǎng)絡的輸入調(diào)整為 448 * 448 ,繼續(xù)在ImageNet數(shù)據(jù)集上finetune分類模型,訓練10個epochs,此時分類模型的top-1準確度為76.5%,而top-5準確度為93.3%。
  • 第三個階段就是修改Darknet-19分類模型為檢測模型,移除最后一個卷積層、global avgpooling層以及softmax層,并且新增了三個 3 * 3 * 1024卷積層,同時增加了一個passthrough層,最后使用 1 * 1 卷積層輸出預測結(jié)果,輸出的channels數(shù)為:num_anchors * (5+num_classes) ,和訓練采用的數(shù)據(jù)集有關系。由于anchors數(shù)為5,對于VOC數(shù)據(jù)集(20種分類對象)輸出的channels數(shù)就是125,最終的預測矩陣T的shape為 (batch_size, 13, 13, 125),可以先將其reshape為 (batch_size, 13, 13, 5, 25) ,其中 T[:, :, :, :, 0:4] 為邊界框的位置和大小 (t_x, t_y, t_w, t_h),T[:, :, :, :, 4] 為邊界框的置信度,而 T[:, :, :, :, 5:] 為類別預測值。

對象檢測模型各層的結(jié)構如下:

Darknet-19檢測模型

看一下passthrough層。圖中第25層route 16,意思是來自16層的output,即26 * 26 * 512,這是passthrough層的來源(細粒度特征)。第26層1 * 1卷積降低通道數(shù),從512降低到64(這一點論文在討論passthrough的時候沒有提到),輸出26 * 26 * 64。第27層進行拆分(passthrough層)操作,1拆4分成13 * 13 * 256。第28層疊加27層和24層的輸出,得到13 * 13 * 1280。后面再經(jīng)過3 * 3卷積和1 * 1卷積,最后輸出13 * 13 * 125。

3、YOLOv2輸入到輸出

綜上所述,雖然YOLO2做出了一些改進,但總的來說網(wǎng)絡結(jié)構依然很簡單,就是一些卷積+pooling,從416 * 416 * 3 變換到 13 * 13 * 5 * 25。稍微大一點的變化是增加了batch normalization,增加了一個passthrough層,去掉了全連接層,以及采用了5個先驗框。

YOLOv2輸入到輸出

對比YOLO1的輸出張量,YOLO2的主要變化就是會輸出5個先驗框,且每個先驗框都會嘗試預測一個對象。輸出的 13 * 13 * 5 * 25 張量中,25維向量包含 20個對象的分類概率+4個邊框坐標+1個邊框置信度。

4、YOLOv2損失函數(shù)

誤差依然包括邊框位置誤差、置信度誤差、對象分類誤差。

損失函數(shù)

其中,

1_{MaxIOU < Thresh}意思是預測邊框中,與真實對象邊框IOU最大的那個,其IOU<閾值Thresh,此系數(shù)為1,即計入誤差,否則為0,不計入誤差。YOLO2使用Thresh=0.6。

1_{t < 128000}意思是前128000次迭代計入誤差。注意這里是與先驗框的誤差,而不是與真實對象邊框的誤差??赡苁菫榱嗽谟柧氃缙谑鼓P透鞂W會先預測先驗框的位置。

1_k^{truth}意思是該邊框負責預測一個真實對象(邊框內(nèi)有對象)。

YOLOv2 / YOLO9000 深入理解

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容