【CV經典模型-Detection】YOLO v2

basic idea:

yolo最大的問題有兩個:一個是recall較低,另外一個是localization不準確。與一般的增加網絡複雜度和深度的思路不同,yolo v2 希望能保持yolo網絡處理速度快的優勢。因此,v2在不擴大網絡的基礎上,使用了一些技巧來使模型更容易學到有用的features。
接下來從模型的最終效果,處理速度和訓練方法三方面來總結一下yolo v2使用到的算法和技巧。

Performance(better):

Batch Normalization

BN 可以使每層layer的輸入在訓練過程中保持分佈一致,避免了隨着batch不同,輸入分佈隨之改變,而加大神經元的學習難度。在yolo v2上,這體現於加了BN之後,模型收斂更快。並且BN 也可以看作是在神經元之間引入了額外的依賴性或者說限制,迫使模型更簡單,也可能部分代替正則化和drop out的工作。

High resolution detection

和很多其他的CV模型一樣,yolo也使用了開源數據集做transfer learning。和之前不同的是,v2使用了和後續detection數據集相同的高分辨率的圖片做預訓練,使模型不用調整參數以適應新的分辨率,略微減輕了task的難度。

Anchor box with prior: k-means for box dims

yolo之前是不限制預測的bounding box的比例和大小的,唯一的先驗信息是bounding box的中心落在對應的grid cell中。這使得預測的自由度太高,而所獲的信息又太少。對於訓練集中較少出現的大小和比例的bounding box,預測起來便更加困難。
因此v2借鑑了Region CNN的思想,引入了先驗知識,爲每個grid cell規定了k個(文獻中k=5)比例和尺寸固定的anchor box。預測時並不直接預測box的起始位置和寬高,而是預測起始位置相對於grid cell位置的偏移和寬高的縮放係數。這一操作引入了先驗知識,減小了task的難度。在使用了這個方法之後,模型的recall有明顯的提升。
當然,要正真發揮Anchor box的作用,每個Anchor box的尺寸和比例需要仔細設計。文中使用了k-means聚類算法來產生5個cluster,把每個cluster的平均比例尺寸作爲一個Anchor box。值得一提的是,爲了和之後的detection配合,聚類使用的距離metric是1IOUclusteri,ground truthj1- IOU_{cluster_i,ground\ truth_j}

Predict offset to each grid cell(5 d)

具體來說,模型在每個grid cell上會預測5個bounding box,並且與之前不同,每個bounding box都有自己的objectness和conditional class probability,這樣一來同一cell的bounding box之間便不會相互影響。
每個bounding box會對應5個輸出:tx,ty,tw,th,t0t_x,t_y,t_w,t_h,t_0
最後需要的bounding box的中心位置bxby(b_x,b_y),寬高bwbh(b_w,b_h),以及它包含每類物體的概率Pr(ObjectclassiObject)IOU(Object,b)Pr(Object\in class_i|Object) * IOU(Object, b)可以由如下公式算得:

bx=σ(tx)+cxb_x=\sigma(t_x)+c_x
by=σ(ty)+cyb_y=\sigma(t_y)+c_y
bw=pwetwb_w=p_w*e^{t_w}
bh=phethb_h=p_h*e^{t_h}
Pr(ObjectclassiObject)IOU(Object,b)=σ(t0)Pr(Object\in class_i|Object) * IOU(Object, b) =\sigma(t_0)

cxcy(c_x,c_y):此cell相對於feature map左上角的offset。
pwph(p_w,p_h):此anchor box的先驗寬高。
注意:

  • grid cell的尺寸做過歸一化,每個cell的大小爲1*1。因此每個屬於此grid cell的bounding box的中心位置bxby(b_x,b_y)與grid cell起始位置cxcy(c_x,c_y)之間的偏差一定小於1。
  • IOU(Object,b)IOU(Object, b)代表了此bounding box包含物體的概率,對應於yolo中的Pr(Objectness)Pr(Objectness)。公式中的ObjectObject是指中心落在此grid cell中的任意ground truth。只關心是否包含物體,因此ground truth的類別不限。
  • Pr(ObjectclassiObject)Pr(Object\in class_i|Object):在bounding box包含物體的情況下,此物體屬於某一類的概率。

Passthrough layers for fine features

爲了能得到分辨率更高的信息,v2設置了Passthrough layers把模型前部分layer的高分辨率輸出(262626*26)連接到後部分,與之後的低分辨率輸出(131313*13)融合/重疊起來。融合方法是把高分辨率feature map上臨近的4個feature重疊起來,成爲一個擁有4倍channels數目的新feature,從而減小map的二維尺寸使其可以疊加。
例如:高分辨率的feature map從 262632131312826*26*32\Rightarrow 13*13*128 後,即可與低分辨率的feature map重疊。

Train on image with different size


Speed(faster):

  • vgg16:
  • googlenet: Inception module with dimension reductions
  • darknet:Global average pooling, 1x1 conv for channel reduction, batch normalization

training methods (stronger):

  • joint training:
    • classification data:
      只反向傳播loss中條件類概率的部分
    • detection data:
      反向傳播整個loss的error
  • multi-label dataset: structual label / multi-label / word tree
    -很有趣實用的話題,怎麼使用多個數據集來訓練同一個模型。主要要解決數據集之間的標籤不一致的問題。 比如同樣是‘狗’這一類別,在一個數據集裏可能是‘柴犬’,另外一個數據集裏可能是‘動物’,他們之間有層級關係。使用最小的effort來統一這些標籤,使數據集間有一致性。
  • loss function && classification part: ???
    具體的loss公式文中沒有提到,而且關於分類的部分,論文原話是“The network predicts 5 coordinates for each bounding box”。根據我對這句話的理解,每個bounding box應該是隻輸出一個值t0t_0來表示包含某類物體的概率,而不是我之前以爲的一個維度爲類數目的vector。這一點讓我費解,之後研究清楚了補上。

Results:

在這裏插入圖片描述

Reference:

v2: https://arxiv.org/abs/1612.08242

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