目標檢測: YOLOv2

《YOLO9000: Better, Faster,Stronger》

論文鏈接:https://arxiv.org/abs/1612.08242
項目地址:https://pjreddie.com/darknet/yolo/

本文爲 YOLO v2的提出,作者做了大量的實驗,包括把當時比較流行的一些網絡構建方法(BN層,average pooling,大量使用小卷積核等)都進行了嘗試與結果對比,爲了增加候選框的召回率,加入了 anchor box,並在訓練過程中加入了 k-means 讓網絡自動選擇 anchor box,爲了消除 anchor box 帶來的網絡不穩定情況,提出了新的 bounding box 定位方法, 爲了對小物體更好的檢測,加入了前一級的特徵,不得不說訓練過程及網絡的構建過程越來越複雜了,但是速度也越來越快了。

1. Introduction

一般目標檢測應該是快速準確的,並且能夠識別很多種類的物體。自從神經網絡的提出依賴,檢測框架變得越來越快,也越來越準確,但是僅僅能識別很少種類的物體。

目前目標檢測的數據集相比於其他任務(分類以及標記)還比較有限,分類的圖片中可能包含了成千上萬的種類,但是標記目標檢測數據集的成本遠遠高於分類任務,因此,在一定時間內,目標檢測不可能有達到分類任務那樣規模的數據集出現。

本文提出一個新的方法來利用已經有的分類數據集的圖片,用它來擴展當前檢測系統的範圍

2. Better

相比於 Fast R-CNN,YOLO 出現了更多的定位錯誤。 相比於基於 region proposal 的方法,YOLO 有更低的召回率。因此本文主要是關注於改善召回率,並且在確保分類準確率的同時改善定位精度。

計算機視覺逐漸向更大,更深的網絡發展了。 更好的性能一般是來自於訓練更大的網絡或者是結合了更多的模型在一塊。 YOLOv2 並沒有增大網絡的結構,而是簡化了網絡,使特徵表達更容易學習。本文有嘗試了很多方法來改善 YOLO,嘗試如下:

  • Batch Normalization : Batch Normalization 簡化了正則化的過程,收斂更快。 文中通過對所有卷積層加 BN 層,提高了 2% 的mAP。

  • High Resolution Classifier : 目前 state-of-the-art 都是使用在 ImageNet 上預訓練的分類器結構,從AlexNet 開始,大部分分類器的輸入分辨率都是小於 256x256 的,YOLOv1 也是在 224x224 的分辨率上訓練分類網絡,然後分辨率升爲 448 做檢測。 YOLOv2 則是直接把分類網絡在 448x448 分辨率的 ImageNet 上微調 10 個 epochs, 然後再進行 448x448 的目標檢測。 這樣提高了 4% 的mAP。

  • Convolutional with anchor boxes : YOLO v1 是直接從最後的全連接層輸出對座標的預測,但是這樣的 bounding box 的召回率偏低,這裏爲了改善召回率,YOLO v2 做了 anchor box 的嘗試,將輸入分辨率變成奇數的 416,網絡會降 32 倍分辨率,最後到 13x13,實驗證明使用 anchor box 以後 mAP 稍有降低,但是召回率從 81% 變成了 88%,這也說明了 YOLO 還有進一步提升的空間。

  • Dimension Clusters : 之前的 anchor box 都是人爲的選擇尺寸等信息。這裏本文使用 K-means 的方法讓網絡自動選擇較合適的尺寸。如果直接使用歐式距離,大盒子會比小盒子產生更多的錯誤。 所以這裏使用與 IoU 有關的距離,文中綜合召回率與模型複雜度,選擇了5個聚類中心。

  • Direct location prediction : anchor box 引起的模型不穩定性。 在基於 region proposal 的方法中會預測偏移量 tx 和 ty,結合預測的 (x,y) 座標,最後的中心點爲:

如果 tx = 1 會將 box 右移一個 anchor box 的寬度,tx = -1 則 box 左移一個 anchor box 的寬度。這樣的公式沒有加以限制,會使 anchor box 可以在圖像的任意位置出現,這樣也會讓網絡花費更多的時候來生成穩點的預測。

YOLO v2 則是沿用 YOLO v1 的方法,直接預測 bounding box 的中心相對於 cell 的左上角位置的相對偏移量。 網絡最後輸出 13x13, 就有 13x13 個cell,每個 cell 有 5 個 bounding box ,每個 bounding box 會有 5 個預測值:tx,ty,tw,th,t0,

進一步說明:

  • Fine-Grained Feature :

13x13 的分辨率檢測大物體足夠了,爲了提升對小物體的檢測性能,這裏還結合了上一層 26x26 分辨率的特徵圖,進行訓練,26x26x512 經過 passthrough layer 後變成 13x13x2048 然後再與最後的 13x13 的特徵圖拼接在一起進行檢測,這樣增加了 1% 的mAP.

  • Multi-Scale Training :

因爲 YOLO v2只有卷積層和池化層,所以輸入的尺寸可以不再固定,爲了增加模型的魯棒性,在訓練時,在 32 的倍數中,從 320 到 608 的分辨率,每 10 個 batch 就隨機選擇一個新的分辨率輸入到網絡,這樣讓網絡可以適應不同分辨率的輸入。

3. Faster

主要是對 backbone 網絡的修改, 提出Darknet-19,學習了 VGGNet 的思想,開始大量使用 3x3 卷積核,然後學習了 NIN 使用了 average pooling,同時使用了 1x1 來進行降通道的操作,學習了 GoogLeNet, 加入了 BN 層,最後的 Darknet-19 由 19 個卷積層 + 5 個 maxpooling 層,具體結構如下:

當用作檢測時,就把最後一個 1x1x1000 的卷積層及以下部分替換成 3 個 3x3x1024 的卷積層,最後再加一個 1x1 的卷積層來輸出我們需要的輸出個數。

對 VOC 數據集,每個 cell 預測 num=5 個 bounding box ,每個bounding box 都有 5 個座標值和 20 個類別,所以每個 cell 都有: num * (classes + 5) = 5 *(20 + 5) = 125 個 filter

YOLO v1 中的計算是:classes + num * (coords + confidence) = 20+2*(4 + 1) = 30, 所以 YOLO v1 是每一個 cell 有一個類別預測,而 YOLO v2 是每一個 cell 的 bounding box 有一個類別預測。

4. Stronger

用 WordTree 來構造數據集,並使用 joint classification and detection 來訓練模型,從而結合分類與檢測數據的數據集可以檢測 9000 類物體。

Ps,在參考文獻中,作者同時給出了 YOLO v2 的 Loss 函數部分的詳細說明,這裏就不放進本文中了,如果有需要的可以移步至 參考博客 中。

參考博客: https://blog.csdn.net/lwplwf/article/details/82895409

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