YOLO升級版:YOLOv2和YOLO9000解析
評論:YOLO是基於深度學習方法的端到端實時目標檢測系統(YOLO:實時快速目標檢測)。YOLO的升級版有兩種:YOLOv2和YOLO9000。作者採用了一系列的方法優化了YOLO的模型結構,產生了YOLOv2,在快速的同時準確率達到state of the art。然後作者採用wordtree的方法,綜合ImageNet資料集和COCO資料集訓練YOLO9000,使之可以實時識別超過9000種物品。本文有以下幾點非常值得參考:
一,對模型的一系列分析和改進非常值得參考;
二,採用多尺度訓練方法,使模型可以適應不同的輸入尺寸,非常值得參考。
三,綜合不同資料集的方法非常值得參考;
四,聯合訓練方法也是非常值得參考;
五,YOLO端到端實時檢測和識別的思路非常值得參考。
總體說,本文很值得參考。
簡介
YOLO9000是可以檢測超過9000種類別的實時檢測系統。首先,作者在YOLO基礎上進行了一系列的改進,產生了YOLOv2。YOLOv2在PASCAL VOC和COCO資料集上獲得了目前最好的結果(state of the art)。然後,採用多尺度訓練方法,YOLOv2可以根據速度和精確度需求調整輸入尺寸。67FPS時,YOLOv2在VOC2007資料集上可以達到76.8mAP;40FPS,可以達到78.6mAP,比目前最好的Faster R-CNN和SSD精確度更高,檢測速度更快。最後提出了目標檢測和分類的共訓練方法。採用該方法,作者分別在COCO目標檢測資料集和ImageNet分類資料集上訓練了YOLO9000。聯合訓練使YOLO9000可以預測沒有labelled的目標檢測資料。YOLO9000在ImageNet驗證集(200類)上獲得了19.7mAP。其中,156類沒有出現在COCO訓練集中,YOLO9000獲得了16.0mAP。YOLO9000可以實時識別超過9000類別。
1 前言
目標檢測系統要求快速,準確以及能識別大範圍種類數量。但是,目前基於深度神經網路方法的目前檢測系統能識別的物品種類較少。其原因在於:相對於物品分類資料集,目標檢測資料集中的物品種類較少。標記目標識別資料集所耗費的精力遠大於標記物品分類資料集。物品分類資料集包含成千上萬種超過數百萬張圖片,而目標識別資料集就很小了。
本文中,作者提出了一種結合不同型別資料集的方法。基於該方法,作者提出了一種新的聯合訓練方法,結合目前物品分類資料集的優點,將其應用於訓練目標檢測模型。模型可以從目標檢測資料集中學會準確定位目標,同時從物品分類資料集中學會識別更多的種類,增強模型的魯棒性。
採用該方法,作者訓練了可以識別超過9000種物品的實時目標檢測與識別系統-YOLO9000。首先,作者在YOLO的基礎上進行了改進,產生了YOLOv2(獲得了state of the art)。然後,作者採用資料集結合方法和聯合訓練方法,採用ImageNet和COCO資料集訓練該模型,使該模型可以識別和檢測 超過9000種類別。
2 改進-YOLOv2
YOLO相對於目前最好的目標檢測系統存在的問題是精確度不夠。錯誤專案分析顯示,相對於Fast R-CNN,YOLO在目標定位方面錯誤率較高。因此,對於YOLO的改進集中於在保持分類準確率的基礎上增強定位精確度。改進的專案如表2-1所示。
表2-1 YOLOv2的改進
<img src="https://pic1.zhimg.com/v2-0a1a9e06ec5ec77efc1efc4eb960d44c_b.png" data-rawwidth="842" data-rawheight="331" class="origin_image zh-lightbox-thumb" width="842" data-original="https://pic1.zhimg.com/v2-0a1a9e06ec5ec77efc1efc4eb960d44c_r.png">2.1 Batch Normalization
Batch Normalization可以提高模型收斂速度,減少過擬合。作者在所有卷積層應用了Batch Normalization,使結果提升了2%。同時,Batch Normalization的應用,去除了dropout,而不會過擬合。
2.2 High Resolution Classifier
目前最好的影象分類器採用基於ImageNet資料集預訓練模型。大部分類器輸入影象尺寸小於256×256。原始YOLO接受影象尺寸為224×224。在YOLOv2中,作者首先採用448×448解析度的ImageNet資料finetune使網路適應高解析度輸入;然後將該網路用於目標檢測任務finetune。高解析度輸入使結果提升了4%mAP。
2.3 Convolutional With Anchor Boxes
YOLO採用全連線層來直接預測bounding boxes,而Fast R-CNN採用人工選擇的bounding boxes。Fast R-CNN中的 region proposal network僅採用卷積層來預測固定的boxes(anchor boxes)的偏移和置信度。
作者去除了YOLO的全連線層,採用固定框(anchor boxes)來預測bounding boxes。首先,去除了一個pooling層來提高卷積層輸出解析度。然後,修改網路輸入尺寸:由448×448改為416,使特徵圖只有一箇中心。物品(特別是大的物品)更有可能出現在影象中心。YOLO的卷積層下采樣率為32,因此輸入尺寸變為416,輸出尺寸為13×13。
採用anchor boxes,提升了精確度。YOLO每張圖片預測98個boxes,但是採用anchor boxes,每張圖片可以預測超過1000個boxes。YOLO模型精確度為69.5mAP,recall為81%;採用anchor boxes方法後,結果為69.2mAP,recall為88%。
2.4 Dimension Clusters
在YOLO模型上採用anchor boxes有兩個關鍵。第一,box維度為人工選擇。模型可以學會適應boxes,但是如果人工選擇更好的boxes,可以讓模型更加容易學習。我們採用K-means聚類方法來自動選擇最佳的初始boxes。我們希望的是人工選擇的boxes提高IOU分數,因此,我們公式定義為:。k-means結果如圖2-1所示,作者選擇了k=5.
<img src="https://pic4.zhimg.com/v2-69d4bf5be3cf72df525b7779860cf24f_b.png" data-rawwidth="515" data-rawheight="448" class="origin_image zh-lightbox-thumb" width="515" data-original="https://pic4.zhimg.com/v2-69d4bf5be3cf72df525b7779860cf24f_r.png">圖2-1 k-means結果
圖2-1 k-means結果2.5 Direct location prediction
在YOLO模型上採用anchor boxes的第二個關鍵是模型不穩定性,特別是在前面幾輪訓練。大部分不穩定因素來源於預測boxes位置(x,y)。作者將預測偏移量改變為YOLO的預測grid cell的位置匹配性(location coordinate),將預測值限定在0-1範圍內,增強穩定性。網路對feature map中的每個cell預測5個bounding boxes。對每一個bounding boxes,模型預測5個匹配性值()。採用聚類方法選擇boxes維度和直接預測bounding boxes中心位置提高YOLO將近5%準確率。
2.6 Fine-Grained Features
改進後的YOLO對13×13的feature map進行目標檢測。更精確的特徵(finer grained features)可以提高對於小目標的檢測。作者向網路加入passtrough層以增加特徵。passthrough類似於ResNet,將高解析度特徵和低解析度特徵結合,使26×26×512的特徵圖轉化為13×13×2048的特徵圖。該改進增加了1%的效能。
2.7 Multi-Scale Training(多尺度訓練,很有參考價值)
最初的YOLO輸入尺寸為448×448,加入anchor boxes後,輸入尺寸為416×416。模型只包含卷積層和pooling 層,因此可以隨時改變輸入尺寸。
作者在訓練時,每隔幾輪便改變模型輸入尺寸,以使模型對不同尺寸影象具有魯棒性。每個10batches,模型隨機選擇一種新的輸入影象尺寸(320,352,...608,32的倍數,因為模型下采樣因子為32),改變模型輸入尺寸,繼續訓練。
該訓練規則強迫模型取適應不同的輸入解析度。模型對於小尺寸的輸入處理速度更快,因此YOLOv2可以按照需求調節速度和準確率。在低解析度情況下(288×288),YOLOv2可以在保持和Fast R-CNN持平的準確率的情況下,處理速度可以達到90FPS。在高解析度情況下,YOLOv2在VOC2007資料集上準確率可以達到state of the art(78.6mAP),如表2-2所示。
表2-2 多尺度訓練結果
<img src="https://pic3.zhimg.com/v2-8f8510bd3a94d295eadccc8d44e0132e_b.png" data-rawwidth="421" data-rawheight="412" class="origin_image zh-lightbox-thumb" width="421" data-original="https://pic3.zhimg.com/v2-8f8510bd3a94d295eadccc8d44e0132e_r.png">
2.8 其它實驗
作者在VOC2012資料集和COCO資料集上進行了實驗,結果如表2-3和表2-4所示。
表2-3 VOC2012測試結果
<img src="https://pic2.zhimg.com/v2-669c7e7d4f68525743a1c70d03e95249_b.png" data-rawwidth="848" data-rawheight="247" class="origin_image zh-lightbox-thumb" width="848" data-original="https://pic2.zhimg.com/v2-669c7e7d4f68525743a1c70d03e95249_r.png">表2-4 COCO測試結果
<img src="https://pic1.zhimg.com/v2-d6b0f2fa744a8ee6030cc14748033658_b.png" data-rawwidth="637" data-rawheight="228" class="origin_image zh-lightbox-thumb" width="637" data-original="https://pic1.zhimg.com/v2-d6b0f2fa744a8ee6030cc14748033658_r.png">
3 檢測更加快速(faster)
大部分檢測框架是基於VGG-16作為特徵提取網路,但是VGG-16比較複雜,耗費計算量大。YOLO框架使用了類似googlenet的網路結構,計算量比VGG-16小,準確率比VGG16略低。
3.1 Darknet-19
作者設計了一個新的分類網路(Darknet-19)來作為YOLOv2的基礎模型。Darknet-19模型結構如表3-1所示。
表3-1 Darknet-19網路引數
<img src="https://pic2.zhimg.com/v2-e79c2f41d984c69cd3aa805f86c6abe9_b.png" data-rawwidth="307" data-rawheight="429" class="content_image" width="307">
3.2 分類任務訓練
作者採用ImageNet1000類資料集來訓練分類模型。訓練過程中,採用了 random crops, rotations, and hue, saturation, and exposure shifts等data augmentation方法。預訓練後,作者採用高解析度影象(448×448)對模型進行finetune。
3.3 檢測任務訓練
作者將分類模型的最後一層卷積層去除,替換為三層卷積層(3×3,1024 filters),最後一層為1×1卷積層,filters數目為需要檢測的數目。對於VOC資料集,我們需要預測5個boxes,每個boxes包含5個適應度值,每個boxes預測20類別。因此,輸出為125(5*20+5*5) filters。最後還加入了passthough 層。
4 stronger
作者提出了將分類資料和檢測資料綜合的聯合訓練機制。該機制使用目標檢測標籤的資料訓練模型學習定位目標和檢測部分類別的目標;再使用分類標籤的資料取擴充套件模型對多類別的識別能力。在訓練的過程中,混合目標檢測和分類的資料集。當網路接受目標檢測的訓練資料,反饋網路採用YOLOv2 loss函式;當網路接受分類訓練資料,反饋網路只更新部分網路引數。
這類訓練方法有一定的難度。目標識別資料集僅包含常見目標和標籤(比如狗,船);分類資料集包含更廣和更深的標籤。比如狗,ImageNet上包含超過100種的狗的類別。如果要聯合訓練,需要將這些標籤進行合併。
大部分分類方法採用softmax輸出所有類別的概率。採用softmax的前提假設是類別之間不相互包含(比如,犬和牧羊犬就是相互包含)。因此,我們需要一個多標籤的模型來綜合資料集,使類別之間不相互包含。
4.1 Hierarchical classification(多層分類)
ImageNet的資料標籤來源於WordNet,具有一定層次結構。作者根據WordNet建立了ImageNet標籤的樹(WordTree)。作者採用標籤樹訓練了Darknet-19,結果如圖4-1所示。
<img src="https://pic4.zhimg.com/v2-8021c4fbb7252f2ce479be8ab0100b43_b.png" data-rawwidth="428" data-rawheight="440" class="origin_image zh-lightbox-thumb" width="428" data-original="https://pic4.zhimg.com/v2-8021c4fbb7252f2ce479be8ab0100b43_r.png">圖4-1 採用WordTree訓練結果
圖4-1 採用WordTree訓練結果4.2 採用Wordtree綜合資料集
作者採用wordtree綜合ImageNet和COCO資料集,如圖4-2所示。<img src="https://pic1.zhimg.com/v2-b42a24a9ca65bff4104b687d8e12bcd4_b.png" data-rawwidth="440" data-rawheight="569" class="origin_image zh-lightbox-thumb" width="440" data-original="https://pic1.zhimg.com/v2-b42a24a9ca65bff4104b687d8e12bcd4_r.png">
圖4-2 Wordtree層次
4.3 聯合分類和檢測
作者採用綜合資料集訓練了YOLO9000,結果如圖4-3所示.<img src="https://pic3.zhimg.com/v2-e1cbaee8ab0940700e99c9b7a680d376_b.png" data-rawwidth="418" data-rawheight="332" class="content_image" width="418">圖4-3 YOLO9000測試結果
圖4-3 YOLO9000測試結果5 結論
作者通過對YOLO網路結構和訓練方法的改進,提出了YOLOv2和YOLO9000兩種實時目標檢測系統。YOLOv2在YOLO的基礎上進行了一系列的改進,在快速的同時達到state of the art。同時,YOLOv2可以適應不同的輸入尺寸,根據需要調整檢測準確率和檢測速度(值得參考)。作者綜合了ImageNet資料集和COCO資料集,採用聯合訓練的方式訓練,使該系統可以識別超過9000種物品。除此之外,作者提出的WordTree可以綜合多種資料集 的方法可以應用於其它計算機數覺任務中。