YOLOv2論文解讀


原文下載鏈接
摘要
  我們將介紹YOLO9000,這是一種先進的實時對象檢測系統,可以檢測9000多個對象類別。首先,我們建議對YOLO檢測方法進行各種改進,無論是新穎的還是從以前的工作中得出的。改進的模型YOLOv2在諸如PASCAL VOC和COCO之類的標准檢測任務方面是先進的。使用新穎的,多尺度的訓練方法,相同的YOLOv2模型可以在不同的大小上運行,從而在速度和准確性之間輕松權衡。以67 FPS速度運行時,YOLOv2在VOC 2007上獲得76.8 mAP。以40 FPS速度運行時,YOLOv2獲得78.6 mAP,優於采用ResNet和SSD的Faster RCNN的最新方法,同時運行速度仍顯着提高。最后,我們提出了一種聯合訓練目標檢測和分類的方法。使用這種方法,我們在COCO檢測數據集和ImageNet分類數據集上同時訓練YOLO9000。通過我們的聯合培訓,YOLO9000可以預測沒有標記檢測數據的物體類別的檢測結果。我們在ImageNet檢測任務上驗證了我們的方法。盡管僅采用200個類別中的44個的檢測數據,但YOLO9000在ImageNet檢測驗證集上獲得了19.7 mAP。在COCO以外的156個類別中,YOLO9000的平均得分為16.0。但是YOLO可以檢測到200多個類。它預測了9000多種不同物體類別的檢測結果。而且它仍然實時運行。
1.介紹
  通用目標檢測應該快速,准確並且能夠識別各種目標。自從引入神經網絡以來,檢測框架已經變得越來越快和准確。但是,大多數檢測方法仍限於一小部分對象。
  與其他任務(例如分類和標記)的數據集相比,當前的對象檢測數據集受到限制。最常見的檢測數據集包含成千上萬的圖像以及數十到數百個標簽。分類數據集包含數百萬個具有數萬或數十萬個類別的圖像。
  我們希望將檢測擴展到對象分類的級別。但是,標記要檢測的圖像比標記分類或標記要昂貴得多(標記通常是用戶免費提供的)。因此,我們不太可能在不久的將來看到與分類數據集規模相同的檢測數據集。
  我們提出一種新方法來利用我們已經擁有的大量分類數據,並使用它來擴展當前檢測系統的范圍。我們的方法使用對象分類的分層視圖,該視圖允許我們將不同的數據集組合在一起。
  我們還提出了一種聯合訓練算法,該算法允許我們在檢測和分類數據上訓練對象檢測器。我們的方法利用標記的檢測圖像來學習精確定位對象,同時使用分類圖像來增加其詞匯量和健壯性。
  使用這種方法,我們訓練了YOLO9000,這是一種實時對象檢測器,可以檢測9000多種不同的對象類別。首先,我們對基本的YOLO檢測系統進行了改進,以生產出最新的實時檢測器YOLOv2。然后,我們使用數據集組合方法和聯合訓練算法在ImageNet的9000多個類別以及COCO的檢測數據上訓練模型。
  我們所有的代碼和經過預先訓練的模型都可以從http://pjreddie.com/yolo9000/在線獲得。
2.更好
  與最先進的檢測系統相比,YOLO存在許多缺點。與Fast R-CNN相比,YOLO的錯誤分析表明,YOLO會產生大量的定位錯誤。此外,與基於區域提案的方法相比,YOLO的召回率相對較低。因此,我們主要致力於改善召回率和定位,同時保持分類准確性。
  計算機視覺通常趨向於更大,更深的網絡。更好的性能通常取決於訓練大型網絡或將多個模型整合在一起。但是,對於YOLOv2,我們希望使用一種仍能快速運行的更准確的檢測器。與擴大網絡規模相反,我們簡化了網絡,然后使表示更易於學習。我們將過去工作中的各種想法與我們自己的新穎概念融合在一起,以提高YOLO的性能。結果摘要可在表2中找到。

  批量標准化。批處理規范化導致收斂性的顯着改善,同時消除了對其他形式的規范化的需求。通過在YOLO的所有卷積層上添加批處理歸一化,我們可以在mAP方面獲得2%以上的改進。批處理規范化還有助於規范化模型。通過批量歸一化,我們可以消除模型中的缺失而不會過度擬合。
  高分辨率分類器。所有最新的檢測方法都使用在ImageNet上預先訓練的分類器。從AlexNet開始,大多數分類器都對小於256×256的輸入圖像進行操作。原始的YOLO在224×224處訓練分類器網絡,並將分辨率提高到448以進行檢測。這意味着網絡必須同時切換到學習對象檢測並調整為新的輸入分辨率。
  對於YOLOv2,我們首先在ImageNet上以448×448的完整分辨率微調分類網絡10輪。這使網絡有時間調整其過濾器,使其在更高分辨率的輸入上更好地工作。然后,我們根據檢測結果對網絡進行微調。這種高分辨率分類網絡使我們的mAP幾乎提高了4%。
  卷積與錨框。YOLO使用卷積特征提取器頂部的完全連接層直接預測邊界框的坐標。代替直接預測坐標,更快的R-CNN使用手工選擇的先驗來預測邊界框。僅使用卷積層,Faster R-CNN中的區域提議網絡(RPN)即可預測錨框的偏移量和置信度。由於預測層是卷積的,因此RPN會在特征圖中的每個位置預測這些偏移。預測偏移量而不是坐標可以簡化問題,並使網絡更容易學習。
  我們從YOLO中刪除完全連接的圖層,並使用錨定框預測邊界框。首先,我們消除了一個池化層,以使網絡卷積層的輸出具有更高的分辨率。我們還將網絡縮小為可處理416的輸入圖像,而不是448×448。之所以這樣做,是因為我們希望要素地圖中的位置數量為奇數,從而只有一個中心單元。對象(尤其是大對象)往往會占據圖像的中心,因此最好在中心位置使用一個位置來預測這些對象,而不要使用附近的四個位置。YOLO的卷積層將圖像降采樣32倍,因此使用416的輸入圖像,我們得到13×13的輸出特征圖。
  當我們移至錨框時,我們還將類預測機制與空間位置分離,而是為每個錨框預測類和對象。在YOLO之后,客觀性預測仍會預測真值框和提議框的IOU,並且類別預測會在存在目標的情況下預測該類別的條件概率。
  使用錨框,准確性會略有下降。YOLO只能預測每個圖像98個盒子,但使用錨框我們的模型可以預測1000個以上。如果沒有錨定盒,我們的中間模型將獲得69.5的mAP,81%的召回率。使用錨定盒,我們的模型獲得69.2的mAP,召回率達到88%。即使mAP降低,召回率的增加也意味着我們的模型還有更多的改進空間。
  維度簇。在YOLO上使用錨框時,我們會遇到兩個問題。首先是盒子尺寸是手工挑選的。網絡可以學習適當地調整框,但是如果我們為網絡選擇更好的先驗條件,則可以使網絡更容易學習預測良好的檢測。
  無需手動選擇先驗,我們在訓練集邊界框上運行k-means聚類以自動找到良好的先驗。如果我們使用具有歐幾里德距離的標准k均值,則較大的盒子會比較小的盒子產生更多的誤差。但是,我們真正想要的是能夠獲得良好IOU分數的先驗值,而這與盒子的大小無關。因此,對於我們的距離度量,我們使用:

$d(box, centroid) = 1 − IOU(box, centroid)$

  我們對k的各種值運行k均值,並繪制出具有最接近質心的平均IOU,請參見圖2。我們選擇k = 5作為模型復雜度和高召回率之間的良好折衷。群集質心與手工挑選的錨框明顯不同。短而寬的盒子更少,而高而窄的盒子則更多。

  我們將平均IOU與我們的聚類策略最接近的先驗框進行比較,並在表1中手工挑選了錨框。在5個先驗框時,質心的表現與9個錨框相似,平均IOU分別為61.0和60.9。如果我們使用9個質心,則平均IOU會更高。這表明使用k均值生成邊界框可以更好地表示模型,從而使任務更易於學習。

  直接位置預測。在YOLO中使用錨定框時,我們會遇到第二個問題:模型不穩定性,尤其是在早期迭代期間。大多數不穩定性來自於預測盒子的\((x,y)\)位置。在區域提議網絡中,網絡預測值\(t_x\)\(t_y\),並且將\((x,y)\)中心坐標計算為:

$x=(t_x * w_a)-x_a$
$y=(t_x * h_a)-y_a$

  例如,\(t_x = 1\)的預測將使該框向右移動錨定框的寬度,\(t_x = -1\)的預測將使該框向左移動相同的量。
  此公式不受限制,因此任何錨定框都可以終止於圖像中的任意點,而不管預測該框的位置如何。通過隨機初始化,該模型需要很長時間才能穩定以預測合理的偏移量。
  並非預測偏移量,我們采用YOLO的方法,預測相對於網格單元位置的位置坐標。這將真值限制在0到1之間。我們使用邏輯斯蒂激活函數將網絡的預測限制在此范圍內。
  網絡會在輸出特征圖中的每個單元上預測5個邊界框。網絡為每個邊界框預測\(t_x\)\(t_y\)\(t_w\)\(t_h\)\({to}\)共5個坐標。如果單元格從圖像的左上角偏移了\((c_x,c_y)\)並且先驗邊界框的寬度和高度為\(p_w\)\(p_h\),則預測對應於:

  由於我們限制了位置預測,因此參數化更易於學習,從而使網絡更加穩定。與帶有錨框的版本相比,使用尺寸簇以及直接預測邊界框中心位置可使YOLO提升近5%。
  細粒度特征。經過修改的YOLO可以預測13×13特征圖上的檢測結果。盡管這對於大型對象已經足夠,但它可能受益於用於定位較小對象的更細粒度的特征。Faster R-CNN和SSD都在網絡中的各種特征圖上運行其建議網絡,以獲得各種分辨率。我們采用了不同的方法,只是添加了一個直通層,從前面的層帶來了26×26分辨率的特征。
  與ResNet中的標識映射類似,直通層通過將相鄰要素堆疊到不同的通道而不是空間位置中,從而將高分辨率要素與低分辨率要素連接在一起。這會將26×26×512特征圖轉換為13×13×2048特征圖,可以將其與原始特征串聯。我們的探測器在此擴展的特征圖上運行,因此可以訪問細粒度的特征。這將使性能提高至少1%。
  多尺度培訓。原始的YOLO使用448×448的輸入分辨率。通過添加錨框,我們將分辨率更改為416×416。但是,由於我們的模型僅使用卷積和池化層,因此可以隨時調整其大小。我們希望YOLOv2能夠在不同尺寸的圖像上運行,因此我們將其訓練到模型中。
  我們不固定輸入圖像的大小,而是每隔幾次迭代就更改網絡。每10批我們的網絡就會隨機選擇一個新的圖像尺寸。由於我們的模型下采樣了32倍,因此我們從以下32的倍數中提取:{320,352,...,608}。因此,最小的選項是320×320,最大的是608×608。我們將網絡調整為該尺寸並繼續訓練。
  這種制度迫使網絡學習各種維度的輸入以預測良好。這意味着同一網絡可以預測不同分辨率的檢測。網絡在較小的尺寸下運行速度更快,因此YOLOv2可以在速度和准確性之間輕松權衡。
  在低分辨率下,YOLOv2可以用作便宜而相當准確的檢測器。在288×288的分辨率下,它的mAP運行速度超過90 FPS,幾乎與Fast R-CNN一樣好。這使其成為較小GPU,高幀率視頻或多個視頻流的理想選擇。
  在高分辨率下,YOLOv2是在VOC 2007上具有78.6 mAP的先進檢測器,同時仍以實時速度運行。有關YOLOv2與VOC 2007上其他框架的比較,請參見表3。

  進一步的實驗。我們訓練了YOLOv2在VOC 2012上進行檢測。表4顯示了YOLOv2與其他最新檢測系統的比較性能。YOLOv2達到了73.4 mAP,而運行速度卻比其他方法快得多。我們還在COCO上進行了訓練,並與表5中的其他方法進行了比較。在VOC度量標准(IOU = 0.5)上,YOLOv2獲得44.0 mAP,與SSD和Faster R-CNN相當。

3.更快
  我們希望檢測是准確的,但我們也希望它是快速的。大多數檢測應用程序,例如機器人技術或自動駕駛汽車,都依賴於低延遲預測。為了最大程度地提高性能,我們從底層開始將YOLOv2設計得更快速。
  大多數檢測框架都依賴VGG-16作為基本特征提取器。VGG-16是一個功能強大,准確的分類網絡,但它不必要地復雜。VGG-16的卷積層需要306.9億個浮點運算,才能在的單個圖像上進行單次通過。
  YOLO框架使用基於Googlenet架構的自定義網絡。網絡比VGG-16更快,僅使用85.2億次操作進行正向傳遞。但是,其准確性比VGG16稍差。對於單作,224×224分辨率的排名前5位的精度,YOLO的自定義模型在ImageNet為88.0%,而VGG-16則為90.0%。
  Darknet-19。我們提出了一種新的分類模型作為YOLOv2的基礎。我們的模型建立在網絡設計的先前工作以及該領域的常識的基礎上。與VGG模型類似,我們在每個池化步驟之后都使用3×3濾波器,並使通道數量翻倍。遵循網絡中網絡(NIN)的工作之后,我們使用全局平均池進行預測,並使用1×1過濾器壓縮3×3卷積之間的特征表示。我們使用批量歸一化來穩定訓練,加快收斂速度,並使模型正規化。
  我們的最終模型稱為Darknet-19,具有19個卷積層和5個maxpooling層。有關完整說明,請參見表6。Darknet-19僅需要55.8億次操作來處理圖像,但在ImageNet上達到72.9%的top-1精度和91.2%的top-5精度。

  分類訓練。我們使用隨機梯度下降法在標准ImageNet 1000類分類數據集上訓練網絡160輪,使用Darknet神經網絡框架,起始學習率為0.1,多項式率衰減為4的冪,權重衰減為0.0005,動量為0.9。在訓練期間,我們使用標准的數據增強技巧,包括隨機裁剪,輪換以及色相,飽和度和曝光偏移。
  如上所述,在以224×224的圖像進行初始訓練后,我們以較大的尺寸448對網絡進行了微調。對於此微調,我們使用上述參數進行訓練,但只進行了10輪,並且學習速率為\({10}^{−3}\)。在這種更高的分辨率下,我們的網絡可實現76.5%的top-1精度和93.3%的top-5精度。
  檢測訓練。我們通過刪除最后一個卷積層並改為在三個3×3卷積層上分別添加1024個濾鏡,再加上最后一個1×1卷積層(具有我們需要檢測的輸出數量)來修改該網絡以進行檢測。對於VOC,我們預測5個框,每個框具有5個坐標,每個框20個類,因此有125個過濾器。我們還從最后的3×3×512層到倒數第二個卷積層添加了一個直通層,以便我們的模型可以使用細粒度特征。
  我們為網絡訓練了160輪,起始學習率為\({10}^{−3}\),然后在60和90輪將其除以10。我們使用0.0005的權重衰減和0.9的動量。我們使用與YOLO和SSD類似的數據增強方法,並進行隨機裁剪,顏色偏移等。我們在COCO和VOC上使用相同的訓練策略。

4.更強
  我們提出了一種聯合訓練分類和檢測數據的機制。我們的方法使用標記為檢測的圖像來學習特定於檢測的信息,例如邊界框坐標預測和對象性以及如何對常見對象進行分類。它使用僅帶有類別標簽的圖像來擴展它可以檢測到的類別數量。
  在訓練期間,我們混合了來自檢測和分類數據集的圖像。當我們的網絡看到標記為要檢測的圖像時,我們可以基於完整的YOLOv2損失函數向后傳播。當它看到分類圖像時,我們僅從體系結構中特定於分類的部分反向傳播損失。
  這種方法提出了一些挑戰。檢測數據集僅具有通用對象和通用標簽,例如“狗”或“船”。分類數據集的標簽范圍更廣更深。ImageNet有一百多種犬,包括“諾福克梗”,“約克夏梗”和“貝靈頓梗”。如果要對兩個數據集進行訓練,則需要一種一致的方式來合並這些標簽。
  大多數分類方法在所有可能的類別上使用softmax層來計算最終概率分布。使用softmax假定類是互斥的。這帶來了合並數據集的問題,例如,您不希望使用此模型將ImageNet和COCO合並,因為“諾福克梗”和“狗”類不是互斥的。
  相反,我們可以使用多標簽模型來合並不假定互斥的數據集。這種方法忽略了我們對數據了解的所有結構,例如,所有COCO類都是互斥的。
  分層分類。ImageNet標簽是從WordNet中提取的,WordNet是一個語言庫,它構建概念及其相關性。在WordNet中,“諾福克梗”和“約克夏梗”都是“梗”的下位詞,“梗”是“獵狗”的一種,這是“狗”的一種,是“犬”的一種,等等。大多數分類方法假定標簽的結構平坦,但是對於組合數據集,結構正是我們所需要的。
  由於語言很復雜,WordNet的結構是有向圖,而不是樹。例如,“狗”既是“犬”的類型,又是“家畜”的類型,它們都是WordNet中的同義詞集。我們不使用完整的圖結構,而是通過根據ImageNet中的概念構建層次樹來簡化問題。
  為了構建該樹,我們檢查ImageNet中的視覺名詞,並查看它們通過WordNet圖到達根節點(在本例中為“物理對象”)的路徑。許多同義詞集在圖中只有一條路徑,因此首先我們將所有這些路徑添加到樹中。然后,我們迭代檢查剩下的概念,並添加使樹長得盡可能小的路徑。因此,如果一個概念有兩個到根的路徑,一個路徑會給樹增加三個邊緣,而另一個路徑只會增加一個邊緣,那么我們選擇較短的路徑。
  最終結果是WordTree,這是視覺概念的分層模型。 為了用WordTree執行分類,我們在給定同義集的情況下,針對該同義集的每個下位詞的概率,預測每個節點的條件概率。 例如,在“ terrier”節點,我們預測:

$Pr(Norfolk terrier|terrier)$
$Pr(Yorkshire terrier|terrier)$
$Pr(Bedlington terrier|terrier)$
$...$

  如果要計算特定節點的絕對概率,我們只需沿着樹到根節點的路徑,再乘以條件概率。 因此,如果我們想知道圖片是否為諾福克梗,我們可以計算:

$Pr(Norfolk terrier) = Pr(Norfolk terrier|terrier)$
$∗Pr(terrier|hunting dog)$
$∗...∗$
$∗Pr(mammal|Pr(animal)$
$∗Pr(animal|physical object)$

  出於分類目的,我們假設圖像包含一個對象:\(Pr(physical object)=1\)。為驗證此方法,我們在使用1000類ImageNet構建的WordTree上訓練Darknet-19模型。為了構建WordTree1k,我們添加了所有中間節點,這將標簽空間從1000擴展到了1369。在訓練過程中,我們在樹上傳播了真值標簽,因此,如果將圖像標記為“諾福克梗”,它也會被標記為 “狗”和“哺乳動物”等。為了計算條件概率,我們的模型預測了1369個值的向量,並且我們計算了所有具有相同概念的下義詞的系統集的softmax,請參見圖5。

  使用與以前相同的訓練參數,我們的分層Darknet-19達到71.9%的top-1准確性和90.4%的top-5准確性。盡管添加了369個其他概念,並且我們的網絡預測了樹結構,但我們的准確性僅下降了一點。以這種方式執行分類也有一些好處。對於新的或未知的對象類別,性能會正常降低。例如,如果網絡看到一條狗的圖片,但不確定它是哪種類型的狗,它仍將以較高的置信度預測“狗”,但在下義詞中會散布較低的置信度。
  該配方也可用於檢測。現在,我們不用假設每個圖像都有一個對象,而是使用YOLOv2的對象預測器為我們提供\(Pr(physical object)\)的值。檢測器預測邊界框和概率樹。我們向下遍歷樹,在每次拆分時采用最高的置信度,直到達到某個閾值並預測該對象類。
  數據集與WordTree組合。我們可以使用WordTree以明智的方式將多個數據集組合在一起。我們僅將數據集中的類別映射到樹中的同義詞集。圖6顯示了使用WordTree組合ImageNet和COCO的標簽的示例。WordNet非常多樣化,因此我們可以對大多數數據集使用此技術。

  聯合分類和檢測。現在我們可以使用WordTree合並數據集,我們可以在分類和檢測上訓練我們的聯合模型。我們想訓練一個超大型探測器,因此我們使用COCO檢測數據集和完整ImageNet版本中的前9000個類來創建組合數據集。我們還需要評估我們的方法,以便我們添加ImageNet檢測挑戰中我們尚未包含的所有類。此數據集的相應WordTree具有9418個類。ImageNet是一個更大的數據集,因此我們通過對COCO進行過采樣來平衡數據集,以使ImageNet僅大4倍。
  使用此數據集,我們訓練YOLO9000。我們使用基本的YOLOv2架構,但是僅使用3個先驗框而不是5個先驗框來限制輸出大小。當我們的網絡看到檢測圖像時,我們會像往常一樣反向傳播損耗。對於分類損失,我們僅反向傳播等於或高於標簽相應水平的損失。例如,如果標簽為“ dog”,則我們確實會將樹中的預測錯誤分配給“ German Shepherd”和“ Golden Retriever”之間的樹,因為我們沒有該信息。
  當看到分類圖像時,我們僅反向傳播分類損失。為此,我們只需要找到預測該類最高概率的邊界框,然后僅在其預測樹上計算損失即可。我們還假設,預測框與真值框的重疊量至少為0.3 IOU,並且我們根據此假設反向傳播對象損失。
  通過這次聯合培訓,YOLO9000學會了使用COCO中的檢測數據來查找圖像中的對象,並且學會了使用ImageNet中的數據對這些對象進行各種各樣的分類。
  我們在ImageNet檢測任務上評估YOLO9000。ImageNet的檢測任務與COCO共享44個對象類別,這意味着YOLO9000僅看到了大多數測試圖像的分類數據,而不是檢測數據。YOLO9000總體獲得19.7 mAP,在檢測數據中從未見過任何標記的不相交的156個對象類獲得16.0 mAP的性能。該mAP高於DPM所獲得的結果,但是YOLO9000在不同的數據集上進行了僅部分監督的訓練。它還同時實時檢測9000個其他對象類別。

  當我們在ImageNet上分析YOLO9000的性能時,我們會看到它很好地學習了新的動物種類,但在學習服裝和設備等類別方面卻步履維艱。新動物更容易學習,因為客觀性預測可以從COCO中的動物得到很好的概括。相反,COCO沒有任何類型的服裝的邊界框標簽,僅有人的,因此YOLO9000很難為“太陽鏡”或“游泳褲”等類別建模。

5.結論
  我們介紹實時檢測系統YOLOv2和YOLO9000。YOLOv2是最先進的,並且在各種檢測數據集中比其他檢測系統要快。此外,它可以在各種圖像尺寸下運行,以在速度和精度之間提供平滑的折衷。
  YOLO9000是一個實時框架,可通過聯合優化檢測和分類來檢測9000多個對象類別。我們使用WordTree合並來自各種來源的數據,並使用聯合優化技術在ImageNet和COCO上同時進行訓練。YOLO9000是朝着縮小檢測和分類之間的數據集大小差距邁出的重要一步。
  我們的許多技術都在對象檢測之外推廣。ImageNet的WordTree表示形式為圖像分類提供了更豐富,更詳細的輸出空間。使用分層分類的數據集組合在分類和細分領域中將很有用。像多尺度訓練這樣的訓練技術可以在各種視覺任務中提供好處。
  對於未來的工作,我們希望使用類似的技術進行弱監督的圖像分割。我們還計划使用更強大的匹配策略(在訓練過程中為分類數據分配弱標簽)來改善檢測結果。計算機視覺擁有大量的標記數據。我們將繼續尋找方法,將不同的數據源和數據結構整合在一起,以建立更強大的視覺世界模型。

參考文獻(略)

以上。翻譯不當之處請指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM