YOLO的全拼是You Only Look Once,顧名思義就是只看一次,把目標區域預測和目標類別預測合二為一,作者將目標檢測任務看作目標區域預測和類別預測的回歸問題。該方法采用單個神經網絡直接預測物品邊界和類別概率,實現端到端的物品檢測。因此識別性能有了很大提升,達到每秒45幀,而在快速YOLO(Fast YOLO,卷積層更少)中,可以達到每秒155幀。
當前最好系統相比,YOLO目標區域定位誤差更大,但是背景預測的假陽性優于當前最好的方法。
一、引言
人類瞥了一眼圖像,立即知道圖像中的物體,它們在哪里以及它們如何相互作用。人類視覺系統快速而準確,使我們能夠執行復雜的任務,比如汽車駕駛。
傳統的目標檢測系統利用分類器來執行檢測。為了檢測對象,這些系統在測試圖片的不同位置不同尺寸大小采用分類器對其進行評估。如目標檢測系統采用deformable parts models (DPM)方法,通過滑動框方法提出目標區域,然后采用分類器來實現識別。近期的R-CNN類方法采用region proposal methods,首先生成潛在的bounding boxes,然后采用分類器識別這些bounding boxes區域。最后通過post-processing來去除重復bounding boxes來進行優化。這類方法流程復雜,存在速度慢和訓練困難的問題。
我們將目標檢測問題轉換為直接從圖像中提取bounding boxes和類別概率的單個回歸問題,只需一眼(you only look once,YOLO)即可檢測目標類別和位置。
YOLO簡潔明了:見下圖。YOLO算法采用單個卷積神經網絡來預測多個bounding boxes和類別概率。與傳統的物體檢測方法相比,這種統一模型具有以下優點:
YOLO檢測系統。用YOLO處理圖像簡單直接。我們的系統(1)將輸入圖像調整為448×448,(2)在圖像上運行單個卷積網絡,以及(3)由模型的置信度對所得到的檢測進行閾值處理。
非常快。YOLO預測流程簡單,速度很快。我們的基礎版在Titan X GPU上可以達到45幀/s;快速版可以達到150幀/s。因此,YOLO可以實現實時檢測。
YOLO采用全圖信息來進行預測。與滑動窗口方法和region proposal-based方法不同,YOLO在訓練和預測過程中可以利用全圖信息。Fast R-CNN檢測方法會錯誤的將背景中的斑塊檢測為目標,原因在于Fast R-CNN在檢測中無法看到全局圖像。相對于Fast R-CNN,YOLO背景預測錯誤率低一半。
YOLO可以學習到目標的概括信息(generalizable representation),具有一定普適性。我們采用自然圖片訓練YOLO,然后采用藝術圖像來預測。YOLO比其它目標檢測方法(DPM和R-CNN)準確率高很多。
在準確性上,YOLO算法仍然落后于最先進的檢測系統。雖然它可以快速識別圖像中的對象,但它很難精確定位某些對象,特別是小對象。
二 統一檢測(Unified Detection)
我們將目標檢測統一到一個神經網絡。我們的網絡使用整個圖像中的特征來預測每個邊界框。它也是同時預測圖像的所有類的所有邊界框。這意味著我們的網絡學習到的完整圖像和圖中所有的對象.YOLO設計可實現端到端訓練和實時的速度,同時保持較高的平均精度。
YOLO首先將圖像分為S×S的格子。如果一個目標的中心落入格子,該格子就負責檢測該目標。每一個網格中預測B個Bounding box 和置信值(confidence score)。這些置信度分數反映了該模型對盒子是否包含目標的信心,以及它預測盒子的準確程度。然后,我們定義置信值為:
如果沒有目標,置信值為零。另外,我們希望置信度分數等于預測框與真實值之間聯合部分的交集(IOU)。
每一個bounding box包含5個值:x,y,w,h和confidence。(x,y)坐標表示邊界框相對于網格單元邊界框的中心。寬度和高度是相對于整張圖像預測的。confidence表示預測的box與實際邊界框之間的IOU。每個網格單元還預測C個條件類別概率:
這些概率是以網格包含目標為條件的,每個網格單元我們只預測的一組類別概率,而不管邊界框的的數量B時多少。
在測試時,我們乘以條件類概率和單個盒子的置信度預測:
這些分數編碼了該類出現在框中的概率以及預測框擬合目標的程度。。在PASCAL VOC數據集上評價時,我們采用S=7,B=2,C=20(該數據集包含20個類別),最終預測結果為7×7×30(B*5+C)的tensor。
模型。?我們的系統將檢測建模為回歸問題。它將圖像分成SxS的網絡,并且每個網格單元預測B個邊界框,這些邊界框的置信度以及C個類別概率,這些預測被編碼為SxSx(B*5+C)的張量。
1、網絡模型
我們使用卷積神經網絡來實現YOLO算法,并在Pascal VOC檢測數據集上進行評估。網絡的初始卷積層從圖像中提取特征,而全連接層用來預測輸出概率和坐標。
我們的網絡架構受到GoogLeNet圖像分類模型的啟發。我們的網絡有24個卷積層,后面是2個全連接層。我們使用1x1降維層,后面是3x3卷積層,這與Lin等人類似,而不是GoogLeNet使用的Inception模塊。我們在ImageNet分類任務上以一半的分辨率(224x224的輸入圖像)預訓練卷積層,然后將分辨率加倍來進行檢測。完整的網絡如圖所示。
架構。我們的檢測網絡有24個卷積層,其次是2個全連接層。交替1x1卷積層減少了前面層的特征空間。我們在ImageNet分類任務上以一半的分辨率(224x224的輸入圖像)預訓練卷積層,然后將分辨率加倍來進行檢測。
我們還訓練了快速版本的YOLO,旨在推動快速目標檢測的界限。快速YOLO使用具有較少卷積層(9層而不是24層)的神經網絡,在這些層中使用較少的濾波器。除了網絡規模之外,YOLO和Fast YOLO的所有訓練和測試參數都是相同的。
我們網絡的最終輸出是7x7x30的預測張量。
2、訓練
我們在ImageNet 1000類競賽數據集上預訓練我們的卷積層。對于預訓練,我們使用上圖中的前20個卷積層,外加平均池化層和全連接層。我們對這個網絡進行了大約一周的訓練,并且在ImageNet 2012驗證集上獲得了單一裁剪圖像88%的top-5準確率,與Caffe模型池中的GoogLeNet模型相當。我們使用Darknet框架進行所有的訓練和推斷。
然后我們轉換模型來執行檢測。Ren等人表明,預訓練網絡中增加卷積層和連接層可以提高性能。按照他們的例子,我們添加了四個卷積層和兩個全連接層,并且具有隨機初始化的權重。檢測通常需要細粒度的視覺信息,因此我們將網絡的輸入分辨率從224x224變為448x448。
我們的最后一層預測類概率和邊界框坐標。我們通過圖像寬度和高度來規范邊界框的寬度和高度,使它們落在0和1之間。我們將邊界框x和y坐標參數化為特定網格單元位置的偏移量,所以它們邊界也在0和1之間。
我們對最后一層使用線性激活函數,所有其它層使用下面的漏泄修正線性激活:
我們優化了模型輸出中的平方和誤差。我們使用平方和誤差,因為它很容易進行優化,但是它并不完全符合我們最大化平均精度的目標。分類誤差與定位誤差的權重是一樣的,這可能并不理想。另外,在每張圖像中,許多網格單元不包含任何對象。這將這些單元格的“置信度”分數推向零,通常壓倒了包含目標的單元格的梯度。這可能導致模型不穩定,從而導致訓練早期發散。
為了改善這一點,我們增加了邊界框坐標預測損失,并減少了不包含目標邊界框的置信度預測損失。我們使用兩個參數λcoord和λnoobj來完成這個工作。我們設置λcoord=5和λnoobj=5。
平方和誤差也可以在大盒子和小盒子中同樣加權誤差。我們的錯誤指標應該反映出,大盒子小偏差的重要性不如小盒子小偏差的重要性。為了部分解決這個問題,我們直接預測邊界框寬度和高度的平方根,而不是寬度和高度。
YOLO每個網格單元預測多個邊界框。在訓練時,每個目標我們只需要一個邊界框預測器來負責。我們指定一個預測器“負責”,根據哪個預測與真實值之間具有當前最高的IOU來預測目標。這導致邊界框預測器之間的專業化。每個預測器可以更好地預測特定大小,方向角,或目標的類別,從而改善整體召回率。
在訓練期間,我們優化以下多部分損失函數:
其中1iobj表示目標是否出現在網格單元i中(是為1,否為0,根據該單元實際上是否有目標確定),1ijobj表示網格單元i的第j個邊界框預測器“負責”該預測(如果該單元真有目標,并且該邊界框IOU最大,則值為1,否為0)。
注意,如果目標存在于該網格單元中(前面討論的條件類別概率),則損失函數僅懲罰分類錯誤。如果預測器“負責”實際邊界框(即該網格單元中具有最高IOU的預測器),則它也僅懲罰邊界框坐標錯誤。
我們對Pascal VOC 2007和2012的訓練和驗證數據集進行了大約135個迭代周期的網絡訓練。在Pascal VOC 2012上進行測試時,我們的訓練包含了Pascal VOC 2007的測試數據。在整個訓練過程中,我們使用了64個批大小,0.9的動量和0.0005的衰減。
我們的學習率方案如下:對于第一個迭代周期,我們慢慢地將學習率從0.001提高到0.01,如果我們從高學習率開始,我們的模型往往會由于不穩定的梯度而發散。我們繼續以0.01的學習率訓練75個迭代周期,然后用0.001學習率訓練30個迭代周期,最后用0.0001的學習率訓練30個迭代周期。
為了避免過度擬合,我們使用棄權和大量的數據增強。在第一個連接層之后,棄權層使用0.5的比例,防止層之間的互相適應。對于數據增強,我們引入高達原始圖像20%的大小的隨機縮放和轉換。我們還在HSV色彩空間中使用高達1.5的因子來隨機調整圖像的曝光和飽和度。
3、預測
就像在訓練中一樣,預測測試圖像的檢測只需要一次網絡評估。在Pascal VOC上,每張圖像上網絡預測98個邊界框和每個框的類別概率。YOLO在測試時非常快,因為它只需要一次網絡評估,不像基于分類器的方法。
網格設計強化了邊界框預測中的空間多樣性。通常很明顯一個目標落在哪一個網格單元中,而網絡只能為每個目標預測一個邊界框。然而,一些大的目標或靠近多個網格單元邊界的目標可以被多個網格單元很好地定位。非極大值抑制可以用來修正這些多重檢測。對于R-CNN或DPM而言,性能不是關鍵的,非最大抑制會增加2%-3%的mAP。
4、YOLO的限制
YOLO的每一個網格只預測兩個邊界框,一種類別。這導致模型對相鄰目標預測準確率下降。因此,YOLO對成隊列的目標(如 一群鳥)識別準確率較低。
由于我們的模型學習從數據中預測邊界框,因此它很難泛化到新的、不常見角度的目標。我們的模型使用相對較粗糙的特征來預測邊界框,因為我們的架構具有來自輸入圖像的多個下采樣層。
YOLO的損失函數會同樣的對待小邊界框與大邊界框的誤差。大邊界框的小誤差通常是良性的,但小邊界框的小誤差對IOU的影響要大得多。我們的主要錯誤來源是不正確的定位。
三 與其他目標檢測算法對比
目標檢測是計算機視覺中的核心問題。檢測流程通常從輸入圖像上(Haar,SIFT ,HOG ,卷積特征)提取一組魯棒特征開始。然后,分類器或定位器被用來識別特征空間中的目標。這些分類器或定位器在整個圖像上或在圖像中的一些子區域上以滑動窗口的方式運行。我們將YOLO檢測系統與幾種頂級檢測框架進行比較,突出了關鍵的相似性和差異性。
可變形部件模型。可變形零件模型(DPM)使用滑動窗口方法進行目標檢測。DPM使用不相交的流程來提取靜態特征,對區域進行分類,預測高評分區域的邊界框等。我們的系統用單個卷積神經網絡替換所有這些不同的部分。網絡同時進行特征提取,邊界框預測,非極大值抑制和上下文推理。代替靜態特征,網絡內嵌地訓練特征并為檢測任務優化它們。我們的統一架構導致了比DPM更快,更準確的模型。
R-CNN。R-CNN及其變種使用區域提名而不是滑動窗口來查找圖像中的目標。選擇性搜索產生潛在的邊界框,卷積網絡提取特征,SVM對邊界框進行評分,線性模型調整邊界框,非極大值抑制消除重復檢測。這個復雜流程的每個階段都必須獨立地進行精確調整,所得到的系統非常慢,測試時每張圖像需要超過40秒。
YOLO與R-CNN有一些相似之處。每個網格單元提出潛在的邊界框并使用卷積特征對這些框進行評分。但是,我們的系統對網格單元提出進行了空間限制,這有助于緩解對同一目標的多次檢測。我們的系統還提出了更少的邊界框,每張圖像只有98個,而選擇性搜索則只有2000個左右。最后,我們的系統將這些單獨的組件組合成一個單一的,共同優化的模型。
其它快速檢測器。Fast和Faster的R-CNN通過共享計算和使用神經網絡替代選擇性搜索來提出區域加速R-CNN框架。雖然它們提供了比R-CNN更快的速度和更高的準確度,但兩者仍然不能達到實時性能。
許多研究工作集中在加快DPM流程上。它們加速HOG計算,使用級聯,并將計算推動到GPU上。但是,實際上只有30Hz的DPM可以實時運行。
YOLO不是試圖優化大型檢測流程的單個組件,而是完全拋棄流程,被設計為快速檢測。
像人臉或行人等單類別的檢測器可以高度優化,因為他們必須處理更少的變化。YOLO是一種通用的檢測器,可以學習同時檢測多個目標。
Deep MultiBox。與R-CNN不同,Szegedy等人訓練了一個卷積神經網絡來預測感興趣區域,而不是使用選擇性搜索。MultiBox還可以通過用單類預測替換置信度預測來執行單目標檢測。然而,MultiBox無法執行通用的目標檢測,并且仍然只是一個較大的檢測流程中的一部分,需要進一步的圖像塊分類。YOLO和MultiBox都使用卷積網絡來預測圖像中的邊界框,但是YOLO是一個完整的檢測系統。
OverFeat。Sermanet等人訓練了一個卷積神經網絡來執行定位,并使該定位器進行檢測。OverFeat高效地執行滑動窗口檢測,但它仍然是一個不相交的系統。OverFeat優化了定位,而不是檢測性能。像DPM一樣,定位器在進行預測時只能看到局部信息。OverFeat不能推斷全局上下文,因此需要大量的后處理來產生連貫的檢測。
MultiGrasp。我們的工作在設計上類似于Redmon等的抓取檢測。我們對邊界框預測的網格方法是基于MultiGrasp系統抓取的回歸分析。然而,抓取檢測比目標檢測任務要簡單得多。MultiGrasp只需要為包含一個目標的圖像預測一個可以抓取的區域。不必估計目標的大小,位置或目標邊界或預測目標的類別,只找到適合抓取的區域。YOLO預測圖像中多個類別的多個目標的邊界框和類別概率。
四 實驗
首先,我們在PASCAL VOC 2007上比較YOLO和其它的實時檢測系統。為了理解YOLO和R-CNN變種之間的差異,我們探索了YOLO和R-CNN性能最高的版本之一Fast R-CNN在VOC 2007上錯誤率。根據不同的誤差曲線,我們顯示YOLO可以用來重新評估Fast R-CNN檢測,并減少背景假陽性帶來的錯誤,從而顯著提升性能。我們還展示了在VOC 2012上的結果,并與目前最先進的方法比較了mAP。最后,在兩個藝術品數據集上我們顯示了YOLO可以比其它檢測器更好地泛化到新領域。
1、與其他實時系統的比較
目標檢測方面的許多研究工作都集中在快速制定標準檢測流程上。然而,只有Sadeghi等實際上產生了一個實時運行的檢測系統(每秒30幀或更好)。我們將YOLO與DPM的GPU實現進行了比較,其在30Hz或100Hz下運行。雖然其它的努力沒有達到實時性的里程碑,我們也比較了它們的相對mAP和速度來檢查目標檢測系統中精度——性能權衡。
Fast YOLO是PASCAL上最快的目標檢測方法;據我們所知,它是現有的最快的目標檢測器。具有52.7%mAP,實時檢測的精度是以前工作的兩倍以上。YOLO將mAP推到63.4%同時保持了實時性能。
我們還使用VGG-16訓練YOLO。這個模型比YOLO更準確,但也比它慢得多。對于依賴于VGG-16的其它檢測系統來說,它是比較有用的,但由于它比實時的YOLO更慢,本文的其它部分將重點放在我們更快的模型上。
Fastest DPM可以在不犧牲太多mAP的情況下有效地加速DPM,但仍然會將實時性能降低2倍。與神經網絡方法相比,DPM相對低的檢測精度也受到限制。
R-CNN Minus R用靜態邊界框提出取代選擇性搜索。雖然速度比R-CNN更快,但仍然不能實時,并且由于沒有好的邊界框提出,準確性受到了嚴重影響。
Fast R-CNN加快了R-CNN的分類階段,但是仍然依賴選擇性搜索,每張圖像需要花費大約2秒來生成邊界框提出。因此,它具有很高的mAP,但是0.5的fps仍離實時性很遠。
Faster R-CNN用神經網絡替代了選擇性搜索來提出邊界框,類似于Szegedy等。在我們的測試中,他們最精確的模型達到了7fps,而較小的,不太精確的模型以18fps運行。VGG-16版本的Faster R-CNN要高出10mAP,但比YOLO慢6倍。Zeiler-Fergus的Faster R-CNN只比YOLO慢了2.5倍,但也不太準確。
Pascal VOC 2007上的實時系統。比較快速檢測器的性能和速度。快速YOLO是Pascal VOC檢測記錄中速度最快的檢測器,其精度仍然是其它實時檢測器的兩倍。YOLO比快速版本更精確10mAP,同時在速度上仍保持實時性。
2、VOC 2007錯誤率分析
為了進一步檢查YOLO和最先進的檢測器之間的差異,我們詳細分析了VOC 2007的結果。我們將YOLO與Fast R-CNN進行比較,因為Fast R-CNN是PASCAL上性能最高的檢測器之一并且它的檢測代碼是可公開得到的。
我們使用Hoiem等人的方法和工具。對于測試時的每個類別,我們看這個類別的前N個預測。每個預測或者是正確的,或者根據錯誤類型進行分類:
Correct:正確的類別而且IOU>0.5
Localization:正確的類別,0.1
Similar:類別相似,IOU>0.1
Other:類別錯誤,IOU>0.1
Background:任何IOU<0.1的目標
下圖顯示了在所有的20個類別上每種錯誤類型平均值的分解圖。
誤差分析:Fast R-CNN vs. YOLO。這張圖顯示了各種類別的前N個預測中定位錯誤和背景錯誤的百分比(N = #表示目標在那個類別中)。
YOLO努力地正確定位目標。定位錯誤占YOLO錯誤的大多數,比其它錯誤源加起來都多。Fast R-CNN使定位錯誤少得多,但背景錯誤更多。它的檢測的13.6%是不包含任何目標的誤報。Fast R-CNN比YOLO預測背景檢測的可能性高出近3倍。
3、結合Fast R-CNN和YOLO
YOLO比Fast R-CNN的背景誤檢要少得多。通過使用YOLO消除Fast R-CNN的背景檢測,我們獲得了顯著的性能提升。對于R-CNN預測的每個邊界框,我們檢查YOLO是否預測一個類似的框。如果是這樣,我們根據YOLO預測的概率和兩個盒子之間的重疊來對這個預測進行提升。
最好的Fast R-CNN模型在VOC 2007測試集上達到了71.8%的mAP。當與YOLO結合時,其mAP增加了3.2%達到了75%,我們也嘗試將最好的Fast R-CNN模型與其它幾個版本的Fast R-CNN結合起來。這些模型組合產生了0.3%到0.6%之間的小增幅。
VOC 2007模型組合實驗。我們檢驗了各種模型與Fast R-CNN最佳版本結合的效果。Fast R-CNN的其它版本只提供很小的好處,而YOLO則提供了顯著的性能提升。
來自YOLO的提升不僅僅是模型組合的副產品,因為組合不同版本的Fast R-CNN幾乎沒有什么好處。相反,正是因為YOLO在測試時出現了各種各樣的錯誤,所以在提高Fast R-CNN的性能方面非常有效。
遺憾的是,這個組合并沒有從YOLO的速度中受益,因為我們分別運行每個模型,然后結合結果。但是,由于YOLO速度如此之快,與Fast R-CNN相比,不會增加任何顯著的計算時間。
4、VOC 2012結果
在VOC 2012測試集上,YOLO得分為57.9%mAP,這低于現有的最新技術,接近于使用VGG-16的原始R-CNN,見表3。我們的系統與其最接近的競爭對手相比,在小目標上努力。在bottle,sheep和tv/monitor等類別上,YOLO的得分比R-CNN或Feature Edit低8%-10%,然而,在cat和train等其它類別上YOLO實現了更高的性能。
PASCAL VOC 2012排行榜。截至2015年11月6日,YOLO與完整comp4(允許外部數據)公開排行榜進行了比較。顯示了各種檢測方法的平均精度均值和每類的平均精度。YOLO是唯一的實時檢測器。Fast R-CNN + YOLO是評分第四高的方法,比Fast R-CNN提升了2.3%。
我們聯合的Fast R-CNN + YOLO模型是性能最高的檢測方法之一。Fast R-CNN從與YOLO的組合中獲得了2.3%提高,在公開排行榜上上移了5位。
5、泛化能力,藝術品中的行人檢測
用于目標檢測的學術數據集以相同分布獲取訓練和測試數據。在現實世界的應用中,很難預測所有可能的用例,而且測試數據可能與系統之前看到的不同[3]。我們在Picasso數據集上和People-Art數據集上將YOLO與其它的檢測系統進行比較,這兩個數據集用于測試藝術品中的行人檢測。
下圖顯示了YOLO和其它檢測方法之間的比較性能。作為參考,我們在person上提供VOC 2007的檢測AP,其中所有模型僅在VOC 2007數據上訓練。在Picasso數據集上的模型在VOC 2012上訓練,而People-Art數據集上的模型則在VOC 2010上訓練。
Picasso和People-Art數據集上的泛化結果。
R-CNN在VOC 2007上有高AP。然而,當應用于藝術品時,R-CNN明顯下降。R-CNN使用選擇性搜索來調整自然圖像的邊界框提出。R-CNN中的分類器步驟只能看到小區域,并且需要很好的邊界框提出。
DPM在應用于藝術品時保持了其AP。之前的工作認為DPM表現良好,因為它具有目標形狀和布局的強大空間模型。雖然DPM不會像R-CNN那樣退化,但它開始時的AP較低。
YOLO在VOC 2007上有很好的性能,在應用于藝術品時其AP下降低于其它方法。像DPM一樣,YOLO建模目標的大小和形狀,以及目標和目標通常出現的位置之間的關系。藝術品和自然圖像在像素級別上有很大不同,但是它們在目標的大小和形狀方面是相似的,因此YOLO仍然可以預測好的邊界框和檢測結果。
定性結果。YOLO在網絡采樣的藝術品和自然圖像上的運行結果。雖然它將人誤檢成了飛機,但它大部分上是準確的。
四 實時目標檢測
YOLO是一種快速,精確的目標檢測器,非常適合計算機視覺應用。我們將YOLO連接到網絡攝像頭,并驗證它是否能保持實時性能,包括從攝像頭獲取圖像并顯示檢測結果的時間。
由此產生的系統是交互式和參與式的。雖然YOLO單獨處理圖像,但當連接到網絡攝像頭時,其功能類似于跟蹤系統,可在目標移動和外觀變化時檢測目標。系統演示和源代碼可以在項目網站上找到:http://pjreddie.com/yolo/。
五 結論
我們介紹了YOLO,一種統一的目標檢測模型。我們的模型構建簡單,可以直接在整張圖像上進行訓練。與基于分類器的方法不同,YOLO直接在對應檢測性能的損失函數上訓練,并且整個模型聯合訓練。
快速YOLO是文獻中最快的通用目的的目標檢測器,YOLO推動了實時目標檢測的最新技術。YOLO還很好地泛化到新領域,使其成為依賴快速,強大的目標檢測應用的理想選擇。
編輯:黃飛
?
評論
查看更多