目標檢測之YOLO V2 V3

YOLO V2

YOLO V2是在YOLO的基礎上,融合了其餘一些網絡結構的特性(好比:Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷積核等),進行的升級。其目的是彌補YOLO的兩個缺陷:算法

  • YOLO中的大量的定位錯誤
  • 和基於區域推薦的目標檢測算法相比,YOLO的召回率(Recall)較低。

YOLO V2的目標是:在保持YOLO分類精度的同時,提升目標定位的精度以及召回率。其論文地址:
YOLO 9000:Better,Faster,Stronger網絡

YOLO論文的名稱老是如此的直抒胸臆,架構

  • Better 指的是和YOLO相比,YOLO V2有更好的精度
  • Faster 指的是修改了網絡結構,其檢測更快
  • Stronger 指的就是YOLO 9000,使用聯合訓練的方法,同時使用目標檢測和圖像分類的數據集,訓練YOLO V2,訓練出來的模型可以實時的識別多達9000種目標,因此也稱爲YOLO9000。

Better

這部分主要是改進YOLO的兩個缺點:app

  • 定位不精確
  • 召回率較低(和基於候選區域的方法相比)

YOLO V2種並無加深或者加寬網絡結構,反而簡化了網絡(faster)。函數

  • Batch Normalization
    這個是CNN網絡通用的方法了,不但可以改善網絡的收斂性,並且可以抑制過擬合,有正則化的做用。性能

  • High Resolution Classifier
    相比圖像的分類任務,目標檢測須要更高的圖像分辨率。而爲了提取圖像的特徵,目標檢測網絡的提取特徵部分,一般要在ImageNet數據集上進行預訓練。從AlexNet結構開始,大多數分類的網絡的輸入圖像都小於\(256 \times 256\),在YOLO中,使用\(224 \times 224\)的圖像進行預訓練,可是在目標檢測的網絡中使用\(448 \times 448\)的圖像進行訓練。這樣就意味着,從用於分類的特徵提取模型切換到目標檢測網絡,還須要適應這種圖像分辨率的改變。
    在YOLO V2中對此進行了改變了,使用ImageNet數據集,首先使用\(224 \times 224\)的分辨率訓練160個epochs,而後調整爲\(448 \times 448\)在訓練10個epochs。學習

Convolutional With Anchor Boxes

在YOLO中在最後網絡的全鏈接層直接預測目標邊框的座標,在YOLO V2中借鑑 Fast R-CNN中的Anchor的思想。spa

  • 去掉了YOLO網絡的全鏈接層和最後的池化層,使提取特徵的網絡可以獲得更高分辨率的特徵。
  • 使用\(416 \times 416\)代替\(448 \times 448\)做爲網絡的輸入。這是由於但願獲得的特徵圖的尺寸爲奇數。奇數大小的寬和高會使得每一個特徵圖在劃分cell的時候就只有一個center cell(好比能夠劃分紅77或99個cell,center cell只有一個,若是劃分紅88或1010的,center cell就有4個)。爲何但願只有一個center cell呢?由於大的object通常會佔據圖像的中心,因此但願用一個center cell去預測,而不是4個center cell去預測。網絡最終將416416的輸入變成1313大小的feature map輸出,也就是縮小比例爲32。(5個池化層,每一個池化層將輸入的尺寸縮小1/2)。
  • Anchor Boxes 在YOLO中,每一個grid cell只預測兩個bbox,最終只能預測98個bbox(\(7\times 7\times 2=98\)),而在Faster RCNN在輸入大小爲\(1000\times 600\)時的boxes數量大概是6000,在SSD300中boxes數量是8732。顯然增長box數量是爲了提升object的定位準確率。 過少的bbox顯然影響了YOLO的定位的精度,在YOLO V2中引入了Anchor Boxes的思想,其預測的bbox則會超過千個(以輸出的feature map爲\(13 \times 13\)爲例,每一個grid cell有9個anchor box的話,其預測的bbox數量爲\(13 \times 13 \times 9 = 1521\)個)。

Dimension Clusters

YOLO V2中引入了Faster R-CNN思想,可是讓大佬單純的使用別人的想法而不加以改進是不可能的。在Faster R-CNN中每一個Anchor box的大小以及形狀是預先設定好的,而後在網絡種經過邊框迴歸來調整每一個Anchor Box的邊框。可是,若是開始就選擇好的邊框(Faster R-CNN中的邊框是手工設計的,3種大小,3種形狀共9種),那麼網絡確定能更好的預測。
YOLO 做者使用據類的思想,對訓練集可以生成的全部Anchor box作聚類,以此來找到合適的預設的Anchor box.另外做者發現若是採用標準的k-means(即用歐式距離來衡量差別),在box的尺寸比較大的時候其偏差也更大,而咱們但願的是偏差和box的尺寸沒有太大關係。因此經過IOU定義了以下的距離函數,使得偏差和box的大小無關,故使用以下的距離度量
\[ d ( \text { box, centroid } ) = 1 - \text { IOU } ( \text { box, centroid } ) \]
也就是針對同一個grid cell,其將IOU相近的聚到一塊兒,以下圖
設計

左邊表示選擇不一樣聚類中心的\(K\)和平均IOU的關係,不一樣曲線表示兩種數據集:2007 VOC 和COCO。 YOLO V2選擇了\(K=2\),在模型的複雜度和召回率之間作個平衡。 右邊5種紫框和黑色的邊框表示兩種數據集下,最終聚類選擇的5中bbox的形狀和大小,從圖看出兩種數據集的形狀相似大小相近。圖中也能夠看出,一個的大的bbox差很少是正方形,另外3個是高瘦的形狀,最後一個則是矮胖的形狀,這和Faster R-CNN手動選擇的9種形狀仍是有所不一樣的。orm

Direct location prediction

解決了每一個Grid Cell生成的bounding box的個數問題,直接按照Faster R-CNN的方法,又遇到了第二個問題:模型不穩定,特別是在早期的迭代中,而這種不穩定是因爲預測box的位置\((x,y)\)引發的。在區域推薦的方法中,其網絡學習的結果\((tx,ty)\)bbox的中心位置相對於ground truth的中尉\((x,y)\)的平移量,如候選區域的bbox的中心爲\((x_p,y_p)\),寬和高爲\((w_p,h_p)\),則有以下的等式
\[ x = x_p + w_p * tx \\ y = y_p + h_p * ty \]
這種位置的平移是沒有任何限制的,例如,\(t_x = 1\),則將bbox在\(x\)軸向右移動\(w_p\)\(t_x = -1\)則將其向左移動\(w_p\)。也是說,無論初始的bbox在圖像的什麼位置,經過預測偏移量能夠將bbox移動到圖像的任何位置。對於YOLO V2這種隨機初始化bbox的位置,須要訓練好久的一段時間才能學習到平移量的合適的值。

基於候選區域的R-CNN 其初始的bbox並非隨機的,而是經過RPN網絡生成的。

YOLO V2中沒有使用候選區域的直接預測偏移量,而是沿用YOLO的方法,預測位置相對於當前grid cell的偏移量。YOLO V2網絡最後輸出的特徵層爲\(13 \times 13\),而後每一個cell生成5個bbox,針對每一個bbox獲得5個值\((t_x,t_y,t_w,t_h,t_o)\)\((t_x,t_y)\)表示bbox中心相對於grid cell左上角的偏移,而且將其平移量限制在一個grid cell內,使用\(sigmoid\)函數處理處理偏移值,將其限制在\((0,1)\)範圍內(每一個grid cell的尺度看作1)。因此獲得下面的公式
\[ \begin{aligned} b _ { x } & = \sigma \left( t _ { x } \right) + c _ { x } \\ b _ { y } & = \sigma \left( t _ { y } \right) + c _ { y } \\ b _ { w } & = p _ { w } e ^ { t _ { w } } \\ b _ { h } & = p _ { h } e ^ { t _ { h } } \end{aligned} \]
其中,\((C_x,C_y)\)爲當前grid cell相對於圖像的左上角的距離,以grid cell的個數爲單位。\(p_w,p_h\)爲爲先驗框的寬和高。

以下圖,

\((C_x,C_y)\)爲當前grid cell相對於圖像的左上角的距離,以grid cell爲單位,則當前cell的左上角座標爲\((1,1)\);\(p_w,p_h\)爲爲先驗框的寬和高,其值也是相對於特徵圖的大小,在特徵都中每一個cell的大小爲1。這裏記特徵圖的大小爲\((W,H)\)(YOLO V2爲\((13,13)\)),這樣就能夠將邊框相對於圖像的大小和位置計算出來
\[ \begin{aligned} b _ { x } & = (\sigma \left( t _ { x } \right) + c _ { x })/W \\ b _ { y } & = (\sigma \left( t _ { y } \right) + c _ { y })/H \\ b _ { w } & = p _ { w } e ^ { t _ { w } } / W\\ b _ { h } & = p _ { h } e ^ { t _ { h } }/H \end{aligned} \]
在將上面獲得的\(b_x,b_y,b_w,b_H\)乘以圖像的寬和高(像素爲單位)就能夠求得邊框在圖像的位置。

例如,假如預測輸出的值\((t_x,t_y,t_w,t_h) = (0.2,0.1,0.2,0.32)\);當前cell的相對於特徵圖左上角的座標爲\((1,1)\),Anchor box預設的寬和高爲\(p_w = 3.19275,p_h = 4.00944\),則有
\[ \begin{align*} b_x &= 0.2 + 1 = 1.2 \\ b_y &= 0.1 + 1 = 1.1 \\ b_w &= 3.19275 * e ^ {0.2} = 3.89963 \\ b_h &= 4.00944 * e ^ {0.32} = 5.52151 \end{align*} \]

上面的計算的距離都是相對於\(13 \times 13\)的特徵圖而言的,其單位爲grid cell的邊長。 YOLO V2輸入的圖像尺寸爲\(416 \times 416\),則每一個grid cell的邊長爲\(416 / 13 = 32\),將上述位置換算到以像素爲單位
\[ \begin{align*} b_x &= 1.2 * 32 = 38.4 \\ b_y &= 1.1 * 32 = 35.2 \\ b_w &= 3.89963 * 32 = 124.78 \\ b_h &= 5.52151 * 32 = 176.68 \end{align*} \]
這樣就獲得了一個在原圖上以\((38.4,35.2)\)爲中心,寬高爲\((124.78,176.68)\)的邊框。

Fine-Grained Features

YOLO V2是在\(13 \times 13\)的特徵圖上作檢測,這對於一些大的目標是足夠了,可是對於小目標則須要更寫細粒度的特徵。 Faser R-CNN和SSD都在不一樣層次的特徵圖上產生區域建議(SSD直接就可看得出來這一點),得到了多尺度的適應性,YOLO V2則使用了一種不一樣的方法,添加要給轉移層(passthrough layer),該層將淺層的特徵圖(\(26 \times 26\))鏈接到最終使用的深層特徵度(#13 \times 13$)。

這個轉移層有點相似ResNet的dentity mappings結構,將淺層和深層兩種不一樣尺寸的特徵鏈接起來,將\(26 \times 26 \times 512\)的特徵圖和\(13 \times 13 \times 1024\)的特徵圖鏈接起來。passthrough layer,具體來講就是特徵重排(不涉及到參數學習),\(26 \times 26 \times 512\)的特徵使用按行和按列隔行採樣的方法,就能夠獲得4個新的特徵圖,維度都是\(13 \times 13 \times 512\)的特徵,而後作concat操做,獲得\(13 \times 13 \times 2048\)的特徵圖,將其拼接到後面\(13 \times 13 \times1024\)獲得\(13 \times 13 \times 3072\)的特徵圖,至關於作了一次特徵融合,有利於檢測小目標。下圖是passthrough layer的一個實例

Multi-Scale Training

YOLO中使用\(448\times448\)做爲輸入,並且因爲使用了全鏈接層,沒法改變輸入的圖像的大小;在 YOLO V2中將全鏈接層替換爲了卷積層,也就是說只有卷積層和池化層,這樣就能夠處理任意尺寸的圖像。爲了應對不一樣尺寸的圖像,YOLO V2中在訓練的時候使用不一樣的尺寸圖像。

YOLO V2在訓練的時候每通過幾輪(每通過10epochs)迭代後就會微調網絡,隨機選擇新的圖片尺寸。YOLO網絡使用的降採樣參數爲32,那麼就使用32的倍數進行尺度\(\{320,352,\cdots,608\}\)。最終最小的尺寸爲\(320 \times 320\),最大的尺寸爲\(608 \times 608\)

Summary

YOLO V2針對YOLO定位不許確以及召回率低的問題,進行一些改變。 主要是借鑑Faster R-CNN的思想,引入了Anchor box。而且使用k-means的方法,經過聚類獲得每一個Anchor應該生成的Anchor box的的大小和形狀。爲了是提取到的特徵有更細的粒度,其網絡中借鑑ResNet的思想,將淺層的高分辨率特徵和深層的特徵進行了融合,這樣可以更好的檢測小的目標。 最後,因爲YOLO V2的網絡是全卷積網絡,可以處理任意尺寸的圖像,在訓練的時候使用不一樣尺度的圖像,以應對圖像尺寸的變換。

Faster

大多數檢測網絡有賴於VGG-16做爲特徵提取部分,VGG-16的確是一個強大而準確的分類網絡,相應的其計算量也是巨大的。 YOLO V2中使用基於GoogLeNet的網絡結構Darknet-19,在損失一些精度的狀況下,大大的提升運算速度。

Darknet-19做爲YOLO V2的特徵提取網絡,參考了一些其餘的網絡結構的經驗

  • VGG,使用了較多的\(3\times3\)卷積核,在每一次池化操做後把通道數翻倍。
  • GoogLeNet的network in network的思想,網絡使用了全局平均池化(global average pooling),把\(1\times1\)的卷積核置於\(3\times3\)的卷積核之間,用來壓縮特徵。
  • 使用batch normalization穩定模型訓練,抑制過擬合

最終得出的基礎模型就是Darknet-19,以下圖,其包含19個卷積層、5個最大值池化層(maxpooling layers ),下圖展現網絡具體結構。Darknet-19在ImageNet圖片分類top-1準確率72.9%,top-5準確率91.2%

上述的網絡結構是用於ImageNet的預訓練網絡,其輸入的是\(224\times224\)(最後幾輪調整爲\(448 \times 448\))。在ImageNet預訓練完成後,須要調整上面的網絡結構:去掉最後的卷積層,添加三個\(3 \times 3 \times 1024\)的卷積層,且在這三個卷積層的每一個後面添加\(1 \times 1\)的卷積層。 在檢測的時,輸入的是\(416 \times 416\),經過了5個池化層的降維,在最後的卷積層 輸出的特徵爲\(13 \times 13 \times 1024\)。 前面提到,爲了獲得更細粒度的特徵,添加了passthrough layer,將淺層的\(26 \times 26 \times 512\)(是輸入到最後一個池化層前的特徵)融合到最終輸出的\(13 \times 13 \times 1024\),做爲最終用於檢測的特徵\(13 \times 13 \3072\)

用於的檢測的cell有$13 \times 13 \(,每一個cell要生成的5個bbox,每一個bbox須要預測其位置和置信度\)(t_x,t_y,t_w,t_h,t_0)$以及其每一個類別的機率20個,因此最終輸出爲\(13 \times 13 \times 5 \times (5 + 20) = 13 \times 13 \times 125\).

Stroner YOLO9000

YOLO9000是在YOLOv2的基礎上提出的一種能夠檢測超過9000個類別的模型,其主要貢獻點在於提出了一種分類和檢測的聯合訓練策略。衆多周知,檢測數據集的標註要比分類數據集打標籤繁瑣的多,因此ImageNet分類數據集比VOC等檢測數據集高出幾個數量級。在YOLO中,邊界框的預測其實並不依賴於物體的標籤,因此YOLO能夠實如今分類和檢測數據集上的聯合訓練。對於檢測數據集,能夠用來學習預測物體的邊界框、置信度以及爲物體分類,而對於分類數據集能夠僅用來學習分類,可是其能夠大大擴充模型所能檢測的物體種類。

summary

YOLO V2在YOLO主要的改動就是,引入了Anchor box以及修改了其用於特徵提取的網絡,在檢測時去掉了全鏈接層,整個網絡所有使用卷積層。

YOLO V3

YOLO做者對 YOLO V2作了一些小的改動。主要如下兩個方面:

  • 使用殘差模型,構建更深的特徵提取網絡
  • 使用FPN架構(Feature Pyramid Networks for Object Detection)來實現多尺度檢測

Darkent-53

YOLO V3特徵提取網絡使用了殘差模型,相比YOLO V2使用的Darknet-19,其包含53個卷積層因此稱爲Darknet-53.其網絡結構以下圖

Darknet-53在ImageNet數據集上的性能

和ResNet相比,其速度快了不少,精度卻相差不大。

多尺度預測

採用FPN架構(Feature Pyramid Networks for Object Detection)來實現多尺度檢測,以下圖

YOLOv3採用了3個尺度的特徵圖(當輸入爲\(416 \times 416\)時):\((13\times 13),(26\times 26),(52\times 52)\),YOLOv3每一個位置使用3個先驗框,因此使用k-means獲得9個先驗框,並將其劃分到3個尺度特徵圖上,尺度更大的特徵圖使用更小的先驗框。

summary

大致學習了下YOLO系列的目標檢測,可是其中的一些細節還不是很明瞭,須要結合代碼實現了。

相關文章
相關標籤/搜索