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來進行優化。這類方法流程複雜,存在速度慢和訓練困難的問題。
ide
咱們將目標檢測問題轉換爲直接從圖像中提取bounding boxes和類別機率的單個迴歸問題,只需一眼(you only look once,YOLO)便可檢測目標類別和位置。函數
YOLO簡潔明瞭:見下圖。 YOLO算法採用單個卷積神經網絡來預測多個bounding boxes和類別機率。 與傳統的物體檢測方法相比,這種統一模型具備如下優勢:工具
YOLO檢測系統。用YOLO處理圖像簡單直接。咱們的系統(1)將輸入圖像調整爲448×448,(2)在圖像上運行單個卷積網絡,以及(3)由模型的置信度對所獲得的檢測進行閾值處理。佈局
在準確性上,YOLO算法仍然落後於最早進的檢測系統。 雖然它能夠快速識別圖像中的對象,但它很難精肯定位某些對象,特別是小對象。 post
咱們將目標檢測統一到一個神經網絡。咱們的網絡使用整個圖像中的特徵來預測每一個邊界框。 它也是同時預測圖像的全部類的全部邊界框。 這意味着咱們的網絡學習到的完整圖像和圖中全部的對象.YOLO設計可實現端到端訓練和實時的速度,同時保持較高的平均精度。性能
若是沒有目標,置信值爲零。另外,咱們但願置信度分數等於預測框與真實值之間聯合部分的交集(IOU)。
這些機率是以網格包含目標爲條件的,每一個網格單元咱們只預測的一組類別機率,而無論邊界框的的數量B時多少。
這些分數編碼了該類出如今框中的機率以及預測框擬合目標的程度。。在PASCAL VOC數據集上評價時,咱們採用S=7,B=2,C=20(該數據集包含20個類別),最終預測結果爲7×7×30(B*5+C)的tensor。
模型。 咱們的系統將檢測建模爲迴歸問題。它將圖像分紅SxS的網絡,而且每一個網格單元預測B個邊界框,這些邊界框的置信度以及C個類別機率,這些預測被編碼爲SxSx(B*5+C)的張量。
咱們使用卷積神經網絡來實現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的預測張量。
咱們在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的因子來隨機調整圖像的曝光和飽和度。
就像在訓練中同樣,預測測試圖像的檢測只須要一次網絡評估。在Pascal VOC上,每張圖像上網絡預測98個邊界框和每一個框的類別機率。YOLO在測試時很是快,由於它只須要一次網絡評估,不像基於分類器的方法。
網格設計強化了邊界框預測中的空間多樣性。一般很明顯一個目標落在哪個網格單元中,而網絡只能爲每一個目標預測一個邊界框。然而,一些大的目標或靠近多個網格單元邊界的目標能夠被多個網格單元很好地定位。非極大值抑制能夠用來修正這些多重檢測。對於R-CNN或DPM而言,性能不是關鍵的,非最大抑制會增長2%-3%的mAP。
目標檢測是計算機視覺中的核心問題。檢測流程一般從輸入圖像上(Haar,SIFT ,HOG ,卷積特徵)提取一組魯棒特徵開始。而後,分類器或定位器被用來識別特徵空間中的目標。這些分類器或定位器在整個圖像上或在圖像中的一些子區域上以滑動窗口的方式運行。咱們將YOLO檢測系統與幾種頂級檢測框架進行比較,突出了關鍵的類似性和差別性。
YOLO與R-CNN有一些類似之處。每一個網格單元提出潛在的邊界框並使用卷積特徵對這些框進行評分。可是,咱們的系統對網格單元提出進行了空間限制,這有助於緩解對同一目標的屢次檢測。咱們的系統還提出了更少的邊界框,每張圖像只有98個,而選擇性搜索則只有2000個左右。最後,咱們的系統將這些單獨的組件組合成一個單一的,共同優化的模型。
許多研究工做集中在加快DPM流程上。它們加速HOG計算,使用級聯,並將計算推進到GPU上。可是,實際上只有30Hz的DPM能夠實時運行。
YOLO不是試圖優化大型檢測流程的單個組件,而是徹底拋棄流程,被設計爲快速檢測。
像人臉或行人等單類別的檢測器能夠高度優化,由於他們必須處理更少的變化。YOLO是一種通用的檢測器,能夠學習同時檢測多個目標。
首先,咱們在PASCAL VOC 2007上比較YOLO和其它的實時檢測系統。爲了理解YOLO和R-CNN變種之間的差別,咱們探索了YOLO和R-CNN性能最高的版本之一Fast R-CNN在VOC 2007上錯誤率。根據不一樣的偏差曲線,咱們顯示YOLO能夠用來從新評估Fast R-CNN檢測,並減小背景假陽性帶來的錯誤,從而顯著提高性能。咱們還展現了在VOC 2012上的結果,並與目前最早進的方法比較了mAP。最後,在兩個藝術品數據集上咱們顯示了YOLO能夠比其它檢測器更好地泛化到新領域。
Pascal VOC 2007上的實時系統。比較快速檢測器的性能和速度。快速YOLO是Pascal VOC檢測記錄中速度最快的檢測器,其精度仍然是其它實時檢測器的兩倍。YOLO比快速版本更精確10mAP,同時在速度上仍保持實時性。
爲了進一步檢查YOLO和最早進的檢測器之間的差別,咱們詳細分析了VOC 2007的結果。咱們將YOLO與Fast R-CNN進行比較,由於Fast R-CNN是PASCAL上性能最高的檢測器之一而且它的檢測代碼是可公開獲得的。
咱們使用Hoiem等人的方法和工具。對於測試時的每一個類別,咱們看這個類別的前N個預測。每一個預測或者是正確的,或者根據錯誤類型進行分類:
下圖顯示了在全部的20個類別上每種錯誤類型平均值的分解圖。
偏差分析:Fast R-CNN vs. YOLO。這張圖顯示了各類類別的前N個預測中定位錯誤和背景錯誤的百分比(N = #表示目標在那個類別中)。
YOLO努力地正肯定位目標。定位錯誤佔YOLO錯誤的大多數,比其它錯誤源加起來都多。Fast R-CNN使定位錯誤少得多,但背景錯誤更多。它的檢測的13.6%是不包含任何目標的誤報。Fast R-CNN比YOLO預測背景檢測的可能性高出近3倍。
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相比,不會增長任何顯著的計算時間。
在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位。
用於目標檢測的學術數據集以相同分佈獲取訓練和測試數據。在現實世界的應用中,很難預測全部可能的用例,並且測試數據可能與系統以前看到的不一樣[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還很好地泛化到新領域,使其成爲依賴快速,強大的目標檢測應用的理想選擇。
7
參考文章:
[2]目標檢測算法之YOLO