目標檢測學習之路——YOLOv2

                                            YOLOv2

YOLOv2相對於V1的改進主要有兩方面:1、使用一系列策略對YOLOv1的網絡結構進行了修改,在保證檢測速度的同時提升了模型的檢測準確率;2、提出了一種聯合訓練策略,使用ImageNet與COCO聯合訓練得到YOLO9000模型,可以實現9000類物體的目標檢測。本文將從這兩個改進策略對YOLOv2模型進行介紹。

個人覺得改進2(聯合訓練方法)的意義更大,這種訓練方法可以遷移到其它檢測模型,使檢測模型可以檢測到更多更詳細的目標種類信息。

論文地址:https://arxiv.org/pdf/1612.08242.pdf

網絡結構層面的改進

1、BN層的引入(BatchNormalization)

YOLOv2網絡模型通過在每一個卷積層後添加BN層,極大的改善了網絡模型訓練時到的收斂速度同時減少了模型對其它正則化方法的依賴(捨棄了dropout優化後依然沒有過擬合),使得mAP獲得了2%的提升。

2、適用高分辨率圖像的分類器(High Resolution Classifier)

YOLOv1模型時使用ImageNet數據集以224×224的分辨率來預訓練了分類模型,之後在分類模型的基礎上改進爲檢測模型,基於分類模型已有的權重來初始化檢測模型的權重,最終使用448×448分辨率的圖像來訓練檢測模型。因此,在模型遷移後進行檢測模型訓練時,模型不僅需要來學習檢測任務,而且需要有一個適應高分辨率圖像輸入的學習過程。YOLOv2解決了這個問題,YOLOv2使用ImageNet數據集預訓練分類模型時,直接使用448×448分辨率的圖像作爲模型的輸入(在ImageNet上共計訓練了10個epoch),從而避免了模型遷移時分辨率變化的這一現象。

3、引入了Anchor Boxes用於目標檢測(Convolutional With Anchor Boxes)

YOLOV1模型的最後使用了全連接層,這也就導致YOLOV1只能接受固定大小圖像的輸入。其次,在YOLOv1中,輸入圖像最終被劃分爲7×7的網格,每個單元格預測2個bounding box,並且最終取置信度最大的那個bounding box作爲單元格的預測結果。這也就意味着YOLOV1模型最多隻能預測出49個bounding box,也因此YOLOV1對小目標的檢測不太友好。因此YOLOv2借鑑了faster rcnn所採用的的RPN策略(即採用anchor box來預測檢測結果)。

因此YOLOv2移除了全連接層,這樣可以保證模型可以接受不同分辨率圖像的輸入(這裏輸入圖像的分辨率也是有限制的,因爲YOLOV2模型總體的下采樣係數爲32,因此輸入圖像的分辨率必須是32的倍數)。作者實驗證明,圖像中大目標更傾向於出現在圖像的中心,作者期望模型輸出的特徵圖中有一箇中心點來專門預測這些大目標,因此網絡輸出的特徵圖尺寸應該爲奇數(奇數尺寸才能擁有一個絕對的中心點)。論文中檢測模型輸入圖像的分辨率爲416×416,網絡最後一層輸出的特徵圖尺寸爲13×13。

YOLOv2爲每個anchor box預測所屬的類別以及bounding box中含有目標的分數,因此YOLOv2可以預測出13×13×5=845個bounding box。

4、採用聚類的方法生成Anchor Boxes(Dimension Clusters)

在Faster R-CNN和SSD中,Anchor Box(長和寬)都是人爲手動設定的。如果選取的Anchor Box比較適用於當前數據集,則模型更容易學習和收斂,從而得到更好的預測結果。因此,YOLOv2採用k-means聚類方法對訓練集中的bounding box進行了聚類分析,從而獲取更適合當前數據集的Anchor Box。因爲Anchor Box的選定是爲了使模型預測的bounding box更接近ground truth ,因此在進行k-means聚類時距離指標採用聚類中心(bounding box)與ground truth的IOU值:

個人理解:進行k-means時的ground truth(圖像真實的bounding box)沒有使用位置信息只使用了W和H信息(即:bounding box的寬和高),因此得到的中心點也只有W和H信息(即:Anchor box)。注意,作者在進行k-means時使用的ground truth的width和height不是以像素爲單位的(這也可以理解,COCO或VOC數據集中圖像的尺寸是不同的),應該是相對於模型最終輸出的feature map的尺寸(13×13)。

個人理解:參與k-means計算的ground truth的width和height計算方式,這裏以模型最後輸出的特徵圖尺寸爲13×13爲例:

width=width_{origin}*\frac{13}{width_{image}}

height=height_{origin}*\frac{13}{height_{image}}

width_{origin}:ground truth的width(以像素爲單位)

height_{origin}:ground truth的height(以像素爲單位)

width_{image}:圖像的width(相對於13×13feature map的尺寸)

height_{image}:圖像的height(相對於13×13feature map的尺寸)

5、直接位置預測(Direct location prediction)

RPN基於Anchor Box計算bounding box的中心(x,y)的方式如下所示(個人理解:作者在論文中所寫的公式是錯誤的,應該是“+”而不是“-”):

 \left ( x \right ,y):bounding box的實際中心位置

\left ( t_{x} \right ,t_{y}):座標偏移值

\left ( w_{a} \right ,h_{a}):Anchor box的width和height

\left ( x_{a} \right ,y_{a}):feature map每個位置的中心點

由於公式沒有任何約束(預測的bounding box可以向任何方向偏移,且可以偏移任意大小的偏移量),如當t_{x}=1時bounding box將向右偏移一個Anchor Box的width,如當t_{x}=-1時bounding box將向左偏移一個Anchor Box的width,因此feature map中每個位置預測出的bounding box中心點可以落在圖像的任意位置,這導致模型的前期訓練十分不穩定,需要很多次迭代才能獲取到一個穩定的模型。所以,YOLOv2棄用了這種計算方式,沿用YOLOv1的方法,就是預測bounding box中心點相對於對應cell左上角位置的相對偏移值,爲了將邊界框中心點約束在當前cell中,使用sigmoid函數處理偏移值,這樣預測的偏移值在(0,1)範圍內(每個cell的尺度爲1)。

模型爲每個cell預測5個bounding box(因爲有5個Anchor box),每個bounding box預測5個座標值t_{x},t_{y},t_{w},t_{h},t_{o},關係圖如下所示:

個人理解這幅圖是模型最終輸出的尺寸爲13×13的feature map,共有169個cell。\left ( c_{x} \right ,c_{y})爲cell的左上角座標,每個cell的width和height均爲1(每個cell的左上角座標爲\left (0 \leq c_{x}\leq 12 \right ,0\leq c_{y}\leq 12),且c_{x} ,c_{y}爲整數),上圖中當前cell的座標爲(1,1),對於每個cell而言\left ( c_{x} \right ,c_{y})是固定不變的;p_{w}p_{h}爲Anchor Box的寬和高,4中說過它們是相對於feature map的大小。

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}}

P_{r}\left ( object \right )*IOU\left ( b \right,object )=\sigma \left ( t_{o} \right )

6、細粒度特徵(Fine-Grained Features

YOLOv2模型最終是對一個13×13的feature map進行卷積運算做檢測結果預測的.13×13的feature map對於檢測圖像中大尺寸物體來說是足夠了,但是對於小物體需要更精細的特徵圖。YOLOv2提出了passthrough層來獲取更精細的feature map,精細feature map的分辨率爲26×26(網絡結構中最後一個maxpooling層的輸入,Darknet-19中精細feature map尺寸爲26×26×512)。26×26×512的feature map經過passthrough層變成13×13×2048的feature map,將passthrough層得到的特徵圖與後面13×13×1024的feature map進行拼接,得到一個13×13×3072的feature map,然後在此feature map上進行卷積運算得到檢測結果。

passthrough layer:本質其實就是特徵重排,26×26×512的feature map分別按行和列隔點採樣,可以得到4幅13×13×512的特徵,把這4張特徵按channel串聯起來,就是最後的13×13×2048的feature map.還有就是,passthrough layer本身是不學習參數的,直接用前面的層的特徵重排後拼接到後面的層,越在網絡前面的層,感受野越小,有利於小目標的檢測。

 

6、多尺度輸入訓練(Multi-Scale Training

        YOLOv2模型中沒有全連接層,所以YOLOv2的輸入可以不限於416×416分辨率的圖像。爲了使訓練出的模型具有更強的魯棒性,YOLOv2採用了多尺度輸入訓練策略,具體做法就是在訓練過程中每10個Batch隨機改變一次模型輸入圖像的分辨率,YOLOv2的下采樣係數是32,所以輸入圖像的分辨率需要是32的倍數:{320,352,……,608},輸入圖像的分辨率最小爲320×320,最大爲608×608。

        這一策略可以使YOLOv2模型適應不同分辨率的圖像作爲輸入,並且在在不同分辨率的情況下均能取得較好的預測結果。在VOC2007數據集上的結果證明,採用較小分辨率作爲模型的輸入時,模型的性能會有所下降,但是模型的效率更高;相反採用高分辨率圖像作爲模型的輸入時,模型的性能會更好,但模型的效率會有所下降。也就是當輸入圖像分辨率較小時模型的效率更高,輸入圖像分辨率較大時模型的精確度更高,所以需要再效率和精度上進行權衡。

7、Darknet19

Darknet19與VGG模型的結構相似,有 19 個卷積層(卷積核尺寸爲3×3)和 5 個 maxpooling 層(池化核爲2×2,每次池化操作後特徵圖維度降低2倍,而同時將特徵圖的channles增加兩倍)。Darknet-19最後一個池化層採用global avgpooling,並且在3×3的卷積之層間使用1×1的卷積來壓縮特徵圖channles以降低模型計算量和參數。Darknet-19每個卷積層後面同樣使用了batch norm層以加快收斂速度,避免模型過擬合。

8、YOLOv2模型的訓練

        YOLOv2模型的訓練主要分爲3個階段。第一階段:基於ImageNet數據集訓練Darknet-19,網絡模型輸入的圖像分辨率爲224×224,訓練160個epoch;第二階段:基於ImageNet數據集finetune Darknet-19,此時網絡模型輸入的圖像分辨率爲448×448,訓練10個epoch;第三階段:首先將Darknet-19由分類網絡修改爲目標檢測網絡(移除Darknet-19的後三層,即最後一個卷積層、Global Avgpooling層以及softmax層,取而代之的是連續3個卷積核爲3×3的卷積層+passthrough層+1個卷積核爲1×1的卷積層),使用第二階訓練得到的weights來初始化檢測模型的權重,使用目標檢測數據集(COCO、VOC)來finetune檢測模型。

個人理解:至此,YOLOv2就已經完事了,作者在模型結構上的改進就已經完事了。接下來介紹作者提出的一種模型訓練方法,即YOLO9000。

        YOLO9000是在YOLOv2模型的基礎上提出了一種分類和檢測的聯合訓練策略,使YOLOv2可以檢測到9000類物體。YOLOv2實現在分類和檢測數據集上的聯合訓練,當網絡模型輸入的圖像來自檢測數據集,對於這類數據使用完整的YOLOv2 loss來進行反向傳播,當模型輸入的圖像來自分類數據集,則只計算整個YOLOv2 loss計算結構中分類部分的loss來進行反向傳播。

       作者在COCO檢測數據集和ImageNet分類數據集上進行聯合訓練,但是遇到的第一個問題是兩者的類別並不是完全互斥的,比如:“哈士奇”、“牛頭梗”、“金毛”這些分類明顯屬於“狗”這一類,所以作者提出了層級分類方法(Hierarchical classification),在ImageNet數據集WordNet的基礎上結合COCO數據集進行了進一步優化,建立了一種樹結構WordTree,構建的WordTree如下所示:

preview

    傳統用於分類的模型,最後一層往往是Softmax Layer,softmax往往處理的是類別之間是相互獨立的標籤,但是現實場景中許多類別並不是互斥的,盲目地混合數據集進行訓練是不合理的。作者採用了softmax+WordTree的方法,不再是對所有類別使用一個大softmax進行分類,而只需對同一概念下的同義詞進行softmax分類。

       爲了計算某一結點的絕對概率,只需要對這一結點到根節點的整條路徑的所有概率進行相乘。比如你想知道一個圖片是否是 Norfolk terrier 的概率,則進行如下計算:

        個人理解:YOLO9000的訓練策略比YOLOv2的網絡模型意義更大,訓練策略可以適用任何檢測模型永遠不會過時,縱使出現超越YOLOv2的模型,同樣可以採用這種策略。以上是自己閱讀YOLOv2論文的一些體會,可惜的是沒有找到YOLOv2的損失函數,估計需要看一下大佬的代碼了,如果有什麼理解錯誤的希望指出。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章