1. 程式人生 > >從YOLOv1談到YOLOv2(5)二代速度與功能的改進

從YOLOv1談到YOLOv2(5)二代速度與功能的改進

為了精度與速度並重,作者在速度上也作了一些改進措施。

大多數檢測網路依賴於VGG-16作為特徵提取網路,VGG-16是一個強大而準確的分類網路,但是確過於複雜。224 * 224的圖片進行一次前向傳播,其卷積層就需要多達306.9億次浮點數運算。

YOLO使用的是基於Googlenet的自定製網路,比VGG-16更快,一次前向傳播僅需85.2億次運算,不過它的精度要略低於VGG-16。224 * 224圖片取 single-crop, top-5 accuracy,YOLO的定製網路得到88%(VGG-16得到90%)。

Darknet-19

YOLOv2使用了一個新的分類網路作為特徵提取部分,參考了前人的工作經驗。類似於VGG,網路使用了較多的3 * 3卷積核,在每一次池化操作後把通道數翻倍。借鑑了network in network的思想,網路使用了全域性平均池化(global average pooling)做預測,把1 * 1的卷積核置於3 * 3的卷積核之間,用來壓縮特徵。使用batch normalization穩定模型訓練,加速收斂,正則化模型。

最終得出的基礎模型就是Darknet-19,包含19個卷積層、5個最大值池化層(max pooling layers )。Darknet-19處理一張照片需要55.8億次運算,imagenet的top-1準確率為72.9%,top-5準確率為91.2%。

Training for classification

作者使用Darknet-19在標準1000類的ImageNet上訓練了160次,用隨機梯度下降法,starting learning rate 為0.1,polynomial rate decay 為4,weight decay為0.0005 ,momentum 為0.9。訓練的時候仍然使用了很多常見的資料擴充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。(引數都是基於作者的darknet框架)

初始的224 * 224訓練後把解析度上調到了448 * 448,使用同樣的引數又訓練了10次,學習率調整到了10^{-3}。高解析度下訓練的分類網路top-1準確率76.5%,top-5準確率93.3%。

Training for detection

為了把分類網路改成檢測網路,去掉原網路最後一個卷積層,增加了三個 3 * 3 (1024 filters)的卷積層,並且在每一個卷積層後面跟一個1 * 1的卷積層,輸出維度是檢測所需數量。

對於VOC資料集,預測5種boxes,每個box包含5個座標值和20個類別,所以總共是5 * (5+20)= 125個輸出維度。

這裡寫圖片描述

也添加了passthrough layer,從最後3 * 3 * 512的卷積層連到倒數第二層,使模型有了細粒度特徵。

學習策略是:先以10^{-3}的初始學習率訓練了160次,在第60次和第90次的時候學習率減為原來的十分之一。weight decay為0.0005,momentum為0.9,以及類似於Faster-RCNN和SSD的資料擴充(data augmentation)策略: random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上訓練。

更廣泛的檢測範圍

作者提出了一種在分類資料集和檢測資料集上聯合訓練的機制。使用檢測資料集的圖片去學習檢測相關的資訊,例如bounding box 座標預測,是否包含物體以及屬於各個物體的概率。使用僅有類別標籤的分類資料集圖片去擴充套件可以檢測的種類。

訓練過程中把監測資料和分類資料混合在一起。當網路遇到一張屬於檢測資料集的圖片就基於YOLOv2的全部損失函式(包含分類部分和檢測部分)做反向傳播。當網路遇到一張屬於分類資料集的圖片就僅基於分類部分的損失函式做反向傳播。

這種方法有一些難點需要解決。檢測資料集只有常見物體和抽象標籤(不具體),例如 “狗”,“船”。分類資料集擁有廣而深的標籤範圍(例如ImageNet就有一百多類狗的品種,包括 “Norfolk terrier”, “Yorkshire terrier”, and “Bedlington terrier”等. )。必須按照某種一致的方式來整合兩類標籤。

大多數分類的方法採用softmax層,考慮所有可能的種類計算最終的概率分佈。但是softmax假設類別之間互不包含,但是整合之後的資料是類別是有包含關係的,例如 “Norfolk terrier” 和 “dog”。 所以整合資料集沒法使用這種方式(softmax 模型),

作者最後採用一種不要求互不包含的多標籤模型(multi-label model)來整合資料集。這種方法忽略了資料集的結構(例如 COCO資料集的所有類別之間是互不包含的)

Hierarchical classification(層次式分類)

ImageNet的標籤參考WordNet(一種結構化概念及概念之間關係的語言資料庫)。例如:

這裡寫圖片描述

很多分類資料集採用扁平化的標籤。而整合資料集則需要結構化標籤。

WordNet是一個有向圖結構(而非樹結構),因為語言是複雜的(例如“dog”既是“canine”又是“domestic animal”),為了簡化問題,作者從ImageNet的概念中構建了一個層次樹結構(hierarchical tree)來代替圖結構方案。

建立層次樹的步驟是:

遍歷ImageNet的所有視覺名詞
對每一個名詞,在WordNet上找到從它所在位置到根節點(“physical object”)的路徑。 許多同義詞集只有一條路徑。所以先把這些路徑加入層次樹結構。
然後迭代檢查剩下的名詞,得到路徑,逐個加入到層次樹。路徑選擇辦法是:如果一個名詞有兩條路徑到根節點,其中一條需要新增3個邊到層次樹,另一條僅需新增一條邊,那麼就選擇新增邊數少的那條路徑。
最終結果是一顆 WordTree (視覺名片語成的層次結構模型)。用WordTree執行分類時,預測每個節點的條件概率。例如: 在“terrier”節點會預測:

如果想求得特定節點的絕對概率,只需要沿著路徑做連續乘積。例如 如果想知道一張圖片是不是“Norfolk terrier ”需要計算:
這裡寫圖片描述

分類時假設 圖片包含物體:Pr(physical object) = 1.

為了驗證這種方法作者在WordTree(用1000類別的ImageNet建立)上訓練了Darknet-19模型。為了建立WordTree1k作者天添加了很多中間節點,把標籤由1000擴充套件到1369。訓練過程中ground truth標籤要順著向根節點的路徑傳播:例如 如果一張圖片被標記為“Norfolk terrier”它也被標記為“dog” 和“mammal”等。為了計算條件概率,模型預測了一個包含1369個元素的向量,而且基於所有“同義詞集”計算softmax,其中“同義詞集”是同一概念的下位詞。

這裡寫圖片描述

使用相同的訓練引數,層次式Darknet-19獲得71.9%的top-1精度和90.4%top-5精度。儘管添加了369個額外概念,且讓網路去預測樹形結構,精度只有略微降低。按照這種方式執行分類有一些好處,當遇到新的或未知物體類別,預測精確度降低的很溫和(沒有突然巨幅下降)。例如:如果網路看到一張狗的圖片,但是不確定狗的類別,網路預測為狗的置信度依然很高,但是,狗的下位詞(“xx狗”)的置信度就比較低。
這個策略野同樣可用於檢測。不在假設每一張圖片都包含物體,取而代之使用YOLOv2的物體預測器(objectness predictor)得到Pr(physical object)的值。檢測器預測一個bounding box和概率樹(WordTree)。沿著根節點向下每次都走置信度最高的分支直到達到某個閾值,最終預測物體的類別為最後的節點類別。

Dataset combination with WordTree

可以使用WordTree把多個數據集整合在一起。只需要把資料集中的類別對映到樹結構中的同義詞集合(synsets)。使用WordTree整合ImageNet和COCO的標籤如下圖:

這裡寫圖片描述

joint classification and detection(聯合訓練分類和檢測)

使用WordTree整合了資料集之後就可以在資料集(分類-檢測資料)上訓練聯合模型。我們想要訓練一個檢測類別很大的檢測器所以使用COCO檢測資料集和全部ImageNet的前9000類創造一個聯合資料集。為了評估我們使用的方法,也從ImageNet detection challenge 中向整合資料集新增一些還沒有存在於整合資料集的類別。相應的WordTree有9418個類別。由於ImageNet是一個非常大的資料集,所以通過oversampling COCO資料集來保持平衡,使ImageNet:COCO = 4:1。

使用上面的資料集訓練YOLO9000。採用基本YOLOv2的結構,anchor box數量由5調整為3用以限制輸出大小。

當網路遇到一張檢測圖片就正常反向傳播。其中對於分類損失只在當前及其路徑以上對應的節點類別上進行反向傳播。

當網路遇到一張分類圖片僅反向傳播分類損失。在該類別對應的所有bounding box中找到一個置信度最高的(作為預測座標),同樣只反向傳播該類及其路徑以上對應節點的類別損失。反向傳播objectness損失基於如下假設:預測box與ground truth box的重疊度至少0.31IOU。

採用這種聯合訓練,YOLO9000從COCO檢測資料集中學習如何在圖片中尋找物體,從ImageNet資料集中學習更廣泛的物體分類。

作者在ImageNet detection task上評估YOLO9000。ImageNet detection task和COCO有44個物體類別是相同的。這意味著YOLO9000只從大多數測試資料集中看到過分類資料而非檢測資料。最終整體精度為19.7mAP,在從未見過的156個物體檢測資料類別上精度為16.0mAP。這個結果高於DPM,但是YOLO9000是在不同資料集上進行半監督訓練。而且YOLO9000可以同時實時檢測9000多種其它物體類別。

作者也分析了YOLO9000在ImageNet上的效能,發現可以學習新的動物表現很好,但是學習衣服和裝置這類物體則不行。因為從COCO資料集上動物類別那裡學習到的物體預測泛化性很好。但是COCO資料集並沒有任何衣服類別的標籤資料(只有”人”類別),所以YOLO9000很難對“太陽鏡”,“游泳褲”這些類別建模。