YOLO9000論文詳讀

wuxin_studynote發表於2020-12-22

考試結束,我又回來了,蕪湖~

摘要

      YOLO,提出了一種新穎且借鑑了之前工作的方法;

      YOLOv2使用一種新穎、多尺寸的訓練方式,使得模型可以在尺寸多變的情況下執行,且有效的權衡了速度和準確率;

      本文提出的YOLO9000是一個可以實現實時目標檢測的方法,可以檢測超過9000類的目標。由於同時在COCO和ImageNet資料集上進行訓練,使得YOLO9000可以對不含有標籤的目標類別進行檢測。

現階段檢測演算法所存在的問題:

  1. 現階段所有的檢測演算法都在追求更快的速度,更高的準確率,可檢測的類別數目卻仍然比較少。

  2. 現階段用於目標檢測的資料集與用於分類和標記的資料集相比,含有的影像數量少且類別少,不能滿足需要,且對目標檢測資料集進行標註是非常expensive的(耗時且耗力)。

改進方向:

  1. 利用現有的包含大量資料的用於分類的資料集來擴充目標檢測的範圍,提出了一種多層次的目標分類方法,把多個資料集結合在一起。

  2. 提出一種聯合訓練演算法,使得模型在檢測資料集和分類資料集上均可以進行訓練——利用含標籤的檢測資料集學習定位目標,在其用於分類時可以增加vocabulary(可解釋性)和robustness(魯棒性)。

  3. YOLO與Faster RCNN相比,存在的定位錯誤比較多;與基於regions proposal 的方法相比,含有較低的recall,所以YOLO9000針對定位錯誤和recall進行了改進。

針對效果改進

  1. batch normalization(批處理正則化):批處理正則化可以顯著提升模型的收斂性,並消除模型對其他形式正則化需要。在所有的卷積層使用batch normalization後,模型整體提升了2%的mAP,並且可以在不使用dropout的情況下可以有效避免過擬合的發生。

  2. high resolution classifier(高解析度分類器):所有的state of the art檢測演算法都是使用分類器在ImageNet上進行預訓練的。從AlexNet開始,分類器輸入影像的解析度一般小於256×256,初始的YOLO也是使用輸入為224×224解析度的分類器進行預訓練,然後使用448×448的進行檢測,這使得網路必須在由學習分類變換到學習目標檢測的同時,調整網路使其適應新的輸入解析度。

    YOLOv2時,通過調整分類器的網路結構,在ImageNet上使用10次迭代來處理448×448解析度的輸入,從而使網路有時間調整filters的數量,來更好的應對更高解析度的輸入,然後再調整檢測網路,提升了4%的mAP。

  3. convolution with anchor boxes(使用錨點進行卷積):YOLO使用全連線層直接預測出邊界框的座標資訊,Faster RCNN使用RPN預測出每個錨點的置信度和offset。

    a.使用預測offset替代預測座標資訊,簡化了問題,使得易於網路進行學習。

    b.刪除了YOLO中的全連線層,使用錨點預測邊界框——首先消除了一個池化層使得輸出具有高解析度。這裡使用了416×416的輸入而不是448×448,因為想在特徵圖中要一個奇數的locations,使用係數為32的下采樣可以在416×416的影像中獲得一個13×13的特徵圖作為輸出。

    c.在使用錨點進行預測的同時,解耦了基於空間定位的類別預測機制,使用對每個錨點預測類別和物件進行替代。物件預測仍然是預測IOU值,類別預測是預測條件概率。

  4. dimension clusters(維度叢集):在使用錨點時遇到兩個問題:一個是邊框的維度是手動精心挑選的,儘管網路可以學習如何選擇最佳的優先順序,但是如果我們事先給定一個較好的優先順序,那麼可以使得網路很容易獲得比較好的檢測結果。使用K-means聚類替代之前手選的方法。如果使用標準的歐幾里得距離來進行k-means聚類,則大邊框會比小邊框產生更多的錯誤,但是我們想要的是依靠優先順序獲得更好的IOU分數,這和邊框大小無關。距離計算公式使用:
    在這裡插入圖片描述
    其中centroid是質心。通過使用不同的k值,獲得瞭如下結果:
    在這裡插入圖片描述
    本文選擇了k=5的情況,因為此時可以較好的權衡模型的複雜度和high recall之間的關係。

    右圖顯示VOC和COCO的質心的相對關係(白色為VOC,紫色為COCO),可以看出兩種都更傾向於thinner、taller的邊框(手動精心挑選的形狀一般short 且 wide),但是COCO的邊框形狀變化較大。

    在模型開始時,使用k-means聚類生成的邊界框,會有更好的表現且會使得任務更容易被學習。

  5. direct location prediction(直接定位預測):在使用錨點時遇到的第二個問題是模型不穩定,尤其是在模型迭代的初期。不穩定性主要是預測邊框座標時產生的。本文使用預測相對於網格位置的位置座標替代預測offset,這使得ground-truth的值在0和1之間,使用邏輯啟用來確保網路的預測值落在這個範圍內。該網路對每個網格輸出的特徵圖預測出5個邊界框,對每個邊界框預測5個座標值tx,ty,tw,th,to。如果網格的左上角座標為(cx,cy),邊界框原本的寬和高為pw,ph,則預測結果符合下列公式:
    在這裡插入圖片描述
    使用了含限制的位置預測方法,使得引數易於學習,且使得網路更穩定。

  6. fine-grained feature(細粒度特徵):在YOLO得到的13×13的特徵圖基礎上進行修改,使得其在可以檢測大型物件的同時,因為細粒度的原因還可以定位一些小的物件。Faster RCNN和SSD都是在不同的特徵圖上執行網路,從而使網路具有一定範圍的解析度。本文使用一個不同的方法——新增一個直通層,可以直接在26×26的特徵圖上提前獲得特徵。該直通層通過把相鄰特徵堆疊到不同的通道來串聯高解析度特徵和低解析度特徵,替代原本的空間位置。這使得原本26×26×512的特徵圖轉換為了一個可以串聯初始特徵的13×13×2048大小的特徵圖。

  7. multi-scale training(多尺寸的訓練):為了使模型具有更強的魯棒性,每10次迭代就隨機選擇一個新的影像輸入尺寸,因為模型的下采樣引數為32,所以一般選擇的都是32的倍數,如{320,352,…,608},這個方法迫使網路去學習如何在不同的輸入尺寸的情況下進行預測,所以YOLOv2可以實現較好的權衡速度和準確率。

針對速度改進

       現有的機器人以及無人駕駛等依賴低延遲的技術,而現今大部分網路使用VGG16作為基礎的特徵提取器,雖然VGG16效果很好,但是據有很多無用的複雜性,以至於對一個224×224的影像需要30.69億次浮點計算。YOLO使用一種基於GoogleNet演算法自定義的網路,比VGG16快(處理224×224的影像僅需8.52億次浮點計算),但是準確率略有下降(在ImageNet資料集,VGG16的top-5準確率為90%,本演算法為88%)。
在這裡插入圖片描述
       本文提出一個Darknet-19的新型網路,有19個卷積層和5個最大池化層(詳情見上圖)。只需要5.58億次浮點運算,在ImageNet上top-1準確率為72.9%,top-5準確率為91.2%。

  1. 在分類資料集上進行訓練:在標準的1000類的ImageNet分類資料集上進行訓練,隨機梯度下降SGD160次迭代,使用學習率為0.1,多項式rate衰減為 4,權重衰減為0.0005,動量為0.9,與此同時也使用資料增強的方法,如隨機裁剪、旋轉,改變色調、飽和度等。首先使用上述的引數,使用224×224的影像進行10次迭代,然後使用448×448的影像,學習率改為10-3,這種情況下,在ImageNet上top-1準確率為76.5%,top-5準確率為93.3%。
  2. 在檢測資料集上進行訓練:把網路中的最後一個卷積層移除,並替換為三個大小為3×3且含有1024個filter的卷積層,每個卷積層後緊跟著一個1×1的卷積層和n個需要檢測的輸出結果。如在VOC中需要預測5個邊界框,每個邊界框有5個座標,VOC共含有20類,所以共有125個filter(5×5+5×20=125)。同時在最後一個3×3×512的卷積層和最後一個卷積層之間新增一個直通層,從而使模型可以使用細粒度特徵。使用10-3的學習率進行初始迭代,並在迭代60-90次之間將其降為10-4,共迭代160次。權重衰減為0.0005,動量為0.9,使用與YOLO同樣的資料增強方法。

針對健壯性進行改進

       本文提出的在檢測資料集和分類資料集上進行聯合訓練的方式使得模型在遇到標記的輸入時可以基於YOLOv2的損失函式進行反向傳播,遇到分類的影像只能反向傳播分類時獨有部分的損失。這種方法會遇到一些挑戰,首先是檢測資料集的標籤和物件一般都是非常普通、常見的,而分類資料集中的標籤都是非常寬泛和詳細的,如果想要同時在這些資料集上進行訓練,需要一個合併這些標籤的方式。

       一般的方法是使用一個softmax層來通過對所有可能的類別計算概率分佈,有一個前提條件是所有的類別要是互斥的。該方法並不適合把ImageNet和COCO結合起來,因為Norfolk terrier 和dog並不互斥。

  1. hierarchical classification(層次分類法):很多方法進行標記是使用的是一個平的結構,這並不適合用於聯合資料集,所以建立了一個層次結構樹來表示各個類別之間的關係。如果一個節點有兩條邊連向根節點,選擇較短的那條邊,如此迭代最後獲得了一個WordTree。為了對含有1000類資料的ImageNet建立WordTree,使用了很多中間節點,使得1000類擴充到了1369類,在訓練時,前向傳播真實的標籤,所以一個影像獲得了Norfolk terrier的標籤,同時會獲得dog和mammal(哺乳動物)的標籤,為了計算條件概率,模型預測出一個包含1369個值的向量,然後使用softmax計算。
    在這裡插入圖片描述
本文合併資料庫的重點

總結

       本文主要提出了兩個演算法,第一個是YOLOv2——一個速度快、準確率高的檢測演算法,可以在多尺寸輸入的情況下進行檢測,且有效權衡了速度和準確率的關係;第二個是YOLO9000——通過WordTree把檢測資料集和分類資料集結合在一起,再使用聯合訓練方法進行訓練,使得模型可以對9000類目標進行檢測, 有效緩解檢測資料集和分類資料集之間的差異而導致檢測演算法效能難以提升的問題。

相關文章