1. 程式人生 > >YOLO系列(V1-V2-V3)

YOLO系列(V1-V2-V3)

yolo系列整理

版本 作者主頁 程式 論文
yoloV1 點選開啟 點選開啟 點選開啟
yoloV2 點選開啟 點選開啟 點選開啟
yoloV3 點選開啟 點選開啟 點選開啟

改進

V2 VS V1:

增加BN層:

  • 解決問題:每層的輸入分佈一直在改變,訓練難度增加;
  • 採取措施:在每層卷積層後,新增batch normalization;
  • 改進效果:
    1.mAP獲得了2%的提升;
    2.規範化模型,可以在捨棄dropout優化後依然不會過擬合;
    ##High Resolution Classifier
  • 解決問題:由於現有的特徵提取網路侷限,導致圖片被resize到不足256 * 256,導致解析度不夠高,給檢測帶來困難;
  • 採取措施:
    1.提高分辨力到448 * 448;
    2.改變原來特徵網路的輸入解析度,在ImageNet資料集上對分類網路進行fine tune訓練10輪(10 epochs),使得網路適應高解析度的輸入;然後,對檢測網路進行fine tune。
  • 改進效果:mAP獲得了4%的提升;
    ##Convolutional With Anchor Boxes
  • 解決問題:全連線層的資料完成邊框的預測,導致丟失較多的空間資訊,定位不準;
  • 採取措施:
    1.借鑑了Faster R-CNN中的anchor思想
    2.在卷積特徵圖上進行滑窗操作,每一箇中心可以預測9種不同大小的建議框。
    3.去掉了後面的一個池化層以確保輸出的卷積特徵圖有更高的解析度;
    4.縮減網路,輸入分辨力為416416,使得輸出的feature map寬高為基數,產生一個center cell(大物體通常佔據了影象的中間位置),用一箇中心cell預測大物體,否則就要用中間的4個cell來進行預測,有利於提高效率。
    5.卷積層降取樣(factor為32),輸入大小:416
    416;輸出大小:13*13
  • 改進效果:召回率上升,準確率下降。
    1.改進後:預測13 * 13 * 9 = 1521個boxes,recall為88%,mAP為69.2%
    2.改進前:預測7 * 7 * 2 = 98個boxes,recall為81%,mAP為69.5%
    3.準確率只有小幅度的下降,而召回率則提升了7%。
    ##Dimension Clusters
  • 解決問題:
    1.anchor boxes的寬高維度往往是精選的先驗框,如果一開始就選擇了更好的、更有代表性的先驗boxes維度,那麼網路就更容易學到準確的預測位置;
    2.傳統的K-means聚類方法使用的是歐氏距離函式,也就意味著較大的boxes會比較小的boxes產生更多的error,聚類結果可能會偏離;
  • 採取措施:
    1.距離函式:error就和box的尺度無關
    這裡寫圖片描述
    聚類結果:扁長的框較少,而瘦高的框更多
    這裡寫圖片描述
  • 改進效果:使用聚類方法,僅僅5種boxes的召回率就和Faster R-CNN的9種相當
    這裡寫圖片描述
    ##Direct location prediction
  • 模型不穩定,尤其是在早期迭代的時候,大部分的不穩定現象出現在預測box的 (x,y)(x,y) 座標上;
  • 這裡寫圖片描述
  • 這裡寫圖片描述
    這個公式的理解為:當預測 tx=1tx=1,就會把box向右邊移動一定距離(具體為anchor box的寬度),預測 tx=−1tx=−1,就會把box向左邊移動相同的距離。
    符號含義:
    1.x是座標預測值
    2.xa 是anchor座標(預設固定值)
    3.x∗是座標真實值(標註資訊)
    4.其他變數 y,w,h 以此類推,t 變數是偏移量;
    這個公式沒有任何限制,使得無論在什麼位置進行預測,任何anchor boxes可以在影象中任意一點結束。模型隨機初始化後,需要花很長一段時間才能穩定預測敏感的物體位置。
  • 採取措施:
    1.採用預測相對於grid cell座標位置的方法。
    2.13*13的grid,每個cell對應5個anchors box,每個anchors box對應5個值(分別是座標和置信度),如下所示:
    這裡寫圖片描述
    (cx,cy):這個cell距離影象左上角的cell數;
    (pw,ph):cell對應的anchors box的寬高;
    tx,ty 經sigmod函式處理過,取值限定在了0~1,實際意義就是使anchor只負責周圍的box,有利於提升效率和網路收斂。
    e的冪函式是因為前面做了 lnln 計算;
    σ(tx):bounding box的中心相對柵格左上角的橫座標;
    σ(ty):bounding box的中心相對柵格左上角的縱座標;
    σ(to)是bounding box的confidence score。
  • 改進效果:定位預測值被歸一化後,引數就更容易得到學習,模型就更穩定。使用Dimension Clusters和Direct location prediction這兩項anchor boxes改進方法,mAP獲得了5%的提升。

創新

將目標檢測作為迴歸問題,實現end-to-end訓練和檢測。
#V3
##改進
多尺度檢測 改動基礎分類網路和分類器

  1. 新增多尺度預測:將深層特徵上取樣後,與淺層特徵融合,分別形成多個尺度,輸出featuremap進行檢測,每個尺度對應3中不同大小的anchor,負責預測不同大小的目標。
    尺度1:在基礎特徵網路後新增幾層卷積層後,再輸出box資訊,負責預測較大目標
    尺度2:從尺度1網路的倒數第二層2倍上取樣後與最後一個1616大小的featuremap相加,再通過幾層卷積層後,輸出box,相比尺度1變大size變大兩倍,負責預測中等大小的目標。
    尺度3:與尺度2類似,使用32
    32大小的featuremap作為輸出,負責預測較小目標。

對比

1.與RCNN和Fast RCNN對比:yolo沒有求取proposal region,而RCNN系列需要通過selective research提取候選框,導致訓練過程分為多個階段完成。
與Faster RCNN對比:儘管用RPN 網路代替selective research,將RPN整合到Fast RCNN中,形成了一個統一的網路,實現卷積層引數的共享。但是在訓練過程中還是需要反覆訓練RPN和Fast RCNN網路。
因此RCNN系列的檢測,都屬於two-stage策略。
2.YOLO通過一次inference,同時得出目標位置和分類scores,而RCNN系列將目標檢測任務分成:檢測和迴歸。
#基礎網路
仿ResNet, 與ResNet-101或ResNet-152準確率接近,但速度更快.
這裡寫圖片描述
這裡寫圖片描述
##邊框預測
仍採用之前的logistic方式:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ b_x &= σ(t_x)+…
其中:
cx,cyc_x,c_y:網格座標(以grid為單位);
pw,php_w,p_h:anchor box尺寸;
##優缺點
相比RCNN,YOLO的缺點如下:

  1. 精確性差,由於目標的位置資訊通過迴歸求出,沒有進行微調;
  2. 召回率低,在每個網格中預測固定數量的bbox這種約束方式減少了候選框的數量。
    ##YOLO 和FAster R-CNN區別
  3. 統一網路:YOLO沒有顯示求取region proposal的過程。Faster R-CNN中儘管RPN與fast rcnn共享卷積層,但是在模型訓練過程中,需要反覆訓練RPN網路和fast rcnn網路.
    相對於R-CNN系列的"看兩眼"(候選框提取與分類,圖示如下),YOLO只需要Look Once.
  4. YOLO統一為一個迴歸問題:而R-CNN將檢測結果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(迴歸問題)。

網路結構

這裡寫圖片描述
YOLO網路借鑑了GoogLeNet分類網路結構。不同的是,YOLO未使用inception module,而是使用1x1卷積層(此處1x1卷積層的存在是為了跨通道資訊整合)+3x3卷積層簡單替代。
作者還給出一個更輕快的檢測網路fast YOLO,它只有9個卷積層和2個全連線層。使用titan x GPU,fast YOLO可以達到155fps的檢測速度,但是mAP值也從YOLO的63.4%降到了52.7%,但卻仍然遠高於以往的實時物體檢測方法(DPM)的mAP值。
網路最後一層,直接通過reshape將一維的vector調整到7730的結構。丟失了空間資訊。

檢測思路

**思路:**以end-to-end的方式,進行訓練和預測,使用整幅影象的特徵,預測所有類上的所有boxes。將一幅影象分成S*S的格子,如果目標中心落到某個grid中,該grid就負責檢測該object。
**box相關引數:**那每個grid負責預測B個box以及這B個box的confidence scores,每個box對應的confidence score說明該box包含目標的可能性以及與GT box的接近程度,通過下式定義:
這裡寫圖片描述
對於每個box:x,y,w,h,confidecex,y,w,h,confidece
其中:(x,y)(x,y):box中心座標相對於grid cell的邊界位置,範圍是0~1;
(w,h)(w,h):box的寬和高相對於整幅影象大小,範圍是0~1;
(confidece)(confidece):見上述公式;
這裡寫圖片描述
**class相關引數:**每個grid對應C個條件概率:Pr(ClassiObject)Pr(Classi|Object),也就是如果box包含物體,那麼box中物體屬於某類的概率(注意這裡不是01編碼)。該後驗概率僅反映出IoU最大的box所包含物體的類概率。
這裡寫圖片描述
注意:
conditional class probability資訊是針對每個網格的。
confidence資訊是針對每個bounding box的。

test指標:既包含了bounding box中預測的class的 probability資訊,也反映了bounding box是否含有Object和bounding box座標的準確度。
這裡寫圖片描述
下圖說明了這兩方面的評估,以及最終的綜合評估:
這裡寫圖片描述
得到30維向量後,通過上述公式,將向量整合成20*1維的向量,如下圖所示:
這裡寫圖片描述
每個grid按照上面的規則,整合後的向量如下:
這裡寫圖片描述
將小於閾值的結果進行抑制:
這裡寫圖片描述
非極大值抑制:
這裡寫圖片描述
輸出檢測結果:
這裡寫圖片描述

訓練思路(loss函式)

這裡寫圖片描述
網路訓練和檢測思路不同。
僅僅通過最小均方誤差來定義loss函式,存在不足,需要通過以下規則進行修改:

  1. 不同指標之間權衡關係:8維的localization error和20維的classification error同等重要顯然是不合理的。
    解決辦法:更重視8維的座標預測,給這些損失前面賦予更大的loss weight, 記為 λcoord ,在pascal VOC訓練中取5。(上圖藍色框)
  2. 大部分grids不含物體:那麼就會將這些柵格中的bounding box的confidence 置為0,相比於較少的有object的柵格,這些不包含物體的柵格對梯度更新的貢獻會遠大於包含物體的柵格對梯度更新的貢獻,這會導致網路不穩定甚至發散。
    解決辦法:如上述紅色框和黃色框,通過調整λnoobjλnoobj實現兩者之間對梯度平衡作用。
    3.含有object的bbox的confidence loss (上圖紅色框) 和類別的loss (上圖紫色框)的loss weight正常取1。
    4.**不同大小box對IoU影響:**對不同大小的bbox,相同的偏離,大bbox對IOU的影響若於小box。通過sum-square error loss對該問題進行緩和。
    調整的目標:相同的偏離,增強對小bbox的IOU的影響,減弱打的bbox的IOU的影響。為了緩和這個問題,作者用了一個巧妙的辦法,就是將box的width和height取平方根代替原本的height和width。 如下圖:small bbox的橫軸值較小,發生偏移時,反應到y軸上的loss(下圖綠色)比big box(下圖紅色)要大。
    如下圖所示:
    這裡寫圖片描述

每個grid有多個boxes,最終的結果,採用IoU最大的box predictor預測,因此,不同box之間存在競爭,因此,隨著訓練輪數的增加,特定box predictor越來越好的,負責預測不同尺寸的物體。