1. 程式人生 > >目標檢測(六)YOLOv2__YOLO9000: Better, Faster, Stronger

目標檢測(六)YOLOv2__YOLO9000: Better, Faster, Stronger

eight tle rop 尋找 logs better maps 時間 wide

項目鏈接

Abstract

在該論文中,作者首先介紹了對YOLOv1檢測系統的各種改進措施。改進後得到的模型被稱為YOLOv2,它使用了一種新穎的多尺度訓練方法,使得模型可以在不同尺寸的輸入上運行,並在速度和精度上很容易找到平衡。當處理速度為40FPS時,YOLOv2取得76.8mAP的成績,超過了當時最好的檢測方法Faster RCNN with ResNet和SSD

接著,作者提出了一種在object detection和classification兩個任務上進行聯合訓練的方法。借助該方法,作者同時在COCO檢測數據集和ImageNet分類數據集上訓練YOLO9000,最終使得YOLO9000能夠檢測在dectection dataset中不存在相應數據但是在cassification dataset中存在的classes


1. Introduction

通用的目標檢測算法應該速度快、精度高,並且能夠識別a wide variety of objects。雖然目前的detection frameworks已經變得足夠fast and accuracy,但是絕大多數方法的檢測範圍仍局限於小部分objects

作者發現,與分類和tagging任務的數據集相比,當前用於目標檢測的數據集非常受限。通常使用的目標檢測數據集有幾千到幾十萬張圖像,對應幾十到幾百個tags,而分類數據集有幾百萬張圖像,對應幾萬到幾十萬種categories。作者希望目標檢測的範圍能夠達到目標分類那樣的水平,可是標記檢測使用的images比標記分類用的images要expensive很多,因此想得到擁有大量categories的目標檢測數據集是不可能的

為了解決這個問題,作者在論文中提出了一種數據集結合法(dataset combination method)來利用現有的大量分類數據擴大當前檢測系統的檢測範圍。該方法使用目標分類的分層視圖(hierarchical view )將不同的數據集結合在一起

同時,作者提出了一種聯合訓練算法(joint training algorithm),使得object detection model能夠同時在檢測和分類數據集上訓練。Model使用帶標簽的detection images來學習精確地定位objects,同時使用classification images來增加可檢測的categories,提高魯棒性

最終,使用數據集結合法和聯合訓練算法訓練得到的YOLO9000可以實時檢測超過9000種不同的object categories


後面的內容分為兩部分:一部分是基於base yolo檢測算法改進得到YOLOv2的過程;另一部分是使用數據集結合法和聯合訓練法訓練YOLO9000的過程


第一部分:對YOLOv1的改進

在記錄此部分之前我們先來簡單地回顧下yolo模型的大致檢測步驟:

技術分享圖片

  • 將輸入圖像劃分成S*S的網格(論文中使用7*7 grid,通過設置輸出shape實現劃分);
  • 每個網格cell預測輸入圖像對應位置上的B個bounding boxes(通過對相同shape的labels進行回歸訓練實現對應位置的預測;沒有使用anchor boxes,因為僅是指定了每個cell預測的數量,沒有指定先驗框);
  • 根據設置的confidence score閾值去除預測得到的S*S*B個bounding boxes中score較低的bboxes,再利用非極大值抑制去除冗余的bounding boxes(避免多個bbox對應一個object)

2. Better

與Fast RCNN相比,YOLOv1有較多的定位誤差;與基於region proposals的目標檢測算法相比,YOLOv1的召回率比較低。因此作者關註如何在保持分類精度的同時提高回召率與定位精度

計算機視覺中一般傾向於使用更大更深的網絡,因為訓練larger networks或者集成多個模型能夠帶來更好的性能。但是,作者希望YOLOv2在做到更精確的同時,仍能夠保持很快的速度。因此,作者沒有采用擴大網絡的方法,相反地,作者簡化了網絡,使得representation更容易學習。為此,作者基於以往的工作提出了一系列ideas來改善YOLOv1的性能。總的結果如Table 2所示:技術分享圖片

具體如下:

  • Batch Normalization
    CNN在訓練過程中網絡每層輸入的分布一直在改變,這會使訓練過程難度加大,但可以通過 normalize 每層的輸入解決這個問題。Batch normalization 可以顯著改善收斂性,同時不需要其他形式的 regularization。通過在 YOLOv1 的所有卷積層中添加 batch normalization,mAP可以獲得超過2%的提升。同時,batch normalization也有助於regularize the model。借助batch normalization,model可以不使用dropout減少overfitting
  • High Resolution Classifier
    目前所有的 state-of-the-art 目標檢測方法都使用在 ImageNet 上預訓練的 classifier,YOLOv1 也不例外。從 AlexNet 網絡開始,大多數 classifiers 的輸入圖像都小於256*256。同樣,原始的 yolov1在224*224的輸入圖像上訓練classifier network,然後增加圖像的分辨率至448*448訓練detection network。這就意味著在轉換分辨率後網絡需要同時學習object detetion和適應新的input resolution。
    在YOLOv2中,作者先在ImageNet數據集上以448*448的分辨率fine tune 分類網絡(classification network)10個epochs。這樣就給了網絡一定的時間來調整filters,以便在更高的分辨率輸入上work better。接著作者在detection dataset上fine tune 網絡。實驗證實,作者使用的high resolution classification network給mAP帶來幾乎4%的提升。
  • Convolutional With Anchor Boxes
    YOLOv1使用feature extractor後面的fully connected layers直接預測bounding boxes的坐標,使得網絡丟失較多的空間信息,從而定位不準。與直接預測坐標不同,Faster RCNN使用hand-picked priors預測bounding boxes。Faster RCNN中的region proposal network(RPN)只使用卷積層預測anchor boxes的offsets和confidences(RPN先在feature maps的每個位置預測出k個尺寸為achor boxes的region proposals,然後通過後面的 detection network 對 region proposals 進行分類和邊框回歸,以獲得更逼近 ground truth boxes 的 bounding boxes)。因為預測層是卷積層,所以RPN會在 feature maps 的每個location都預測出offsets。顯然,預測offsets而不是coordinates簡化了問題,並且使得網絡更容易學習。
    作者為了在YOLOv2使用anchor boxes來預測bounding boxes,移除了YOLOv1網絡中的全連接層。首先,作者除去了後面的一層pooling layer以便網絡的卷積層輸出有更高的resolution。同時,作者將輸入圖像的尺寸由 448*448 縮小到 416*416,這麽做是為了在 feature maps 中獲得奇數個 locations(448/32=14,426/32=13),從而使 feature maps 中只存在一個 center cell。作者發現圖像的 objects,尤其是large objects,往往位於圖像的中心。所以在feature maps的中心由一個location預測這些objects要優於4個locations 進行預測。
    當使用anchor boxes之後,作者沒有使用空間位置對應類別預測的機制,而是為每個anchor box預測 class 和 objectness。與YOLOv1相同,objectness prediction仍然預測ground truth與 proposed box的IOU值;class predictions預測在有object的情況下類的條件概率(是不是沒有采用Faster中的做法而是采用了V1的做法)
    采用anchor boxes以後雖然在精度上有所損失,但是帶來的好處也是明顯的。YOLOv1在每幅圖像中只預測98個boxes(7*7*2),但是使用anchor boxes之後中間模型(intermediate model)預測出超過一千個boxes。此外,沒有使用anchor boxes時中間模型的mAP為69.5,召回率為81%。使用anchor boxes之後,模型的mAP為69.2,召回率為88%。可見,雖然mAP降低了,但是上升的召回率意味著模型還有很大的提升空間。
  • Dimension Clusters
    作者在使用anchor boxes時遇到兩個問題第一個是box dimensions(anchor boxes的尺寸)是hand picked。網絡能夠學會適當地調整boxes,但是如果我們為網絡找到better priors,那麽網絡可以更容易地學習預測good detections
    在這個問題上作者沒有像 Faster RCNN 中那樣手動選擇 priors,而是使用 k-means clustering 在訓練數據集中的 bounding boxes 上自動尋找good priors。作者沒有使用標準的k-means(使用Euclidean distance),因為那樣會導致 large boxes 比 smaller boxes 產生更多error。考慮到需要的priors應該能夠帶來good IOU scores,並且獨立於size of box,作者就使用了如下的距離度量:
    技術分享圖片 既然使用了k-means來確定priors,那麽超參數k的取值必然應該合理地選取。論文中作者嘗試了不同取值的k,並且繪制了曲線圖來直觀表明聚類後各box與最近重心(centroid)的IOU的均值變化,如Fig.2所示:
    技術分享圖片 作者在權衡模型復雜度與高召回率之後選擇 k=5。通過對比發現,聚類得到的 cluster centriods 與手動精選(hand-picked)的 anchor boxes 有很大不同。聚類得到的 cluster centroids有更少的short,wide boxes,更多的tall,thin boxes。此外,作者還將k-means的聚類結果與hand-picked anchor boxes與數據集中boxes的IOU的均值做了比較,如Table 1所示。從表中可知,在僅有5個priors時,centroids的表現就能與9個anchor boxes類似(平均 IOU 61.0 vs 60.9)。如果使用9個centroids的話,會得到一個高得多的average IOU。這表明,使用k-means來生成邊界框意味著使用了更好的表示方式啟動模型,並使任務更容易學習技術分享圖片
  • Direct location prediction
    使用anchor boxes時遇到的第二個問題是:model instability,尤其在early iterations期間。大部分不穩定性來自對 (x, y) 位置的預測。基於region proposals的網絡預測 tx ty 後按照如下公式計算中心坐標(x, y):
    技術分享圖片 從公式可以看出,如果預測值 tx=1,那麽box會向右移動一個anchor box的寬度;如果 tx=-1,那麽box會向左移動一個anchor box的寬度。
    該公式是無約束的,所以不管在什麽位置預測box,任何一個bounding box可以出現在圖像的任何一個位置。在隨機初始化的情況下,模型需要耗費很長時間才能穩定地預測到合理地offsets。
    上面的公式其實是錯誤的,應該將減號 “-” 換成 “+”,因為Faster RCNN中對anchor boxes坐標的計算如下,式中 x 是坐標預測值,xa 是anchor boxes的坐標(固定值,feature map中每個位置有9個anchor boxes),x*是坐標真實值(即訓練數據的標註信息),其它變量與此類似。t 是偏移量:
    技術分享圖片
    在該論文中,作者沒有像Faster RCNN中那樣預測boxes相對整幅圖像的offsets,而是采用YOLOv1的方法,對boxes坐標相對於所在grid cell的offsets進行預測。這樣就將 ground truth 的位置約束到了0-1範圍內。但是網絡預測到的輸出並不一定在0-1範圍內,為了解決這個問題作者對網絡預測的輸出使用了 logistic activation。
    網絡在輸出的feature map中為每個grid cell 預測5個bounding boxes。每個bounding box包含5個坐標,txtytwth to。如果某個cell相對於圖像左上角的offset是(cx , cy),並且bounding box prior的寬和高為pwph,那麽網絡的預測值計算如下:
    技術分享圖片 由於對location prediction進行了約束,參數化更容易學習,使得網絡更穩定。網絡使用dimension clusters和direct location prediction與使用anchor boxes相比,在mAP上提升了5%。

    技術分享圖片
  • Fine-Grained Features
    修改的YOLO在一個13*13的feature map上進行預測。雖然這足以勝任large objects的檢測,但是用上細粒度特征的話,這可能對小尺度的物體檢測有幫助。Faster RCNN和SSD都在不同分辨率的feature maps上使用proposal networks。在YOLOv2中,作者使用了一種不同的方法,只需添加一個passthrough layer(轉移層)將淺層特征圖(分辨率26*26)連接到深層特征圖(分辨率13*13)
    Passthrough layer將higher resolution features和low resolution features連接起來,連接方式是將相鄰的特征堆疊到不同的通道而非空間位置,類似於ResNet中的identity mappings。該方法把26*26*512的feature map轉換成13*13*2048的feature map,得到的feature map可以與原始的features相連。YOLOv2的detectors使用的就是經過擴展的feature map,目的是獲得更好的 fine grained features。實驗表明,該措施能給模型帶來1%的性能提升。
    技術分享圖片關於passthrough layer,具體來說就是特征重排(不涉及參數學習),前面26*26*512的feature map使用按行和按列隔行采樣的方法得到4個新的feature maps,維度都是13*13*512,然後進行連接操作,得到13*13*2048的feature maps,並將其拼接到後面的層,相當於做了一次特征融合,有利於檢測小目標。

  • Multi-Scale Training
    YOLOv1的輸入分辨率為448*448,使用anchor boxes以後作者將分辨率改為416*416(獲得center grid cell)。但是,因為我們的模型只使用卷積層和池化層,所以它的輸入分辨率可以動態調整(輸入圖像的尺寸可變化)。作者希望YOLOv2可以魯棒地檢測不同尺寸的images,因此使用了不同分辨率的輸入圖像訓練模型。
    訓練時作者沒有固定輸入圖像的尺寸,而是每 10 個batchs隨機選擇一個新的尺寸。因為模型降采樣的參數是32,所以隨機尺寸在如下32的倍數構成的列表中選擇:{320,352,…..,608}。每次更換size相當於將網絡resize成另一個dimension,然後繼續訓練。
    該策略強迫網絡學習更好地在不同輸入維度上進行預測,這意味著同一個網絡可以對不同分辨率的圖像進行檢測。同時,圖像尺寸越小YOLOv2檢測速度越快,這為模型在速度與精度之間提供了較為容易控制的平衡。在低分辨率時,v2是一個輕便且精度相當高的detector。在分辨率為288*288時,YOLOv2可以以90FPS的速度運行,且mAP幾乎和Fast RCNN一樣好。因此,在低分辨率時,V2非常適用於smaller GPUs,高幀率視頻或multiple video streams。在高分辨率時,YOLOv2達到了先進水平,在VOC2007數據集上實時運行的同時mAP達到了78.6。從Table 3和Fig.4可見YOLOv2與其他網絡在VOC 2007上的比較。
    技術分享圖片技術分享圖片
  • Further Experiments
    作者在VOC 2012上對YOLOv2進行了檢測訓練。Table 4 展示了YOLOv2與其他先進檢測系統之間的性能比較。可見,YOLOv2在運行得比其它方法快很多的情況下mAP依然達到了73.4技術分享圖片
    作者還在COCO數據集上訓練了YOLOv2,並且與其它方法進行了比較,如Table 5所示。在COCO數據集上(IOU=0.5),YOLOv2的mAP達到44.0,與SSD和Faster RCNN相當技術分享圖片


3. Faster

作者希望網絡的檢測過程不僅精度高而且速度快。因為在大多數檢測應用的場景中,比如機器人和自動駕駛,低延遲預測相當重要。為了最大化網絡的性能,作者將YOLOv2的基礎結構設計得速度很快(意思是使用了速度很快的Darknet-19分類器作為feature extractor)
大多數 detection frameworks 將 VGG-16 作為基礎的 feature extractor,這是因為 VGG-16 是一個強大精確的 classification network,但是它的結構比較復雜。此外,VGG-16的卷積層對分辨率為224*224的單幅圖像處理時需要進行30.69 billion次浮點運算。
YOLOv1將基於Googlenet architecture自定義的network用做特征提取器。該network比VGG-16快,且在前向傳播過程中只使用8.52 billion次運算,但是,它的精度略低於VGG-16

  • Darknet-19
    作者提出了一種新的classification model用做YOLOv2的基礎,即feature extractor。該classification model的設計參考了前人的設計經驗和領域內的基礎知識。比如,與VGG models類似,作者主要使用了 3*3 的filters,並且在每個池化操作之後將通道數加倍;參照 Network in Network,作者使用 Global average pooling 進行預測,並且使用 1*1 filters在 3*3 卷積之間壓縮特征表示(feature representation);此外,作者還使用 batch normalization來穩定訓練過程、加快收斂、規範化模型
    最終的 model被稱為 Darknet-19,它有19個卷積層和5個最大池化層,具體構成見 Table 6。Darknet-19在處理單幅圖像時只需要5.58 billion次運算,但是卻能在數據集 ImageNet 上取得 72.9% 的 top-1 accuracy和 91.2% 的 top-5 accuracy

技術分享圖片

  • Training for classification
    作者在標準 ImageNet 1000 class classification dataset 上使用梯度下降法訓練 YOLOv2 160個epochs,其中初始學習速率為 0.1,多項式速率衰減的冪為4(polynimial rate decay with a power of 4),權重衰減系數為0.0005,動量為0.9,並且使用了Darknet網絡。分類訓練時作者使用了標準的數據增強技術(Standard data augmentation tricks),包括隨機裁剪、旋轉和色度(hue)、飽和度(saturation)、曝光度(exposure)偏移
    在對分辨率為224*224的輸入進行分類訓練之後,作者開始在更大尺寸448*448的輸入上對網絡進行fine tune。這次 fine tune 會訓練網絡的所有參數,但是只會訓練 10 個epochs,微調時學習速率為10e-3。微調完成後,網絡在該分辨率的輸入上進行分類時 top-1 精度達到76.5%,top-5 精度達到93.3%
  • Training for detection
    第一次fine tune之後對網絡結構進行修改,使之執行detection task。具體是將最後一層卷積層刪除,然後添加 3 層帶1024個filters的3*3卷積層,每層卷積層後面再添加一層1*1的卷積層(filters數目與需要檢測的類別數相同,具體見Table 6)。如果使用VOC數據集進行檢測訓練,那麽網絡會在每個grid cell 預測5個boxes,每個box又有5個坐標和20個classes,所以需要125 個filters。同時,為了使模型能夠使用細粒度特征(Fine grain features),在最後一個3*3*512卷積層和倒數第二個之間添加一層 Passthrough layer
    網絡結構修改完成以後對模型進行第二次 fine tune。微調共進行160 個epochs,而且在60次和90次的時候,學習率衰減為原來的十分之一。其中,初始學習速率設為 10e-3,權重衰減設為 0.0005,動量設為0.9。同樣,訓練時也使用了數據增強(Data augmentation),不過與YOLOv1和SSD類似,包括隨機裁剪、顏色偏移等。采用的訓練策略與在COC和VOC訓練時相同。


第二部分:使用數據集結合法和聯合訓練法訓練YOLO9000

4. Stronger
作者提出一種聯合分類訓練和檢測訓練的機制,使用該機制可使YOLOv2的檢測種類擴充到數千種。這部分內容待必要時再做補充!!!


5. Conclusion


6. 個人總結

  • 模型的使用分為train + test兩大部分,有很大區別,首先就是Loss
  • Faster RCNN中RPN先在卷積層輸出的feature maps中的每個位置預測k個achor boxes,然後根據scores及其它操作篩選出 region proposals(由於anchors的尺寸已知,所以此時的region proposals的位置大致已知),最後通過後面的detection network對region proposals進行分類和邊框回歸,以獲得更逼近ground truth boxes的bounding boxes。(從這裏可以看出,在Faster RCNN中,RPN使用anchor boxes方法在feature maps上每個位置產生的是k個anchor boxes,經過篩選後的boxes才被稱 region proposals,網絡進行邊框回歸得到的是bounding boxes,需要註意名稱的不同)
  • Faster RCNN中anchor boxes用在RPN網絡中,用來生成region proposals ,而YOLOv2用於回歸檢測
  • Faster RCNN中的RPN網絡沒有將feature maps劃分為grid,但使用了人工精選的(Hand-picked)anchor boxes(先驗知識)。不過,在feature map的每個位置均預測 k個anchor boxes就相當於對特征圖進行了劃分。在訓練時,需要先根據先驗知識為訓練集中標註的每個ground-truth box確定與之最匹配(根據IOU)的anchor box,然後將每個ground-truth box的bounding換成與最佳anchor box相同的size。這樣處理使得網絡在訓練時很容易學習邊框的定位;

    YOLOv1將網絡劃分為 S*S 的 grid,但是沒有使用anchor boxes,只是指定每個cell預測2個bbox。由於缺乏先驗知識,在訓練時不需要事先為訓練集中的 ground-truth boxes尋找最佳anchor並轉換成對應的size,只需要預測指定數量的bounding boxes即可;

    YOLOv2將網絡劃分為 S*S 的 grid,並且使用了由 dimension cluster 得到的anchor boxes,指定每個grid cell 預測 k 個bounding boxes。因此,在訓練時,需要先根據先驗知識為訓練集中標註的每個ground-truth box確定與之最匹配(根據IOU)的anchor box,並將每個ground-truth box的 size 換成與最佳anchor box相同的size。由於anchor boxes的尺寸是通過維度聚類得到的,優於人工精選的結果,所以YOLOv2比Faster RCNN更容易學習邊框的定位。可見,YOLOv2與Faster RCNN使用的anchor boxes類似,除了anchor boxes在兩個網絡中的用處不同(RPN 和 回歸預測)以外,僅在 grid 大小和 anchor boxes的 size上有區別。

    anchor boxes作為先驗知識有兩方面的信息(個數,尺寸。Faster RCNN的尺寸是人工精選的,YOLOv2是維度聚類得到的):一是每個cell預測的bboxes的個數與anchors的個數一致;二是在訓練時將原始數據中的ground-truth boxes調整到與anchors匹配的尺寸,這只是為了training更容易。另外,在inference(訓練的正向過程)和test(模型訓練結束後進行的測試過程)時不會使用尺寸信息,輸出的是預測出的bounding boxes坐標
  • YOLOv2沒有像Faster RCNN那樣預測bounding boxes相對整幅圖像的offsets,而是采用YOLOv1的方法,對boxes坐標相對於所在grid cell的offsets進行預測


參考資料

  • YOLOv2 論文筆記
  • yolov2論文翻譯
  • 論文地址
  • 目標檢測|YOLOv2原理與實現(附YOLOv3)

目標檢測(六)YOLOv2__YOLO9000: Better, Faster, Stronger