Yolo

YoloV1:https://arxiv.org/abs/1506.02640
YoloV2:https://arxiv.org/abs/1612.08242
YoloV3:https://arxiv.org/abs/1804.02767

官網:
https://pjreddie.com/darknet/yolov2/
https://pjreddie.com/darknet/yolo/

YoloV1:You Only Look Once:Unified, Real-Time Object Detection

0 摘要

我們提出了一種新的物體檢測方法YOLO,先前的目標檢測工作工作都是重新利用分類器來執行檢測。相反,我們將目標檢測作爲迴歸問題,目的是獲取空間上的邊界框和相關的類概率。單個神經網絡在一次評估中直接從完整圖像預測邊界框和類概率。由於整個檢測流水線是單個網絡,因此可以直接以檢測性能爲標準進行端到端優化。

我們的統一架構處理速度非常快。我們的基礎YOLO模型以每秒45幀的速度實時處理圖像。較小版本的網絡Fast YOLO每秒處理驚人的155幀,同時mAP仍然是其他實時檢測器的兩倍。與最先進的檢測系統相比,YOLO產生更多的定位誤差,但不太可能在背景圖像上進行誤檢。最後,YOLO學習了目標的泛化的表示。當從自然圖像推廣到其他領域(如藝術品)時,它優於其他檢測方法,例如DPM和R-CNN。

1 介紹

人類瞥了一眼圖像,立即知道圖像中的物體,它們在哪裏,以及它們如何相互作用。人類視覺系統快速而準確,使我們能夠執行復雜的任務,例如在有很少的意識的情況下駕駛。用於快速、準確的目標檢測算法將允許計算機在沒有專用傳感器的情況下駕駛汽車,使輔助設備能夠向人類用戶傳達實時場景信息,並釋放用於通用響應機器人系統的潛力。

當前的檢測系統重新利用分類器來執行檢測。爲了檢測對象,這些系統縮放測試圖像,並在圖像的不同位置對其進行分類評估。像可變形零件模型(DPM)這樣的系統使用滑動窗口方法,在整個圖像上均勻間隔的位置取子窗口並對其進行分類以判別是否包含特定目標。

像R-CNN這樣的最新方法使用區域提案方法首先在圖像中生成潛在的邊界框,然後在這些建議的框上運行分類器。分類後,後處理用於修正邊界框,消除重複檢測,並根據場景中的其他對象重新生成框。這個複雜的處理流程速度很慢且難以優化,因爲每個單獨的組件必須單獨進行訓練。

我們將目標檢測重構爲單個迴歸問題,直接從圖像像素到邊界框座標和類概率。使用我們的系統,您只需在圖像上查看一次(YOLO)即可預測出現的對象和位置。

YOLO簡潔明瞭:見圖1。單個卷積網絡同時預測目標的多個邊界框和類概率。YOLO以整幅圖像爲輸入進行訓練並直接優化檢測性能。與傳統的目標檢測方法相比,這種統一模型具有多種優勢。

在這裏插入圖片描述
首先,YOLO非常快。由於我們將目標檢測作爲迴歸問題,因此我們不需要複雜的處理流程。我們在測試時在新圖像上運行我們的神經網絡來進行檢測。在不使用批處理的情況下,我們的基礎網絡以每秒45幀的速度在Titan X GPU運行,快速版本的運行速度超過150 fps。這意味着我們可以實時處理流式視頻,延遲時間少於25毫秒。此外,YOLO的平均精度是其他實時系統的兩倍多。有關我們系統在網絡攝像頭上實時運行的演示,請參閱我們的項目網頁:http//pjreddie.com/yolo/。

其次,在進行目標檢測時,Yolo是對整體輸入圖像進行響應。與滑動窗口和基於區域提議的技術不同,YOLO在訓練和測試時間內查看整個圖像,因此它隱式編碼有關類的上下文信息及其外觀信息。快速R-CNN是一種頂級檢測方法[14],它錯誤地描述了對象中的背景塊,因爲它無法看到更大的上下文區域。與Fast R-CNN相比,YOLO將背景錯誤檢測爲目標的數量會減少一半。

再次,YOLO學習了目標的泛化表示。在基於自然圖像進行訓練並對藝術作品圖像進行測試時,YOLO大大優於DPM和R-CNN等頂級檢測方法。由於YOLO具有很高的通用性,因此在應用於新領域的輸入圖像時,其誤檢率相對較低。

YOLO在準確性方面仍然落後於最先進的檢測系統。雖然它可以快速識別圖像中的對象,但它很難精確定位某些對象,特別是小對象。我們在實驗中進一步研究了這些權衡。

我們所有的訓練和測試代碼都是開源的。還可以下載各種預訓練模型。

2 統一檢測

我們將對象檢測的單獨組件統一到單個神經網絡中。我們的網絡使用整個圖像中的特徵來預測每個邊界框。它還同時預測所有類的所有邊界框。這意味着我們的網絡對整個圖像和圖像中的所有對象進行全局檢測。YOLO設計支持端到端訓練和實時推理,同時保持較高的平均精度。

我們的系統將輸入圖像分成S×S個網格。如果目標的中心落入某個網格中,則該網格負責檢測該對象

每個網格預測B個邊界框和對應的置信度分數。這些置信度得分反映了模型對框中包含對象以及對其預測的目標種類的準確程度的信心。我們正式將置信度定義爲Pr(Object)IOUpredtruthPr(Object)* IOU^{truth}_{ pred}。(即包含目標的概率乘以目標預測框和真實框之間的IOU。)如果某網格中不存在對象,則置信度分數應爲零。如果某網格中包含目標,則其置信度爲預測框和真實框之間的IOU。

每個邊界框由5個預測值組成:x,y,w,h和置信度。(x,y)座標表示預測框的中心相對於該網格邊界的位置。w和h表示預測框寬高相對於整個圖像寬高的比例。最後,置信度表示預測框與任何真實框之間的IOU。

每個網格單元還預測C個類條件概率Pr(ClassiObject)Pr(Class_i|Object)。這些概率以某網格包含目標爲前提(也就是目標的中心點位於該網格中,該網格負責檢測該目標)。我們只對一個網格預測一組類概率,而不考慮框的數量B

在預測時,我們將類條件概率與單個box的預測置信度進行相乘:
(1)Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruthPr(Class_i|Object) * Pr(Object) * IOU^{truth}_{pred} = Pr(Class_i) * IOU^{truth}_{pred} \tag{1}
這給了我們每個預測框的特定類別的置信度分數。這些分數編碼該類出現在框中的概率以及預測框與真實框的重疊程度。

在這裏插入圖片描述
爲了評估POLCAL VOC上的YOLO,我們使用S = 7,B = 2。PASCAL VOC有20個標記類,因此C = 20。我們的最終預測是大小爲7×7×(5*2 + 20) = 7×7×30的張量。

理解:將一副圖像分成S*S個網格,包含目標中心的網格負責對目標進行檢測。每個網格只輸出一組目標類別置信度,也就是上面的VOC中的20個類別的概率。每個網格預測B個box,每個box包含五個值,分別是x,y,w,h和置信度。置信度爲預測的box和真實box之間的IOU,座標(x,y)爲box的中心點相對於該網格的相對位置,w和h爲box相對於圖像整體寬高的相對比例。

2.1 網絡設計

我們將此模型實現爲卷積神經網絡,並在PASCAL VOC檢測數據集上進行評估。網絡的前面卷積層從圖像中提取特徵,而後面的全連接層預測輸出概率和座標。

我們的網絡架構受到GoogLeNet圖像分類模型的啓發[34]。我們的網絡有24個卷積層,後面是2個全連接層。我們使用1×1縮減層代替GoogLeNet中使用的Inception模塊,後跟3×3卷積層,類似於Lin等[22]。完整的網絡如圖3所示。

在這裏插入圖片描述
我們還訓練了一個快速版的YOLO,旨在突破快速目標檢測的界限。快速YOLO使用具有較少卷積層(9而不是24)的神經網絡,並且在這些層中使用較少的濾波器。除了網絡的大小,YOLO和Fast YOLO之間的所有訓練和測試參數都是相同的。

我們網絡的最終預測輸出是7×7×30的張量。

2.2 訓練

我們在ImageNet 1000類競賽數據集[30]上預先訓練我們的卷積層。對於預訓練,我們使用圖3中的前20個卷積層,然後是平均池化和全連接層。我們訓練這個網絡大約一週,並在ImageNet 2012驗證集上實現88%的單一crop Top-5精度,與Caffe model zoo中的GoogLeNet模型相當[24]。我們使用Darknet框架進行所有訓練和推理[26]。

然後我們轉換模型以執行檢測。Ren等人表明在預訓練網絡基礎上添加捲積和全連接層可以提高性能。按照他們的例子,我們添加四個卷積層和兩個全連接層,隨機初始化權重。檢測通常需要細粒度的視覺信息,因此我們將網絡的輸入分辨率從224×224增加到448×448。

我們的最後一層預測了類概率和邊界框座標。我們將邊界框寬度和高度標準化爲和圖像寬度和高度的比例,使它們的取值介於0到1之間。我們將邊界框x和y座標參數化爲相對於特定網格位置的偏移量,因此它們也在0到1之間,也就是預測邊界框的中心位置除以網格寬高之後的值。

我們對最終層使用線性激活函數,所有其他層使用以下leaky relu激活:

在這裏插入圖片描述
訓練的優化目標是模型輸出的誤差平方和。我們使用求和平方誤差,因爲它很容易優化,但它與我們最大化平均精度的目標並不完全一致。它將定位誤差與分類誤差相等地加權,這可能並不理想。此外,在每個圖像中,許多網格不包含任何對象。這將這些網格的“類別置信度”分數推向零,通常會壓制包含對象的網格的梯度。這可能導致模型不穩定,導致早期訓練過程出現離散

爲了解決這個問題,我們增加了邊界框座標預測的損失的權重,並減少了不包含對象的box的置信度預測損失的權重。我們使用兩個參數,λcoord和λnoobj來實現這一目的。我們設置λcoord= 5和λnoobj=0.5。

求和誤差同樣對大的框和小的框進行了相同加權。我們的誤差度量應該反映出同樣的小偏差對大的box的影響要比對小的box的影響小。爲了部分解決這個問題,我們直接預測邊界框寬度和高度的平方根,而不是寬度和高度。

YOLO中每個網格預測多個邊界框。在訓練時,我們根據哪個預測和真實框之間的IOU最高,將該預測器指定爲“負責”該對象的預測。這導致每個預測器具有了對某些大小、寬高比或對象類別的預測偏好,從而提高了整體召回率。

訓練過程中使用下述損失函數:

在這裏插入圖片描述
1iobj1_i^{obj}表示網格i中包含目標,1ijobj1_{ij}^{obj}網格i中負責預測的第j個預測器。這個損失函數中,前兩行是包含目標時各box的定位損失,第三行是包含目標時各box的置信度損失,第四行表示某box不包含目標時,此時就只有置信度損失,沒有分類損失,最後一行表示各網格的類別置信度損失。

注意,如果目標存在於某網格中,則損失函數僅懲罰分類錯誤(因此前面討論的條件類概率)。如果某預測器對真實框“負​​責”(即,在該網格的所有預測器中和任意真實框具有最高IOU),它也僅懲罰邊界框座標誤差。

我們在PASCAL VOC 2007和2012的訓練和驗證數據集上訓練了大約135個epoch。在2012年測試時,我們還包括用於訓練的VOC 2007測試數據。在整個訓練過程中,我們使用的批量大小爲64,動量爲0.9,衰減爲0.0005。

我們的學習率表如下:對於第一個epoch,我們慢慢將學習率從10-3提高到10-2。如果我們從高學習速度開始,我們的模型通常會因梯度不穩定而發散。我們繼續以10-2進行了75個epoch的訓練,然後以10-3進行30個epoch的訓練,最後以10-4進行30個epoch的訓練。

爲避免過度擬合,我們使用了dropout和大量數據擴充。在第一個連接層之後,drop比例爲0.5的dropout層阻止了層之間的共同適應[18]。對於數據增強,我們引入了高達原始圖像大小20%的隨機縮放和變換。我們還在HSV顏色空間中隨機調整圖像的曝光和飽和度將圖像擴充了1.5倍。

2.3 測試

就像在訓練中一樣,預測測試圖像的檢測只需要一次網絡評估。在PASCAL VOC上,網絡對每個圖像預測98個邊界框和每個框的類概率。YOLO在測試時非常快,因爲它只需要單一的網絡評估,這與基於分類器的方法不同。

網格設計在邊界框預測中強制了空間多樣性。通常很清楚一個對象落入哪個網格單元,並且網絡僅爲每個對象預測一個框。但是,一些大型目標或靠近多個網格邊界的目標可以被多個網格定位。非最大抑制可用於修復這些多個檢測。雖然對於R-CNN或DPM的性能並不重要,但非最大抑制在mAP中增加了2 - 3%。

2.4 Yolo的缺點

YOLO對邊界框預測施加了強大的空間約束,因爲每個網格單元只預測兩個框,並且只能有一個類。此空間約束限制了我們的模型可以預測的相鄰對象的數量。我們的模型與羣體中出現的小物體鬥爭,例如成羣的鳥類。Yolo不擅長成羣的小目標的檢測

由於我們的模型學習從數據中預測邊界框,因此很難在新的或不尋常的寬高比或配置中泛化的很好。我們的模型還使用相對粗略的特徵來預測邊界框,因爲我們的網絡結構包含了多個下采樣層。

最後,因爲我們訓練了一個近似檢測性能的損失函數,我們的損失函數設定小邊界框和大邊界框進行了相同的錯誤處理。大的框中的小誤差通常影響較小,但對於小的框,同樣的錯誤對IOU的影響要大得多。Yolo的主要錯誤來源是定位錯誤

3 實驗

3.1 和其他算法進行效果對比

比Yolo快的沒有它準;比Yolo準的沒有它快。
在這裏插入圖片描述

3.2 誤差分析

檢測結果類型:

  • 正確:正確分類,IOU > 0.5;
  • 定位錯誤:正確分類,0.1 < IOU < 0.5;
  • 相似:類別相似,IOU > 0.1;
  • 其他:錯誤分類,IOU > 0.1;
  • 背景:和任何目標的真實框之間的IOU都小於0.1。

在這裏插入圖片描述
Yolo主要誤差是定位誤差。Fast R-CNN相比於Yolo,定位誤差更少,但將背景誤分類爲目標的比例更高。

4.3 將Fast R-CNN和Yolo結合

由於Yolo和Fast R-CNN的誤差類型不同,將兩者結合可以取得更好的結果。作者將Fast R-CNN預測的每一個目標也送入yolo中進行預測,如果兩者的預測結果很接近,則增大其爲目標的概率。

5 總結

我們介紹了YOLO,一種用於物體目標的統一模型。我們的模型構造簡單,可以直接在完整圖像上進行訓練。與基於分類器的方法不同,YOLO針對與檢測性能直接對應的損失函數進行訓練,並且整個模型被聯合訓練。

Fast YOLO是文獻中最快的通用物體探測器,YOLO在實時物體探測中推動了最先進的技術。YOLO還可以很好地推廣到新領域,使其成爲依賴快速、強大的目標檢測的應用程序的理想選擇。

YoloV2:YOLO9000:Better, Faster, Stronger

0 摘要

我們介紹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 R-CNN,同時運行速度明顯更快。最後,我們提出了一種聯合訓練目標檢測和分類的方法。使用此方法,我們在COCO檢測數據集和ImageNet分類數據集上同時訓練YOLO9000。我們的聯合訓練允許YOLO9000對沒有標記檢測數據的對象類進行檢測。我們在ImageNet檢測任務上驗證了我們的方法。YOLO9000在ImageNet檢測驗證集上獲得19.7 mAP,儘管200個類中只有44個具有檢測數據。在不屬於COCO的156個類中,YOLO9000獲得16.0 mAP。但YOLO可以檢測到超過200個類別;它預測超過9000種不同對象類別的檢測。它仍然可以實時運行。

1 介紹

通用目標檢測應該快速、準確並且能夠識別各種各樣的目標。自從引入神經網絡以來,檢測框架變得越來越快速和準確。但是,大多數檢測方法仍然受限於只能檢測一小組的目標。

與用於完成分類和標記等其他任務的數據集相比,當前目標檢測數據集是有限的。最常見的檢測數據集包含數千到數十萬個具有數十到數百個標籤的圖像。分類數據集具有數百萬個具有數十或數十萬個類別的圖像。

我們希望檢測能夠擴展到目標分類的級別。然而,用於檢測的標記圖像比用於分類或標記的圖像昂貴得多(標記通常是用戶免費提供的)。所以,我們很難在近期看到擁有和分類數據集同樣量級大小的檢測數據集。

我們提出了一種新方法來利用我們已有的大量分類數據,並用它來擴展當前檢測系統的範圍。我們的方法使用目標分類的分層視圖,允許我們將不同的數據集組合在一起。

我們還提出了一種聯合訓練算法,該算法允許我們在檢測和分類數據上訓練目標檢測器。我們的方法利用標記的檢測圖像來學習精確定位對象,同時使用分類圖像來增加其數據集容量和魯棒性。

使用這種方法,我們訓練YOLO9000,一種可以檢測超過9000種不同物體類別的實時目標探測器。首先,我們改進了基礎YOLO檢測系統得到YOLOv2,這是一種先進的實時檢測器。然後我們使用我們的數據集組合方法和聯合訓練算法來訓練一個來自ImageNet的9000多個類數據以及來自COCO的檢測數據得到目標檢測模型。

2 更好

在這裏插入圖片描述
與現有最先進的檢測系統相比,YOLO存在一些缺點。與Fast R-CNN相比,YOLO的錯誤分析表明YOLO產生了大量的定位誤差。此外,與基於區域提案的方法相比,YOLO具有相對較低的召回率。因此,我們在保持分類準確性的情況下主要關注改善召回率和定位精度。

計算機視覺領域趨向於使用更大、更深的網絡。更好的性能通常取決於訓練更大的網絡或將多個模型集合在一起。但是,對於YOLOv2,我們需要更準確的探測器,但速度需要仍然很快。**我們不是擴展我們的網絡,而是簡化網絡,然後使表示更容易學習。**我們將過去論文中的各種想法與我們自己的新概念結合起來,以提高YOLO的表現。結果摘要見表2。

Batch Normalization:批歸一化導致收斂的顯著改善,同時消除了對其他形式的正規化的需要。通過在YOLO中的所有卷積層上添加批歸一化,我們可以使mAP提高2%以上。批歸一化還有助於模型正則化。通過批歸一化,我們可以從模型中刪除dropout而不會造成過擬合。

高分辨率分類器:所有最先進的檢測方法都使用在ImageNet上預先訓練的分類器。從AlexNet開始,大多數分類器都對小於256×256的輸入圖像進行操作。最初的YOLO以224×224的分辨率訓練分類網絡,並將分辨率提高到448以進行檢測。這意味着模型需要在學習如何進行目標檢測的同時還要適應於新的輸入分辨率。

對於YOLOv2,我們首先在完整的448×448分辨率下的ImageNet上的分類網絡進行10個epoch的微調。這使網絡有時間調整其濾波器,以便在更高分辨率的輸入上更好地工作。然後,我們對得到的網絡進行微調以進行檢測任務。這種高分辨率的分類網絡使我們的mAP增加了近4%。

結合Anchor Box的卷積:YOLO直接使用卷積特徵提取器頂部的全連接層預測邊界框的座標,而Faster R-CNN使用手工挑選的先驗框預測邊界框。Faster R-CNN中的區域提議網絡(RPN)僅使用卷積層預測Anchor box的偏移和置信度。由於預測層是卷積的,因此RPN在特徵圖中的每個位置預測這些偏移。預測偏移而不是座標簡化了問題,使網絡更容易學習。

我們從YOLO中刪除全連接層,並使用Anchor Box來預測邊界框。首先,我們消除了一個池化層,使網絡卷積層的輸出分辨率更高。我們還縮小網絡以對416大小的輸入圖像進行操作,而不是448×448。我們這樣做是因爲我們在特徵圖中需要奇數個位置,因此只有一箇中心單元格。物體,特別是大物體,往往佔據圖像的中心,因此最好只有一箇中心位置來預測這些物體而不是物體處於四個位置的附近。YOLO的卷積層將圖像下采樣32倍,因此通過使用416的輸入圖像,我們得到13×13的輸出特徵圖。

當我們使用Anchor Box時,我們還將類預測機制與空間定位分離,而不是預測每個Anchor box的類和對象。遵從YOLO的做法,目標預測仍然預測提出的框和真實框之間的IOU,而類別預測仍然是在存在對象的情況下預測類的條件概率。

使用Anchor Box我們的準確性會略有下降。YOLO對每張圖片僅預測98個box。但是使用Anchor box,我們的模型預測超過一千個box。不使用Anchor Box,我們的中間模型得到69.5 mAP,召回率爲81%。使用Anchor Box,我們的模型獲得69.2 mAP,召回率爲88%。即使mAP減少,召回率的增加也意味着我們的模型有更大的改進空間。

維度聚類:與YOLO一起使用時,我們遇到兩個Anchor Box問題。首先是手工挑選的box尺寸。網絡可以學會適當地調整box,但如果我們爲網絡中選擇更好的先驗,我們可以讓網絡更容易學習預測良好的檢測。

我們不是手動選擇先驗,而是在訓練集邊界框上運行k-means聚類自動篩選好的先驗。如果我們使用具有歐式距離的標準k均值聚類,那麼較大的框會產生比較小的框更多的誤差。然而,我們真正想要的是能夠獲得良好IOU分數的先驗,這與box的大小無關。因此,對於距離度量,我們使用:

d(box,centroid) = 1 - IOU(box,centroid)

centroid是聚類時被選作中心的邊框,box就是其它邊框,d就是兩者間的“距離”。IOU越大,“距離”越近。

我們爲各種k值運行k-means,並繪製和中心邊框的平均IOU,參見圖2。我們選擇k = 5作爲模型複雜度和高召回率之間的良好權衡。質心聚類結果與手工挑選的Anchor box明顯不同。矮且寬的box較少和高且窄的box較多。

在這裏插入圖片描述我們將平均IOU與我們的聚類策略中最接近的先驗和表1中的手工挑選的Anchor Box進行比較。只有5個先驗,質心的表現類似於9個Anchor Box,5個質心的平均IOU爲61.0,而Anchor Box爲60.9。如果我們使用9個質心,我們會看到更高的平均IOU。這表明使用k-means生成我們的邊界框會以更好的表示方式啓動模型,使任務更容易學習。

在這裏插入圖片描述
直接進行位置預測:當將YOLO和Anchor Box結合時,我們遇到第二個問題:模型不穩定,特別是在早期迭代期間。大多數不穩定來自於預測框的(x,y)位置。在區域提案網絡(RPN)中,網絡預測值是txt_xtyt_y,並且(x,y)中心座標計算如下:

x=(txwa)xay=(tyha)yax = (t_x * w_a) - x_a \\ y = (t_y * h_a) - y_a

例如,tx = 1的預測會將框向右移動anchor box的寬度,tx = -1的預測會將其向左移動相同的量。

這個公式是不受約束的,因此任何anchor box都可以在圖像中的任何位置結束,無論預測box的位置如何。一開始的隨機初始化使得模型需要很長時間才能穩定以預測合理的偏移。

我們不是預測偏移,而是遵循YOLO的方法,預測相對於網格位置的位置座標。這將真值限制在0到1之間。我們使用logistic激活函數來約束網絡預測落在此範圍內。

網絡對輸出特徵圖中的每個網格預測5個邊界框。網絡對每一個邊界框預測5個座標,tx,ty,tw,th,tot_x,t_y,t_w,t_h,t_o。如果網格從圖像的左上角偏移(cx,cy)(c_x,c_y)且Anchor Box的寬度和高度分別爲pwp_wphp_h,則預測結果爲:

要先將網格大小歸一化,即令一個網格的寬=1,高=1。
在這裏插入圖片描述在這裏插入圖片描述參考上圖,由於σ函數將tx,tyt_x,t_y約束在(0,1)範圍內,所以根據上面的計算公式,預測邊框的藍色中心點被約束包含藍色點的網格內。

由於我們約束位置預測,因此參數更容易學習,使網絡更穩定。結合使用維度聚類和直接預測邊界框中心位置可使YOLO比使用Anchor box的版本提高近5%的mAP。

細粒度特徵:修改後的YOLO在13×13的特徵圖上預測檢測結果。雖然這對於大型目標來說已足夠,但使用更細粒度的特徵有助於定位更小的目標。Faster R-CNN和SSD都在網絡中的各種尺度上運行其提議網絡,以獲得不同分辨率大小的提議框。我們採用不同的方法,只需添加一個直通層,使用分辨率爲26×26的前一層的特徵。

直通層通過將相鄰特徵堆疊到不同的通道而不是空間位置,將較高分辨率的特徵與低分辨率特徵連接起來,類似於ResNet中的恆等映射。這通過將 26 * 26 * 512的特徵映射變換爲13 * 13 * 2048的特徵映射,從而和原有的13 * 13的特徵映射堆疊起來。我們的探測器運行在此擴展特徵圖的頂部,以便它可以訪問細粒度的特徵。這使得性能提高了1%。

多尺度訓練:最初的YOLO使用448×448的輸入分辨率。通過添加Anchor box,我們將分辨率更改爲416×416。但是,由於我們的模型僅使用卷積和池化層,因此可以動態調整大小。我們希望YOLOv2能夠在不同尺寸的圖像上運行,因此我們將其訓練到模型中。

我們不是固定輸入圖像大小,而是每隔幾次迭代就改變網絡。每10個batch我們的網絡隨機選擇一個新的圖像尺寸大小。由於我們的模型縮減了32倍,我們從以下的32倍數中隨機選取:{320,352,…,608}。因此最小的選項是320×320,最大的是608×608。我們將網絡調整到該維度並繼續訓練。

這種制度迫使網絡學習如何在各種輸入維度上做好預測。這意味着同一網絡對不同分辨率的輸入圖像進行檢測。網絡以較小的尺寸運行得更快,因此YOLOv2可在速度和精度之間輕鬆權衡。

在低分辨率下,YOLOv2作爲計算量小、相當精確的探測器運行。在288×288時,它的運行速度超過90 FPS,mAP幾乎與Fast R-CNN一樣好。這使其成爲較小GPU、高幀率視頻或多視頻流的理想選擇。

在高分辨率下,YOLOv2是最先進的探測器,在VOC 2007上具有78.6 mAP,同時仍然高於實時速度。準確率和效率的對比如圖4所示。

在這裏插入圖片描述參考自:https://www.jianshu.com/p/517a1b344a88
綜上所述,雖然YOLO2做出了一些改進,但總的來說網絡結構依然很簡單。就是一些卷積+pooling,從4164163 變換到 13135*25。稍微大一點的變化是增加了batch normalization,增加了一個passthrough層,去掉了全連接層,以及採用了5個先驗框。

在這裏插入圖片描述對比YOLO1的輸出張量,YOLO2的主要變化就是會輸出5個先驗框,且每個先驗框都會嘗試預測一個對象。輸出的 13135*25 張量中,25維向量包含 20個對象的分類概率+4個邊框座標+1個邊框置信度。

實驗:我們訓練YOLOv2用於檢測VOC 2012.表4顯示了YOLOv2與其他最先進的檢測系統的比較性能。YOLOv2的運行速度比競爭方法快且取得了73.4 mAP。我們還在COCO上進行訓練並與表5中的其他方法進行比較。在VOC指標(IOU = .5)上,YOLOv2達到44.0 mAP,與SSD和更快的R-CNN相當。

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
大多數檢測框架依賴於VGG-16作爲基本特徵提取器[17]。VGG-16是一個功能強大,分類準確的網絡,但它過於複雜。在224×224分辨率的單個圖像上進行單次前向運算,VGG-16的卷積層需要30.69億次浮點運算。

YOLO框架使用基於Googlenet架構的自定義網絡[19]。該網絡比VGG-16更快,前向運算的計算量僅8.52億次。但是,它的準確性略差於VGG16。對於單個224 * 224的crop,在ImageNet上的Top-5精度,YOLO的定製模型爲88.0%,而VGG-16爲90.0%。

Darknet-19:我們提出了一種新的分類模型作爲YOLOv2的基礎。我們的模型建立在網絡設計的先前工作以及該領域的常識之上。與VGG模型類似,我們大多使用3×3濾波器,並且在每個池化步驟之後將通道數量增加一倍。參考NIN網絡,我們使用全局平均池進行預測以及1×1過濾器來壓縮3×3卷積之間的特徵表示。我們使用批歸一化來穩定訓練,加速收斂並正規化模型。

在這裏插入圖片描述
我們的最終模型名爲Darknet-19,有19個卷積層和5個最大池化層。表6給出了詳細模型結構。Darknet-19僅需要5.58億次操作來處理圖像,但在ImageNet上實現了72.9%的Top-1精度和91.2%Top-5精度。

爲分類訓練:我們在標準的ImageNet 1000類分類數據集上使用隨機梯度下降進行160個epoch的訓練,起始學習率爲0.1,使用多項式衰減,速率爲4,權重衰減爲0.0005,動量爲0.9,使用Darknet神經網絡框架[13]。在訓練期間,我們使用標準數據增強技巧,包括隨機裁剪、旋轉和色調、飽和度和曝光變化。

如上所述,在我們對224×224的圖像進行初步訓練後,我們以更大的尺寸對網絡進行微調,448。對於這種微調,我們使用上述參數進行訓練,但僅限10個epoch,並以10-3的學習速率開始。在這種更高的分辨率下,我們的網絡可實現76.5%的Top-1精度和93.3%的Top-5精度。

爲檢測訓練:我們通過刪除最後一個卷積層來修改這個網絡以進行檢測,添加三個3×3的具有1024個濾波器卷積層,最後是一個1×1卷積層,其具有我們需要檢測的輸出數量。對於VOC,我們預測5個框,每個框有5個座標,每個框20個類,所以有125個濾波器。我們還從最終的3×3×512層到倒數第二個卷積層直接添加了一個直通層,這樣我們的模型就可以使用細粒度特徵。

我們訓練網絡160個epoch,起始學習率爲10-3,在60和90個epoch時除以10。我們使用0.0005的重量衰減和0.9的動量。我們使用類似於YOLO和SSD的數據增加策略,包括隨機裁剪,顏色變換等。我們對COCO和VOC使用相同的訓練策略。

4 更強

我們提出了一種聯合訓練分類和檢測數據的機制。我們的方法使用標記了檢測信息的圖像來學習特定於檢測的信息,例如邊界框座標預測和對象,以及如何對公共對象進行分類。它使用僅帶有類標籤的圖像來擴展它可以檢測的類別數目。

在訓練期間,我們混合來自檢測和分類數據集的圖像。當我們的網絡看到標記爲檢測的圖像時,我們可以基於完整的YOLOv2損失函數進行反向傳播。當它看到分類圖像時,我們只反向傳播損失函數中分類部分的損失。

這種方法提出了一些挑戰。檢測數據集只有常見的對象和通用標籤,如“狗”或“船”。分類數據集具有更廣泛和更深的標籤範圍。ImageNet擁有超過100種犬種,包括“諾福克梗”,“約克夏犬”和“貝德靈犬”。如果我們想要訓練兩個數據集,我們需要一種連貫的方式來合併這些標籤。

大多數分類方法在所有可能的類別中使用softmax層來計算最終的概率分佈。使用softmax假設類是互斥的。這給組合數據集帶來了問題,例如,您不希望使用此模型組合ImageNet和COCO,因爲類“Norfolk terrier”和“dog”不是互斥的。

我們可以使用多標籤模型來組合不假設互斥的數據集。這種方法忽略了我們對數據所知的所有結構,例如所有COCO類都是互斥的。

層次分類:ImageNet標籤來自WordNet,這是一個構建概念及其相關性的語言數據庫[12]。在WordNet中,“諾福克梗”和“約克夏犬”都是“獵犬”的上位詞,它是一種“獵犬”,是一種“狗”,它是一種“犬”,等等。分類假設標籤採用扁平結構,但是對於組合數據集,結構正是我們所需要的。

WordNet的結構是有向圖,而不是樹,因爲語言很複雜。例如,“狗”既是一種“犬”,也是一種“家畜”,它們都是WordNet中的同義詞。我們不是使用完整的圖形結構,而是通過從ImageNet中的概念構建分層樹來簡化問題。

爲了構建這個樹,我們檢查ImageNet中的視覺名詞,並查看它們通過WordNet圖形到根節點的路徑,在本例中是“物理對象”。許多同義詞只有一條通過圖形的路徑,所以首先我們將所有這些路徑添加到樹中。然後我們迭代地檢查我們剩下的概念,並儘可能少地添加生長樹的路徑。因此,如果一個概念有兩條通向根的路徑,一條路徑將三條邊添加到樹中,另一條路徑只添加一條邊,我們選擇較短的路徑。

最終的結果是WordTree,一個視覺概念的分層模型。爲了使用WordTree執行分類,我們預測每個節點處的條件概率,以獲得該同義詞的每個下位詞的概率。例如,在我們預測的“梗”節點處:

在這裏插入圖片描述

如果我們想要計算特定節點的絕對概率,我們只需遵循通過樹到根節點的路徑並乘以條件概率。因此,如果我們想知道圖片是否屬於Norfolk梗,我們計算:

在這裏插入圖片描述
出於分類目的,我們假設圖像包含一個對象: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:1的比例增大。

使用此數據集,我們訓練YOLO9000。我們使用基礎YOLOv2架構但只有3個先驗而不是5來限制輸出大小。當我們的網絡看到檢測圖像時,我們會正常反向傳播損失。對於分類損失,我們僅反向傳播等於或高於標籤相應級別的損失。例如,如果標籤是“狗”,我們不會在樹中進一步向下預測任何錯誤,“德國牧羊犬”與“金毛獵犬”,因爲我們沒有這些信息。

當它看到分類圖像時,我們只反向傳播分類損失。爲此,我們只需找到預測該類最高概率的邊界框,並計算其預測樹的損失。我們還假設預測框至少與真實框的IOU大於0.3,我們基於此假設反向傳播對象性損失。

使用這種聯合訓練,YOLO9000學習使用COCO中的檢測數據在圖像中查找對象,並學習使用來自ImageNet的數據對各種對象進行分類。

我們在ImageNet檢測任務上評估YOLO9000。ImageNet的檢測任務與COCO在44個對象類別上共享,這意味着YOLO9000只能看到大多數測試圖像的分類數據,而不是檢測數據。YOLO9000總共獲得了19.7 mAP,在不相交的156個對象類上有16.0 mAP,它從未見過任何標記的檢測數據。該mAP高於DPM獲得的結果,但YOLO9000僅在部分監督下在不同數據集上進行訓練。它還可以同時檢測9000個其他對象類別,所有這些都是實時的。

當我們分析YOLO9000在ImageNet上的表現時,我們看到它很好地學習了新的動物種類,但卻在服裝和設備等學習類別中掙扎。新動物更容易學習,因爲對象預測很好地概括了COCO中的動物。相反,COCO沒有針對任何類型服裝的邊框標籤,僅限於人,因此YOLO9000難以模擬“太陽鏡”或“泳褲”等類別。

5 結論

我們介紹YOLOv2和YOLO9000,實時檢測系統。YOLOv2是最先進的,比各種檢測數據集中的其他檢測系統更快。此外,它可以在各種圖像尺寸下運行,以在速度和精度之間提供平滑的折衷。

YOLO9000是一個實時框架,通過聯合優化檢測和分類來檢測9000多個對象類別。我們使用WordTree組合來自各種來源的數據和我們的聯合優化技術,以同時在ImageNet和COCO上進行訓練。YOLO9000是縮小檢測和分類之間數據集大小差距的重要一步。

我們的許多技術可以在對象檢測之外進行泛化使用。ImageNet的WordTree表示爲圖像分類提供了更豐富、更詳細的輸出空間。使用分層分類的數據集組合在分類和分割領域中將是有用的。多尺度訓練等技術可以爲各種視覺任務帶來好處。

對於未來的工作,我們希望使用類似的技術進行弱監督圖像分割。我們還計劃使用更強大的匹配策略來改進我們的檢測結果,以便在訓練期間爲分類數據分配弱標籤。計算機視覺受到大量標記數據的祝福。我們將繼續尋找將不同來源和結構數據結合在一起的方法,以製作更強大的視覺世界模型。

YoloV3:An Incremental Improvement

0 摘要

我們向YOLO提供一些更新!我們做了一些小的設計更改,以使其更好。我們還訓練了這個非常龐大的新網絡。它比上次有點大,但更準確。它仍然很快,不用擔心。在輸入爲320×320時,YOLOv3以運行22毫秒運行,取得了28.2的mAP,與SSD一樣準確,但速度提高了三倍。當我們查看舊的.5 IOU mAP檢測指標時,YOLOv3非常好。它在Titan X上以51毫秒內達到57.9 的AP50。相比之下,RetinaNet在198毫秒內達到57.5的AP50,性能相似,但速度提高了3.8倍。

1 核心內容

1.1 Bounding Box迴歸

遵循YOLO9000的做法,我們的系統使用維度聚類獲取的anchor box來預測邊界框。網絡爲每個邊界框預測四個座標,分別爲tx,ty,tw,tht_x,t_y,t_w,t_h。如果當前網格距圖像左上角距離爲(cx,cy)(c_x,c_y)且先驗的邊界框寬高分別爲pw,php_w,p_h,那麼最終的預測結果爲:
bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethb_x = \sigma(t_x) + c_x \\ b_y = \sigma(t_y) + c_y \\ b_w = p_w e^{t_w} \\ b_h = p_h e^{t_h}

在訓練過程中,我們使用誤差平方和作爲損失函數。如果真實座標是t^\hat t_*,預測值是tt_*,則梯度爲t^t\hat t_* - t_*。通過反轉上面的等式可以容易地計算該真實值。

YOLOv3使用邏輯迴歸預測每個邊界框是否包含目標的得分。如果一個先驗邊界框比其他先驗邊界框與某個真實目標的重疊最大,該邊界框是否包含目標的得分應該是1。但如果某一個先驗邊界框不是最優的,但確實與某個真實框存在了一定的重疊且IOU超過了一定閾值,我們此時應該忽視這個預測結果。這裏設置閾值爲0.5。和Faster R-CNN不同,我們這裏爲每一個真實目標設置一個先驗邊界框。如果某個邊界框與一個真實目標對應,則該邊界框不引入任何的定位和分類損失,而只是引入判斷是否包含目標的損失。

1.2 類別預測

每個框使用多標籤分類預測邊界框可能包含的目標的類別。我們不使用softmax,因爲我們發現它不能導致良好的性能,而是使用獨立的logistic分類器。在訓練期間,我們使用二元交叉熵損失進行類預測。

當我們遷移到更復雜的領域(如Open Images Dataset)時,此方案會有所幫助。在此數據集中有許多重疊標籤(即女人和人)。使用softmax假設每個box只有一個類,而通常不是這種情況。多標籤方法可以更好地模擬數據。(softmax需要類別是互斥的,而多類別logistic迴歸則沒有該要求)。

1.3 多尺度預測

YOLOv3預測3種不同尺度的box。我們的系統使用與特徵金字塔網絡相似的概念從這些尺度中提取特徵。在我們的基本特徵提取器中,我們添加了幾個卷積層。最後一個預測了3維張量,包括邊界框座標,是否包含對象和對象類別預測。在我們的COCO實驗中,我們對每個尺度預測3個框,分別爲4個邊界框偏移,1個對象性預測和80個類別預測,因此最終的張量爲N×N×[3 *(4 + 1 + 80)]。

接下來,我們從前面的2層獲取特徵圖,然後將其上採樣2倍。我們還從網絡中較早的位置獲取了一個特徵圖,並使用連接將其與我們的上採樣特徵合併。這種方法允許我們從上採樣特徵中獲取更有意義的語義信息,並從先前的特徵圖中獲得更細粒度的信息。然後我們再添加一些卷積層來處理這個組合特徵圖,並最終預測出類似的張量,儘管現在是兩倍大小。

我們再次執行相同的設計來預測最終尺度的box。因此,我們對第3級的預測受益於所有先前的計算以及網絡早期的細粒度特徵。

我們仍然使用k-means聚類來確定我們的邊界框先驗。我們只是任意選擇9個簇和3個尺度,然後在尺度上均勻地劃分簇。在COCO數據集上,9個簇爲:(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)。

1.4 特徵提取

我們使用新網絡執行特徵提取。我們的新網絡是YOLOv2中使用的網絡Darknet-19和新奇殘差網絡的混合。我們的網絡使用連續的3×3和1×1卷積層,但現在也有一些直連通道,並且明顯更大。它有53個卷積層,所以我們稱之爲Darknet-53!

在這裏插入圖片描述
這個新網絡比Darknet19強大得多,但仍然比ResNet-101或ResNet-152更有效。
以下是一些ImageNet結果:

在這裏插入圖片描述每個網絡都使用相同的設置進行訓練,並以256×256大小的單一裁剪進行測試。運行時間在Titan X上以256×256大小的輸入圖像進行測量。因此,Darknet-53的性能與最先進的分類器相當,但浮點運算更少,速度更快。Darknet-53優於ResNet-101,速度提高1.5倍。Darknet-53具有與ResNet-152類似的性能,但速度提高了2倍。

Darknet-53還實現了每秒最高的測量浮點運算。這意味着網絡結構可以更好地利用GPU,從而提高評估效率,從而提高速度。這主要是因爲ResNets的層數太多而且效率不高。

1.5 訓練

我們仍然訓練完整的圖像,沒有使用難例樣本最小化這些技巧。我們使用多尺度訓練,大量數據擴充,批量標準化,所有這些標準的技巧。我們使用Darknet神經網絡框架進行訓練和測試。

2 如何做

如表3所示,YoloV3效果很好。 就COCO而言,平均AP指標與SSD相當,但速度快3倍。效果比RetinaNet略差。

在這裏插入圖片描述但是,當我們在IOU =0.5(或圖表中的AP50)中查看mAP的“舊”檢測度量時,YOLOv3非常強大。它幾乎與RetinaNet相當,遠遠超過SSD。這表明YOLOv3是一種非常強大的探測器,擅長爲物體產生合適的box。然而,隨着IOU閾值的增加,性能顯著下降,表明YOLOv3不太擅長使box與物體完美對齊

原來的Yolo不擅長檢測小目標。但是,現在我們看到了這種趨勢的逆轉。通過新的多尺度預測,我們看到YOLOv3具有相對較高的APs性能。但是,它在中型和大型目標上的性能相對較差。需要更多的調查才能深究這一點。

當我們在AP50指標上繪製準確度與速度的關係時(見圖5),我們看到YOLOv3與其他檢測系統相比具有顯着的優勢。也就是說,它更快更好。

在這裏插入圖片描述

工程實現

作者在Yolo的官網提供了320,416,608大小的YoloV3的cfg文件和預訓練模型。另外,作者還提供了一個小型的模型,YoloV3-Tiny的cfg文件和預訓練模型。YOLOv3-tiny雖然速度進一步提升,但其mAP下降較多。

工程上可以使用TensorRT進一步優化YoloV3的時間效率。
使用TensorRT有兩條實現路徑:

  • 一是直接將draknet版本的yoloV3模型轉換爲TensorRT的序列化引擎;
  • 二是從mxnet的Gloun獲取yoloV3模型,將其轉換爲mxnet模型,進一步再通過onnx將其轉換爲TensorRT序列化引擎。

這裏研究第一條路徑的實現。

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章